Server-side changes to allow users to submit messages
[citadel.git] / citadel / server.h
index 2b60be19372c40d96a2253db6f05a85c65d11771..19eb12a2a1b722a4e06a197fa134166207223a60 100644 (file)
@@ -31,14 +31,27 @@ struct CtdlMessage {
 #define        CM_SKIP_HOOKS   0x01            /* Don't run server-side handlers */
 
 
+
+/*
+ * Exit codes 101 through 109 are used for conditions in which
+ * we deliberately do NOT want the service to automatically
+ * restart.
+ */
+#define CTDLEXIT_CONFIG                101     /* Could not read citadel.config */
+#define CTDLEXIT_CONTROL       102     /* Could not acquire lock */
+#define CTDLEXIT_HOME          103     /* Citadel home directory not found */
+#define CTDLEXIT_OOD           104     /* Out Of Date config - rerun setup */
+#define CTDLEXIT_DB            105     /* Unable to initialize database */
+
+
+
+
 /*
  * Here's the big one... the Citadel context structure.
  *
  * This structure keeps track of all information relating to a running 
  * session on the server.  We keep one of these for each session thread.
  *
- * Note that the first element is "*next" so that it may be used without
- * modification in a linked list.
  */
 struct CitContext {
        struct CitContext *prev;        /* Link to previous session in list */
@@ -68,7 +81,7 @@ struct CitContext {
        int async_waiting;      /* Nonzero if there are async msgs waiting */
        int input_waiting;      /* Nonzero if there is client input waiting */
 
-       /* feeping creaturisms... */
+       /* Client information */
        int cs_clientdev;       /* client developer ID */
        int cs_clienttyp;       /* client type code */
        int cs_clientver;       /* client version number */
@@ -77,7 +90,9 @@ struct CitContext {
        char cs_addr[64];       /* address logged in from */
 
        /* The Internet type of thing */
-       char cs_inet_email[128];/* Return address of outbound Internet mail */
+       char cs_inet_email[128];                /* Return address of outbound Internet mail */
+       char cs_inet_other_emails[1024];        /* User's other valid Internet email addresses */
+       char cs_inet_fn[128];                   /* Friendly-name of outbound Internet mail */
 
        FILE *download_fp;      /* Fields relating to file transfer */
        char download_desired_section[128];
@@ -113,11 +128,10 @@ struct CitContext {
        int disable_exp;        /* Set to 1 to disable incoming pages */
        int newmail;            /* Other sessions increment this */
 
-       /* Masquerade... */
-       char fake_username[USERNAME_SIZE];      /* Fake username <bc> */ 
-       char fake_postname[USERNAME_SIZE];      /* Fake postname <bc> */
-       char fake_hostname[64];                 /* Fake hostname <bc> */
-       char fake_roomname[ROOMNAMELEN];        /* Fake roomname <bc> */
+       /* Masqueraded values in the 'who is online' list */
+       char fake_username[USERNAME_SIZE];
+       char fake_hostname[64];
+       char fake_roomname[ROOMNAMELEN];
 
        char preferred_formats[256];            /* Preferred MIME formats */
 
@@ -125,6 +139,7 @@ struct CitContext {
        struct citimap *IMAP;
        struct citpop3 *POP3;
        struct citsmtp *SMTP;
+       struct citmgsve *MGSVE; /**< Managesieve Session struct */
        char *SMTP_RECPS;
        char *SMTP_ROOMS;
        struct cit_ical *CIT_ICAL;              /* calendaring data */
@@ -220,6 +235,8 @@ enum {
        S_DEBUGMEMLEAKS,
        S_ATBF,
        S_JOURNAL_QUEUE,
+       S_RPLIST,
+       S_SIEVELIST,
        MAX_SEMAPHORES
 };
 
@@ -239,7 +256,8 @@ enum {
        MT_CITADEL,             /* Citadel proprietary */
        MT_RFC822,              /* RFC822 */
        MT_MIME,                /* MIME-formatted message */
-       MT_DOWNLOAD             /* Download a component */
+       MT_DOWNLOAD,            /* Download a component */
+       MT_SPEW_SECTION         /* Download a component in a single operation */
 };
 
 /*
@@ -409,7 +427,7 @@ enum {
 
 /*
  * ServiceFunctionHook extensions are used for hooks which implement various
- * non-Citadel services (on TCP protocols) directly in the Citadel server.
+ * protocols (either on TCP or on unix domain sockets) directly in the Citadel server.
  */
 struct ServiceFunctionHook {
        struct ServiceFunctionHook *next;
@@ -453,6 +471,15 @@ struct MetaData {
        long meta_rfc822_length;        /* Cache of RFC822-translated msg length */
 };
 
+/* Calls to AdjRefCount() are queued and deferred, so the user doesn't
+ * have to wait for various disk-intensive operations to complete synchronously.
+ * This is the record format.
+ */
+struct arcq {
+       long arcq_msgnum;               /* Message number being adjusted */
+       int arcq_delta;                 /* Adjustment ( usually 1 or -1 ) */
+};
+
 
 /* 
  * Serialization routines use this struct to return a pointer and a length
@@ -463,10 +490,10 @@ struct ser_ret {
 };
 
 
-/* Preferred field order */
-/*               **********                    Important fields */
-/*                         ***************     Semi-important fields */
-/*                                        *    Message text (MUST be last) */
+/* Preferred field order                                                       */
+/*               **********                    Important fields                */
+/*                         ***************     Semi-important fields           */
+/*                                        *    Message text (MUST be last)     */
 #define FORDER "IPTAFONHRDBCEJGKLQSVWXZYUM"
 
 #endif /* SERVER_H */