* Reference count adjustments are now deferred by queuing
[citadel.git] / citadel / server.h
index 32362acf7f166d88e96a3c086565d8b3a24cdcef..fa424e4606310948c3660397a72f167d3b146845 100644 (file)
@@ -44,25 +44,21 @@ struct CitContext {
        struct CitContext *prev;        /* Link to previous session in list */
        struct CitContext *next;        /* Link to next session in the list */
 
-       struct ctdluser user;   /* Database record buffers */
-       struct ctdlroom room;
-
        int state;              /* thread state (see CON_ values below) */
        int kill_me;            /* Set to nonzero to flag for termination */
+       int client_socket;
+       int cs_pid;             /* session ID */
+       time_t lastcmd;         /* time of last command executed */
+       time_t lastidle;        /* For computing idle time */
 
        char curr_user[USERNAME_SIZE];  /* name of current user */
        int logged_in;          /* logged in */
        int internal_pgm;       /* authenticated as internal program */
-       char temp[PATH_MAX];    /* temp file name */
        int nologin;            /* not allowed to log in */
        int is_local_socket;    /* set to 1 if client is on unix domain sock */
        int curr_view;          /* The view type for the current user/room */
 
-       char net_node[PATH_MAX];/* Is the client another Citadel server? */
-       int client_socket;
-       int cs_pid;             /* session ID */
-       time_t lastcmd;         /* time of last command executed */
-       time_t lastidle;        /* For computing idle time */
+       char net_node[32]       ;/* Is the client another Citadel server? */
        time_t previous_login;  /* Date/time of previous login */
        char lastcmdname[5];    /* name of last command executed */
        unsigned cs_flags;      /* miscellaneous flags */
@@ -81,23 +77,25 @@ struct CitContext {
        char cs_addr[64];       /* address logged in from */
 
        /* The Internet type of thing */
-       char cs_inet_email[SIZ];/* Return address of outbound Internet mail */
+       char cs_inet_email[128];/* Return address of outbound Internet mail */
 
        FILE *download_fp;      /* Fields relating to file transfer */
        char download_desired_section[128];
        FILE *upload_fp;
-       char upl_file[PATH_MAX];
+       char upl_file[256];
        char upl_path[PATH_MAX];
-       char upl_comment[SIZ];
+       char upl_comment[256];
        char upl_filedir[PATH_MAX];
        char dl_is_net;
        char upload_type;
 
+       struct ctdluser user;   /* Database record buffers */
+       struct ctdlroom room;
+
        /* Beginning of cryptography - session nonce */
        char cs_nonce[NONCE_SIZE];      /* The nonce for this session's next auth transaction */
 
-       /* Redirect this session's output to somewhere else? */
-       FILE *redirect_fp;              /* a file instead (will go away) */
+       /* Redirect this session's output to a memory buffer? */
        char *redirect_buffer;          /* the buffer */
        size_t redirect_len;            /* length of data in buffer */
        size_t redirect_alloc;          /* length of allocated buffer */
@@ -121,12 +119,13 @@ struct CitContext {
        char fake_hostname[64];                 /* Fake hostname <bc> */
        char fake_roomname[ROOMNAMELEN];        /* Fake roomname <bc> */
 
-       char preferred_formats[SIZ];            /* Preferred MIME formats */
+       char preferred_formats[256];            /* Preferred MIME formats */
 
        /* Dynamically allocated session data */
        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 */
@@ -159,6 +158,19 @@ enum {
 struct CitContext *MyContext(void);
 #define CC MyContext()
 
+/*
+ * This is the control record for the message base... 
+ */
+struct CitControl {
+       long MMhighest;                 /* highest message number in file   */
+       unsigned MMflags;               /* Global system flags              */
+       long MMnextuser;                /* highest user number on system    */
+       long MMnextroom;                /* highest room number on system    */
+       int version;                    /* Server-hosted upgrade level      */
+       int fulltext_wordbreaker;       /* ID of wordbreaker in use         */
+       long MMfulltext;                /* highest message number indexed   */
+};
+
 extern struct CitContext *ContextList;
 extern int ScheduledShutdown;
 extern struct CitControl CitControl;
@@ -207,6 +219,10 @@ enum {
        S_LDAP,
        S_FLOORCACHE,
        S_DEBUGMEMLEAKS,
+       S_ATBF,
+       S_JOURNAL_QUEUE,
+       S_RPLIST,
+       S_SIEVELIST,
        MAX_SEMAPHORES
 };
 
@@ -226,7 +242,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 */
 };
 
 /*
@@ -250,6 +267,8 @@ enum {
        CDB_DIRECTORY,          /* address book directory        */
        CDB_USETABLE,           /* network use table             */
        CDB_BIGMSGS,            /* larger message bodies         */
+       CDB_FULLTEXT,           /* full text search index        */
+       CDB_EUIDINDEX,          /* locate msgs by EUID           */
        MAXCDB                  /* total number of CDB's defined */
 };
 
@@ -275,6 +294,12 @@ struct CleanupFunctionHook {
 };
 extern struct CleanupFunctionHook *CleanupHookTable;
 
+struct FixedOutputHook {
+       struct FixedOutputHook *next;
+       char content_type[64];
+       void (*h_function_pointer) (char *, int);
+};
+extern struct FixedOutputHook *FixedOutputTable;
 
 
 
@@ -432,6 +457,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
@@ -446,6 +480,6 @@ struct ser_ret {
 /*               **********                    Important fields */
 /*                         ***************     Semi-important fields */
 /*                                        *    Message text (MUST be last) */
-#define FORDER "IPTAFONHRDBCEGJKLQSVWXYZUM"
+#define FORDER "IPTAFONHRDBCEJGKLQSVWXZYUM"
 
 #endif /* SERVER_H */