Gzip stream chunked encoding is working now.
[citadel.git] / webcit / webcit.h
index 3eb35337138d91c5b42480f0ad8a1dacc941acd7..64034c777eb9f2afe842a23952d93d55714b1d82 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1987-2012 by the citadel.org team
+ * Copyright (c) 1987-2014 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License version 3.
@@ -25,9 +25,6 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <sys/socket.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
 #include <sys/stat.h>
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
@@ -123,14 +120,18 @@ extern char *ssl_cipher_list;
 
 #define TRACE syslog(LOG_DEBUG, "\033[3%dmCHECKPOINT: %s:%d\033[0m", ((__LINE__%6)+1), __FILE__, __LINE__)
 
+#ifdef UNDEF_MEMCPY
+#undef memcpy
+#endif
+
 #define SLEEPING               180             /* TCP connection timeout */
 #define WEBCIT_TIMEOUT         900             /* WebCit session timeout */
 #define PORT_NUM               2000            /* port number to listen on */
 #define DEVELOPER_ID           0
 #define CLIENT_ID              4
-#define CLIENT_VERSION         811             /* This version of WebCit */
-#define MINIMUM_CIT_VERSION    811             /* Minimum required version of Citadel server */
-#define        LIBCITADEL_MIN          811             /* Minimum required version of libcitadel */
+#define CLIENT_VERSION         829             /* This version of WebCit */
+#define MINIMUM_CIT_VERSION    829             /* Minimum required version of Citadel server */
+#define        LIBCITADEL_MIN          821             /* Minimum required version of libcitadel */
 #define DEFAULT_HOST           "localhost"     /* Default Citadel server */
 #define DEFAULT_PORT           "504"
 #define TARGET                 "webcit01"      /* Window target for inline URL's */
@@ -149,70 +150,6 @@ extern char *ssl_cipher_list;
 #endif
 
 
-/*
- * Room flags (from Citadel)
- *
- * bucket one...
- */
-#define QR_PERMANENT   1               /* Room does not purge                  */
-#define QR_INUSE       2               /* Set if in use, clear if avail        */
-#define QR_PRIVATE     4               /* Set for any type of private room     */
-#define QR_PASSWORDED  8               /* Set if there's a password too        */
-#define QR_GUESSNAME   16              /* Set if it's a guessname room         */
-#define QR_DIRECTORY   32              /* Directory room                       */
-#define QR_UPLOAD      64              /* Allowed to upload                    */
-#define QR_DOWNLOAD    128             /* Allowed to download                  */
-#define QR_VISDIR      256             /* Visible directory                    */
-#define QR_ANONONLY    512             /* Anonymous-Only room                  */
-#define QR_ANONOPT     1024            /* Anonymous-Option room                */
-#define QR_NETWORK     2048            /* Shared network room                  */
-#define QR_PREFONLY    4096            /* Preferred status needed to enter     */
-#define QR_READONLY    8192            /* Aide status required to post         */
-#define QR_MAILBOX     16384           /* Set if this is a private mailbox     */
-
-/*
- * bucket two...
- */
-#define QR2_SYSTEM     1               /* System room; hide by default         */
-#define QR2_SELFLIST   2               /* Self-service mailing list mgmt       */
-#define QR2_COLLABDEL  4               /* Anyone who can post can also delete  */
-#define QR2_SUBJECTREQ  8               /* Subject strongly recommended                */
-#define QR2_SMTP_PUBLIC 16              /* smtp public postable room           */
-#define QR2_MODERATED  32              /* Listservice aide has to permit posts */
-
-/*
- * user/room access
- */
-#define UA_KNOWN               2
-#define UA_GOTOALLOWED         4
-#define UA_HASNEWMSGS          8
-#define UA_ZAPPED              16
-#define UA_POSTALLOWED          32
-#define UA_ADMINALLOWED         64
-#define UA_DELETEALLOWED        128
-#define UA_ISTRASH              256    /* Only available in room view... */
-
-
-/*
- * User flags (from Citadel)
- */
-#define US_NEEDVALID   1               /* User needs to be validated           */
-#define US_PERM                4               /* Permanent user                       */
-#define US_LASTOLD     16              /* Print last old message with new      */
-#define US_EXPERT      32              /* Experienced user                     */
-#define US_UNLISTED    64              /* Unlisted userlog entry               */
-#define US_NOPROMPT    128             /* Don't prompt after each message      */
-#define US_PROMPTCTL   256             /* <N>ext & <S>top work at prompt       */
-#define US_DISAPPEAR   512             /* Use "disappearing msg prompts"       */
-#define US_REGIS       1024            /* Registered user                      */
-#define US_PAGINATOR   2048            /* Pause after each screen of text      */
-#define US_INTERNET    4096            /* Internet mail privileges             */
-#define US_FLOORS      8192            /* User wants to see floors             */
-#define US_COLOR       16384           /* User wants ANSI color support        */
-#define US_USER_SET    (US_LASTOLD | US_EXPERT | US_UNLISTED | \
-                       US_NOPROMPT | US_DISAPPEAR | US_PAGINATOR | \
-                       US_FLOORS | US_COLOR | US_PROMPTCTL )
-
 
 
 #define SRV_STATUS_MSG(ServerLineBuf) (ChrPtr(ServerLineBuf) + 4), (StrLength(ServerLineBuf) - 4)
@@ -320,11 +257,16 @@ typedef struct _disp_cal {
        icalproperty_status Status;
 } disp_cal;                                            
 
-typedef struct _IcalEnumMap {
+typedef struct _IcalKindEnumMap {
        const char *Name;
        long NameLen;
        icalproperty_kind map;
-} IcalEnumMap;
+} IcalKindEnumMap;
+typedef struct _IcalMethodEnumMap {
+       const char *Name;
+       long NameLen;
+        icalproperty_method map;
+} IcalMethodEnumMap;
 
 /*
  * Address book entry (keep it short and sweet, it's just a quickie lookup
@@ -354,7 +296,7 @@ typedef struct _addrbookent {
 #define DATEFMT_BRIEF 1
 #define DATEFMT_RAWDATE 2
 #define DATEFMT_LOCALEDATE 3
-void webcit_fmt_date(char *buf, size_t siz, time_t thetime, int Format);
+long webcit_fmt_date(char *buf, size_t siz, time_t thetime, int Format);
 
 
 typedef enum _RESTDispatchID {
@@ -444,6 +386,10 @@ typedef struct _HdrRefs {
 
 typedef struct _ParsedHttpHdrs {
        int http_sock;                          /* HTTP server socket */
+       long HaveRange;
+       long RangeStart;
+       long RangeTil;
+       long TotalBytes;
        const char *Pos;
        StrBuf *ReadBuf;
 
@@ -505,7 +451,7 @@ struct wcsession {
        StrBuf *wc_password;                    /* Password of current user */
        StrBuf *httpauth_pass;                  /* only for GroupDAV sessions */
        int axlevel;                            /* this user's access level */
-       int is_aide;                            /* nonzero == this user is an Aide */
+       int is_aide;                            /* nonzero == this user is an Admin */
        int connected;                          /* nonzero == we are connected to Citadel */
        int logged_in;                          /* nonzero == we are logged in  */
        int need_regi;                          /* This user needs to register. */
@@ -550,6 +496,8 @@ struct wcsession {
 
        char last_chat_user[256];
 
+       StrBuf *IconTheme;                      /* Icontheme setting */
+
 /* Iconbar controls */
        int cache_max_folders;
        int cache_num_floors;
@@ -617,7 +565,7 @@ void ssl_lock(int mode, int n, const char *file, int line);
 int starttls(int sock);
 extern SSL_CTX *ssl_ctx;  
 int client_read_sslbuffer(StrBuf *buf, int timeout);
-void client_write_ssl(const StrBuf *Buf);
+int client_write_ssl(const StrBuf *Buf);
 #endif
 
 extern int is_https;
@@ -634,6 +582,7 @@ void InitialiseSemaphores(void);
 void begin_critical_section(int which_one);
 void end_critical_section(int which_one);
 
+void CheckGZipCompressionAllowed(const char *MimeType, long MLen);
 
 extern void do_404(void);
 void http_redirect(const char *);
@@ -735,7 +684,6 @@ void output_html(const char *, int, int, StrBuf *, StrBuf *);
 ssize_t write(int fd, const void *buf, size_t count);
 void cal_process_attachment(wc_mime_attachment *Mime);
 
-void address_book_popup(void);
 void begin_ajax_response(void);
 void end_ajax_response(void);
 
@@ -744,6 +692,7 @@ extern char *days[];
 long locate_user_vcard_in_this_room(message_summary **VCMsg,
                                    wc_mime_attachment **VCAtt);
 void http_transmit_thing(const char *content_type, int is_static);
+void http_transmit_headers(const char *content_type, int is_static, long is_chunked, int is_gzip);
 long unescape_input(char *buf);
 void check_thread_pool_size(void);
 void StrEndTab(StrBuf *Target, int tabnum, int num_tabs);
@@ -804,6 +753,7 @@ struct blogpost {
        long *msgs;             /* Array of msgnums for messages we are displaying */
        int num_msgs;           /* Number of msgnums stored in 'msgs' */
        int alloc_msgs;         /* Currently allocated size of array */
+       int unread_oments;
 };
 
 
@@ -819,3 +769,5 @@ struct bltr {
 struct bltr blogview_learn_thread_references(long msgnum);
 void tmplput_blog_permalink(StrBuf *Target, WCTemplputParams *TP);
 void display_summary_page(void);
+
+HashList *GetValidDomainNames(StrBuf *Target, WCTemplputParams *TP);