* Simplified tcp_connectsock()
[citadel.git] / webcit / webcit.h
index 2aa529bfbdf9822091fd85d35667ee4eb728f262..2e53e309802580f1084a878059c763b278cd0f5b 100644 (file)
@@ -1,11 +1,24 @@
-
-/* $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
@@ -38,7 +51,6 @@
 #include <pthread.h>
 #include <signal.h>
 #include <sys/utsname.h>
-
 #include <libcitadel.h>
 
 #ifndef INADDR_NONE
@@ -116,13 +128,12 @@ extern char *ssl_cipher_list;
 #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 */
 #define HOUSEKEEPING           15              /* Housekeeping frequency */
-#define MIN_WORKER_THREADS     5
 #define MAX_WORKER_THREADS     250
 #define LISTEN_QUEUE_LENGTH    100             /* listen() backlog queue */
 
@@ -202,6 +213,8 @@ extern char *ssl_cipher_list;
                        US_FLOORS | US_COLOR | US_PROMPTCTL )
 
 
+
+
 #define MAJORCODE(a) (((int)(a / 100) ) * 100)
 
 #define LISTING_FOLLOWS        100
@@ -243,6 +256,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
@@ -318,10 +345,19 @@ typedef struct _addrbookent {
 #define ISSTATIC (1<<7)
 #define FORCE_SESSIONCLOSE (1<<8)
 #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;
@@ -437,7 +473,7 @@ struct wcsession {
        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 */
@@ -448,6 +484,7 @@ struct wcsession {
        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 */
@@ -533,7 +570,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];
 };
 
 
@@ -549,8 +586,8 @@ void RegisterHeaderHandler(const char *Name, long Len, Header_Evaluator F);
 
 
 enum {
-       S_SELECT,
        S_SHUTDOWN,
+       S_SPAWNER,
        MAX_SEMAPHORES
 };
 
@@ -582,7 +619,8 @@ extern int is_https;
 extern int setup_wizard;
 extern char wizard_filename[];
 extern int follow_xff;
-extern int num_threads;
+extern int num_threads_existing;
+extern int num_threads_executing;
 
 void InitialiseSemaphores(void);
 void begin_critical_section(int which_one);
@@ -614,7 +652,7 @@ void CreateMimeStr(void);
 int GetConnected(void);
 void DeleteServInfo(ServInfo **FreeMe);
 int uds_connectsock(char *);
-int tcp_connectsock(char *, char *);
+int tcp_connectsock(char *, int);
 int serv_getln(char *strbuf, int bufsize);
 int StrBuf_ServGetln(StrBuf *buf);
 int GetServerStatus(StrBuf *Line, long* FullState);