-
-/* $Id$ */
+/* $Id$
+ *
+ * Copyright (c) 1987-2010 by the citadel.org team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
#include "sysdep.h"
-
-
#include <sys/select.h>
-
#include <ctype.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <pthread.h>
#include <signal.h>
#include <sys/utsname.h>
-
#include <libcitadel.h>
#ifndef INADDR_NONE
#define DEVELOPER_ID 0
#define CLIENT_ID 4
#define CLIENT_VERSION 780 /* This version of WebCit */
-#define MINIMUM_CIT_VERSION 770 /* min required Citadel ver */
-#define LIBCITADEL_MIN 766 /* min required libcitadel ver */
+#define MINIMUM_CIT_VERSION 780 /* min required Citadel ver */
+#define LIBCITADEL_MIN 780 /* min required libcitadel ver */
#define DEFAULT_HOST "localhost" /* Default Citadel server */
#define DEFAULT_PORT "504"
#define TARGET "webcit01" /* Target for inline URL's */
US_FLOORS | US_COLOR | US_PROMPTCTL )
+
+
#define MAJORCODE(a) (((int)(a / 100) ) * 100)
#define LISTING_FOLLOWS 100
*/
#define NLI "(not logged in)"
+/*
+ * Expiry policy for the autopurger
+ */
+#define EXPIRE_NEXTLEVEL 0 /* Inherit expiration policy */
+#define EXPIRE_MANUAL 1 /* Don't expire messages at all */
+#define EXPIRE_NUMMSGS 2 /* Keep only latest n messages */
+#define EXPIRE_AGE 3 /* Expire messages after n days */
+typedef struct __ExpirePolicy {
+ int loaded; /* has this been loaded from the server? */
+ int expire_mode;
+ int expire_value;
+}ExpirePolicy;
+void LoadExpirePolicy(GPEXWhichPolicy which);
+void SaveExpirePolicyFromHTTP(GPEXWhichPolicy which);
/*
* Linked list of session variables encoded in an x-www-urlencoded content type
#define COOKIEUNNEEDED (1<<6)
#define ISSTATIC (1<<7)
#define FORCE_SESSIONCLOSE (1<<8)
-#define PARSE_REST_URL (1<<0)
+#define PARSE_REST_URL (1<<9)
+#define PROHIBIT_STARTPAGE (1<<10)
+
+typedef enum _RESTDispatchID {
+ ExistsID,
+ PutID,
+ DeleteID
+} RESTDispatchID;
+typedef int (*WebcitRESTDispatchID)(RESTDispatchID WhichAction, int IgnoreFloor);
typedef void (*WebcitHandlerFunc)(void);
typedef struct _WebcitHandler{
WebcitHandlerFunc F;
+ WebcitRESTDispatchID RID;
long Flags;
StrBuf *Name;
StrBuf *DisplayName;
StrBuf *ReadBuf; /* here we keep our stuff while reading linebuffered from the server. */
StrBuf *MigrateReadLineBuf; /* here we buffer legacy server read stuff */
const char *ReadPos; /* whats our read position in ReadBuf? */
- int chat_sock; /* Client socket to Citadel server - for chat */
+ int last_chat_seq; /* When in chat - last message seq# we saw */
time_t lastreq; /* Timestamp of most recent HTTP */
time_t last_pager_check; /* last time we polled for instant msgs */
ServInfo *serv_info; /* Information about the citserver we're connected to */
ParsedHttpHdrs *Hdr;
StrBuf *WBuf; /* Our output buffer */
StrBuf *HBuf; /* Our HeaderBuffer */
+ StrBuf *WFBuf; /* Wildfire error logging buffer */
HashList *vars; /* HTTP variable substitutions for this page */
StrBuf *trailing_javascript; /* extra javascript to be appended to page */
/* int is_mailbox; / * the current room is a private mailbox */
folder CurRoom; /* information about our current room */
-
+ const folder *ThisRoom; /* if REST found a room, remember it here. */
/* next/previous room thingabob */
struct march *march; /* march mode room list */
char ugname[128]; /* where does 'ungoto' take us */
int remember_new_mail; /* last count of new mail messages */
/* Roomiew control */
- HashList *Floors; /* floors our citserver has... */
+ HashList *Floors; /* floors our citserver has hashed numeric for quicker access*/
+ HashList *FloorsByName; /* same but hashed by its name */
+ HashList *Rooms; /* our directory structure as loaded by LKRA */
HashList *summ; /* list of messages for mailbox summary view */
/** Perhaps these should be within a struct instead */
long startmsg; /* message number to start at */
/* cache stuff for templates. TODO: find a smartrer way */
HashList *ServCfg; /* cache our server config for editing */
HashList *InetCfg; /* Our inet server config for editing */
-
+ ExpirePolicy Policy[maxpolicy];
};
enum {
- S_SELECT,
S_SHUTDOWN,
MAX_SEMAPHORES
};
void locate_host(StrBuf *TBuf, int);
void become_logged_in(const StrBuf *user, const StrBuf *pass, StrBuf *serv_response);
void openid_manual_create(void);
-void display_login();
+void display_login(void);
void display_openids(void);
void do_welcome(void);
void do_logout(void);
int suppress_check,
int cache);
void output_custom_content_header(const char *ctype);
+
+#ifdef UBER_VERBOSE_DEBUGGING
+#define wc_printf(...) wcc_printf(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
+void wcc_printf(const char *FILE, const char *FUNCTION, long LINE, const char *format, ...);
+#else
void wc_printf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
+#endif
+
void hprintf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
void output_static(const char* What);
void do_addrbook_view(addrbookent *addrbook, int num_ab);
void fetch_ab_name(message_summary *Msg, char **namebuf);
-void display_vcard(StrBuf *Target, StrBuf *vcard_source, char alpha, int full, char **storename, long msgnum);
+void display_vcard(StrBuf *Target, wc_mime_attachment *Mime, char alpha, int full, char **storename, long msgnum);
void jsonMessageList(void);
void new_summary_view(void);
void getseen(void);
int lingering_close(int fd);
-char *memreadline(char *start, char *buf, int maxlen);
-char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen);
void remove_token(char *source, int parmnum, char separator);
StrBuf *load_mimepart(long msgnum, char *partnum);
-void display_addressbook(long msgnum, char alpha);
void offer_start_page(StrBuf *Target, WCTemplputParams *TP);
void convenience_page(const char *titlebarcolor, const char *titlebarmsg, const char *messagetext);
void output_html(const char *, int, int, StrBuf *, StrBuf *);
extern char *months[];
extern char *days[];
-int read_server_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf);
+int serv_read_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf);
int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize);
int StrBuf_ServGetBLOBBuffered(StrBuf *buf, long BlobSize);
int read_server_text(StrBuf *Buf, long *nLines);