#include "subst.h"
#include "messages.h"
#include "paramhandling.h"
-#include "preferences.h"
#include "roomops.h"
+#include "preferences.h"
#ifdef HAVE_OPENSSL
/* Work around RedHat's b0rken OpenSSL includes */
#define PORT_NUM 2000 /* port number to listen on */
#define DEVELOPER_ID 0
#define CLIENT_ID 4
-#define CLIENT_VERSION 766 /* This version of WebCit */
-#define MINIMUM_CIT_VERSION 766 /* min required Citadel ver */
+#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 DEFAULT_HOST "localhost" /* Default Citadel server */
#define DEFAULT_PORT "504"
#define UA_POSTALLOWED 32
#define UA_ADMINALLOWED 64
#define UA_DELETEALLOWED 128
+#define UA_ISTRASH 256 /* Only available in room view... */
/*
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)
typedef void (*WebcitHandlerFunc)(void);
typedef struct _WebcitHandler{
char ImportantMessage[SIZ];
StrBuf *ImportantMsg;
HashList *Directory; /* Parts of the directory URL in snippets */
- const floor *CurrentFloor; /**< when Parsing REST, which floor are we on? */
+ const Floor *CurrentFloor; /**< when Parsing REST, which floor are we on? */
/* accounting */
StrBuf *wc_username; /* login name of current user */
int time_format_cache; /* which timeformat does our user like? */
/* current room related */
- StrBuf *wc_roomname; /* Room we are currently in */
- unsigned room_flags; /* flags associated with the current room */
- unsigned room_flags2; /* flags associated with the current room */
- int wc_view; /* view for the current room */
- int wc_default_view; /* default view for the current room */
- int wc_is_trash; /* nonzero == current room is a Trash folder */
- int wc_floor; /* floor number of current room */
- int is_mailbox; /* the current room is a private mailbox */
-
+/* StrBuf *wc_roomname; / * Room we are currently in */
+/* unsigned room_flags; / * flags associated with the current room */
+/* unsigned room_flags2; / * flags associated with the current room */
+/* int wc_view; / * view for the current room */
+/* int wc_default_view; / * default view for the current room */
+/* int wc_is_trash; / * nonzero == current room is a Trash folder */
+/* int wc_floor; / * floor number of current room */
+/* 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 */
int cache_max_folders;
int cache_num_floors;
time_t cache_timestamp;
- HashList *IconBarSettings; /* which icons should be shown / not shown? */
+ long *IBSettingsVec; /* which icons should be shown / not shown? */
const StrBuf *floordiv_expanded; /* which floordiv currently expanded */
/* 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];
};
void begin_critical_section(int which_one);
void end_critical_section(int which_one);
-void stuff_to_cookie(char *cookie, size_t clen,
- int session,
- StrBuf *user,
- StrBuf *pass,
- StrBuf *room,
- const char *language
-);
+void stuff_to_cookie(int unset_cookie);
+
void cookie_to_stuff(StrBuf *cookie,
int *session,
StrBuf *user,
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);
-int goto_config_room(StrBuf *Buf);
long locate_user_vcard_in_this_room(message_summary **VCMsg,
wc_mime_attachment **VCAtt);
void sleeeeeeeeeep(int);
void str_wiki_index(char *s);
long guess_calhourformat(void);
int get_time_format_cached (void);
-int xtoi(const char *in, size_t len);
const char *get_selected_language(void);
+void display_wiki_pagelist(void);
#define DATEFMT_FULL 0
#define DATEFMT_BRIEF 1