Revert "Replaced cached_msglist array with a btree persistent through the session."
[citadel.git] / citadel / server.h
index f9240227751fc78e682462a73f088f45eab7821c..70770a15a931cbde9814401bcadf3b4cf969a330 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id$ */
 
 
 #ifndef SERVER_H
@@ -32,6 +31,8 @@ struct CtdlMessage {
 
 
 
+#define CTDLEXIT_SHUTDOWN      0       /* Normal shutdown; do NOT auto-restart */
+
 /*
  * Exit codes 101 through 109 are used for conditions in which
  * we deliberately do NOT want the service to automatically
@@ -43,136 +44,14 @@ struct CtdlMessage {
 #define CTDLEXIT_OOD           104     /* Out Of Date config - rerun setup */
 #define CTDLEXIT_DB            105     /* Unable to initialize database */
 #define CTDLEXIT_LIBCITADEL    106     /* Incorrect version of libcitadel */
-#define CTDLEXIT_SHUTDOWN      150     /* we're going down. watcher don't 
-                                        * fire us up again. 
-                                        */
-
-
-
-
-/*
- * 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.
- *
- */
-struct CitContext {
-       struct CitContext *prev;        /* Link to previous session in list */
-       struct CitContext *next;        /* Link to next session in the list */
-
-       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 */
-       int dont_term;          /* for special activities like artv so we don't get killed */
-       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 */
-       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 */
-       int is_master;          /* Is this session logged in using the master user? */
-
-       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 */
-       void (*h_command_function) (void) ;     /* service command function */
-       void (*h_async_function) (void) ;       /* do async msgs function */
-       int is_async;           /* Nonzero if client accepts async msgs */
-       int async_waiting;      /* Nonzero if there are async msgs waiting */
-       int input_waiting;      /* Nonzero if there is client input waiting */
-
-       /* Client information */
-       int cs_clientdev;       /* client developer ID */
-       int cs_clienttyp;       /* client type code */
-       int cs_clientver;       /* client version number */
-       char cs_clientname[32]; /* name of client software */
-       char cs_host[64];       /* host logged in from */
-       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_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];
-       FILE *upload_fp;
-       char upl_file[256];
-       char upl_path[PATH_MAX];
-       char upl_comment[256];
-       char upl_filedir[PATH_MAX];
-       char upl_mimetype[64];
-       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 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 */
-#ifdef HAVE_OPENSSL
-       SSL *ssl;
-       int redirect_ssl;
-#endif
+#define CTDL_EXIT_UNSUP_AUTH   107     /* Unsupported auth mode configured */
 
-       /* A linked list of all instant messages sent to us. */
-       struct ExpressMessage *FirstExpressMessage;
-       int disable_exp;        /* Set to 1 to disable incoming pages */
-       int newmail;            /* Other sessions increment this */
-
-       /* Masqueraded values in the 'who is online' list */
-       char fake_username[USERNAME_SIZE];
-       char fake_hostname[64];
-       char fake_roomname[ROOMNAMELEN];
-
-       /* Preferred MIME formats */
-       char preferred_formats[256];
-       int msg4_dont_decode;
-
-       /* Dynamically allocated session data */
-       char *session_specific_data;            /* Used by individual protocol modules */
-       struct cit_ical *CIT_ICAL;              /* calendaring data */
-       struct ma_info *ma;                     /* multipart/alternative data */
-       const char *ServiceName;                /* readable purpose of this session */
-       void *openid_data;                      /* Data stored by the OpenID module */
-};
-
-typedef struct CitContext t_context;
-
-/*
- * Values for CitContext.state
- * 
- * A session that is doing nothing is in CON_IDLE state.  When activity
- * is detected on the socket, it goes to CON_READY, indicating that it
- * needs to have a worker thread bound to it.  When a thread binds to
- * the session, it goes to CON_EXECUTING and does its thing.  When the
- * transaction is finished, the thread sets it back to CON_IDLE and lets
- * it go.
- */
-enum {
-       CON_IDLE,               /* This context is doing nothing */
-       CON_READY,              /* This context needs attention */
-       CON_EXECUTING           /* This context is bound to a thread */
-};
 
 
 #define CS_STEALTH     1       /* stealth mode */
 #define CS_CHAT                2       /* chat mode */
 #define CS_POSTING     4       /* Posting */
 
-struct CitContext *MyContext(void);
-#define CC MyContext()
 
 /*
  * This is the control record for the message base... 
@@ -188,7 +67,6 @@ struct CitControl {
        int MMdbversion;                /* Version of Berkeley DB used on previous server run */
 };
 
-extern struct CitContext *ContextList;
 extern int ScheduledShutdown;
 extern struct CitControl CitControl;
 
@@ -205,15 +83,6 @@ struct ExpressMessage {
 #define EM_GO_AWAY     2       /* Server requests client log off */
 #define EM_CHAT                4       /* Server requests client enter chat */
 
-struct ChatLine {
-       struct ChatLine *next;
-       int chat_seq;
-       time_t chat_time;
-       char chat_text[SIZ];
-       char chat_username[USERNAME_SIZE];
-       char chat_room[ROOMNAMELEN];
-};
-
 /*
  * Various things we need to lock and unlock
  */
@@ -246,6 +115,7 @@ enum {
        S_SCHEDULE_LIST,
        S_SINGLE_USER,
        S_LDAP,
+       S_IM_LOGS,
        MAX_SEMAPHORES
 };
 
@@ -322,6 +192,7 @@ struct cdbdata {
 #define EVT_TIMER      50      /* Timer events are called once per minute
                                   and are not tied to any session */
 #define EVT_HOUSE      51      /* as needed houskeeping stuff */
+#define EVT_SHUTDOWN   52      /* Server is shutting down */
 
 #define EVT_PURGEUSER  100     /* Deleting a user */
 #define EVT_NEWUSER    102     /* Creating a user */
@@ -340,7 +211,7 @@ enum {
 
 
 /* Defines the relationship of a user to a particular room */
-struct visit {
+typedef struct __visit {
        long v_roomnum;
        long v_roomgen;
        long v_usernum;
@@ -349,7 +220,7 @@ struct visit {
        char v_seen[SIZ];
        char v_answered[SIZ];
        int v_view;
-};
+} visit;
 
 #define V_FORGET       1       /* User has zapped this room        */
 #define V_LOCKOUT      2       /* User is locked out of this room  */