/* $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
+ */
+#define CTDLMESSAGE_MAGIC 0x159d
+struct CtdlMessage {
+ int cm_magic; /* Self-check */
+ char cm_anon_type; /* Anonymous or author-visible */
+ char cm_format_type; /* Format type */
+ char *cm_fields[256]; /* Data fields */
+ unsigned int cm_flags; /* How to handle (NOT SAVED TO DISK) */
+};
+
+#define CM_SKIP_HOOKS 0x01 /* Don't run server-side handlers */
-struct CtdlMessage;
/*
* Generic per-session variable or data structure storage
enum {
SYM_DESIRED_SECTION, /* Used by the MIME parser */
SYM_MA_INFO, /* Handles multipart/alternative */
+ SYM_REPL, /* Used for replication checking */
SYM_MAX
};
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 */
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 */
S_DATABASE,
S_NETDB,
S_SUPPMSGMAIN,
+ S_I_WANNA_SELECT,
+ S_CONFIG,
MAX_SEMAPHORES
};
MT_DOWNLOAD /* Download a component */
};
+/*
+ * Message format types in the database
+ */
+#define FMT_CITADEL 0 /* Citadel vari-format (proprietary) */
+#define FMT_FIXED 1 /* Fixed format (proprietary) */
+#define FMT_RFC822 4 /* Standard (headers are in M field) */
+
/*
* Citadel DataBases (define one for each cdb we need to open)
+/*
+ * 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 */
};
-/*
- * New format for a message in memory
- */
-#define CTDLMESSAGE_MAGIC 0x159d
-struct CtdlMessage {
- int cm_magic; /* Self-check */
- char cm_anon_type; /* Anonymous or author-visible */
- char cm_format_type; /* Format type */
- char *cm_fields[256]; /* Data fields */
-};
-
/* Preferred field order */
/* ********* Important fields */
/* **************** Semi-important fields */