]> code.citadel.org Git - citadel.git/blobdiff - citadel/server.h
* Implemented most of MAIL FROM:
[citadel.git] / citadel / server.h
index 82113952da3b5eec272d77ac60ab4ba2d0ebc861..0a7812c11829435df614289c6bf6c569c96dc870 100644 (file)
@@ -1,10 +1,9 @@
 /* $Id$ */
-typedef pthread_t THREAD;
 
 /* Uncomment this if you want to track memory leaks.
  * This incurs some overhead, so don't use it unless you're debugging the code!
  */
-#define DEBUG_MEMORY_LEAKS
+/* #define DEBUG_MEMORY_LEAKS */
 
 /*
  * New format for a message in memory
@@ -56,23 +55,24 @@ struct CitContext {
        struct usersupp usersupp;       /* Database record buffers */
        struct quickroom quickroom;
 
+       int state;              /* thread state (see CON_ values below) */
+       int kill_me;            /* Set to nonzero to flag for termination */
+
        char curr_user[32];     /* name of current user */
        int logged_in;          /* logged in */
        int internal_pgm;       /* authenticated as internal program */
        char temp[32];          /* temp file name */
        int nologin;            /* not allowed to log in */
 
-       char net_node[32];
-       THREAD mythread;
-       int n_crit;             /* number of critical sections open */
+       char net_node[32];      /* Is the client another Citadel server? */
        int client_socket;
        int cs_pid;             /* session ID */
-       char cs_room[ROOMNAMELEN];      /* current room */
        time_t cs_lastupdt;     /* time of last update */
        time_t lastcmd;         /* time of last command executed */
        time_t lastidle;        /* For computing idle time */
        char lastcmdname[5];    /* name of last command executed */
        unsigned cs_flags;      /* miscellaneous flags */
+       void (*h_command_function) (void) ;     /* service command function */
 
        /* feeping creaturisms... */
        int cs_clientdev;       /* client developer ID */
@@ -99,11 +99,21 @@ struct CitContext {
        char fake_roomname[ROOMNAMELEN];        /* Name of the fake room <bc> */
 
        int FloorBeingSearched; /* This is used by cmd_lrms() etc.   */
-       struct CtdlSessData *FirstSessData;
+
+       struct CtdlSessData *FirstSessData;     /* Allocated session data */
+       char buffer1[256];              /* General-purpose workspace */
+       char buffer2[256];              /* General-purpose workspace */
 };
 
 typedef struct CitContext t_context;
 
+/* Values for CitContext.state */
+enum {
+       CON_IDLE,               /* This context is doing nothing */
+       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 */
@@ -154,6 +164,7 @@ enum {
        S_DATABASE,
        S_NETDB,
        S_SUPPMSGMAIN,
+       S_I_WANNA_SELECT,
        MAX_SEMAPHORES
 };
 
@@ -300,6 +311,19 @@ enum {
 
 
 
+/*
+ * ServiceFunctionHook extensions are used for hooks which implement various
+ * non-Citadel services (on TCP protocols) directly in the Citadel server.
+ */
+struct ServiceFunctionHook {
+       struct ServiceFunctionHook *next;
+       int tcp_port;
+       void (*h_greeting_function) (void) ;
+       void (*h_command_function) (void) ;
+       int msock;
+};
+extern struct ServiceFunctionHook *ServiceHookTable;
+
 
 
 /* Defines the relationship of a user to a particular room */