* general way to do retrieve / save autopurger data
[citadel.git] / webcit / webcit.h
index 3a003556117f71961649c7ce975ecfaea1a0605f..134fb032684b414f6dc0e0e6686ed9e4ad66f882 100644 (file)
@@ -89,8 +89,8 @@
 #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 */
@@ -115,8 +115,8 @@ extern char *ssl_cipher_list;
 #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"
@@ -178,6 +178,7 @@ extern char *ssl_cipher_list;
 #define UA_POSTALLOWED          32
 #define UA_ADMINALLOWED         64
 #define UA_DELETEALLOWED        128
+#define UA_ISTRASH              256 /* Only available in room view... */
 
 
 /*
@@ -201,6 +202,8 @@ extern char *ssl_cipher_list;
                        US_FLOORS | US_COLOR | US_PROMPTCTL )
 
 
+
+
 #define MAJORCODE(a) (((int)(a / 100) ) * 100)
 
 #define LISTING_FOLLOWS        100
@@ -242,6 +245,20 @@ extern char *ssl_cipher_list;
  */
 #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
@@ -316,15 +333,18 @@ typedef struct _addrbookent {
 #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{
        WebcitHandlerFunc F;
        long Flags;
        StrBuf *Name;
+       StrBuf *DisplayName;
 } WebcitHandler;
-void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, WebcitHandlerFunc F, long Flags);
+
+
+void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, const char *DisplayName, long dslen, WebcitHandlerFunc F, long Flags);
 
 typedef struct _headereval {
        ExamineMsgHeaderFunc evaluator;
@@ -376,6 +396,7 @@ typedef struct _HdrRefs {
        int gzip_ok;                            /* Nonzero if Accept-encoding: gzip */
        int prohibit_caching;
        int dav_depth;
+       int Static;
 
        /* these are references into Hdr->HTTPHeaders, so we don't need to free them. */
        StrBuf *ContentType;
@@ -383,6 +404,7 @@ typedef struct _HdrRefs {
        StrBuf *ReqLine;
        StrBuf *http_host;                      /* HTTP Host: header */
        StrBuf *browser_host;
+       StrBuf *browser_language;
        StrBuf *user_agent;
        StrBuf *plainauth;
        StrBuf *dav_ifmatch;
@@ -448,7 +470,7 @@ struct wcsession {
        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 */
@@ -474,15 +496,17 @@ struct wcsession {
        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 */
@@ -499,7 +523,9 @@ struct wcsession {
        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 */
@@ -515,7 +541,7 @@ struct wcsession {
        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 */
 
 
@@ -523,7 +549,7 @@ struct wcsession {
 /* 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];
 };
 
 
@@ -578,13 +604,8 @@ void InitialiseSemaphores(void);
 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,
@@ -595,7 +616,7 @@ void cookie_to_stuff(StrBuf *cookie,
 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);
@@ -604,6 +625,8 @@ void display_aide_menu(void);
 void display_advanced_menu(void);
 void slrp_highest(void);
 ServInfo *get_serv_info(StrBuf *, StrBuf *);
+void RegisterEmbeddableMimeType(const char *MimeType, long MTLen, int Priority);
+void CreateMimeStr(void);
 int GetConnected(void);
 void DeleteServInfo(ServInfo **FreeMe);
 int uds_connectsock(char *);
@@ -638,7 +661,14 @@ void output_headers(    int do_httpheaders,
                        int suppress_check,
                        int cache);
 void output_custom_content_header(const char *ctype);
-void wprintf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
+
+#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);
 
@@ -655,7 +685,7 @@ void embed_main_menu(void);
 
 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);
@@ -699,8 +729,6 @@ void clear_local_substs(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);
@@ -719,7 +747,6 @@ void folders(void);
 
 
 
-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 *);
@@ -763,11 +790,10 @@ int ical_ctdl_is_overlap(
 
 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);
@@ -784,8 +810,8 @@ void end_tab(int tabnum, int num_tabs);
 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