/* $Id$ */
-/* 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 */
-
-/*
- * New format for a message in memory
- */
#ifndef SERVER_H
#define SERVER_H
#ifdef __GNUC__
-#define INLINE inline
+#define INLINE __inline__
#else
#define INLINE
#endif
#include <openssl/ssl.h>
#endif
-#define CTDLMESSAGE_MAGIC 0x159d
+/*
+ * New format for a message in memory
+ */
struct CtdlMessage {
- int cm_magic; /* Self-check */
+ int cm_magic; /* Self-check (NOT SAVED TO DISK) */
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 CTDLMESSAGE_MAGIC 0x159d
#define CM_SKIP_HOOKS 0x01 /* Don't run server-side handlers */
};
/*
- * Static user data symbol types
+ * Static user data symbol types. Server extensions can ask for dynamic
+ * extensions to per-session data, but the symbol ID has to be listed here.
*/
enum {
SYM_DESIRED_SECTION, /* Used by the MIME parser */
SYM_MA_INFO, /* Handles multipart/alternative */
SYM_REPL, /* Used for replication checking */
+ SYM_CIT_ICAL, /* Used by the calendar service */
+ SYM_IMAP, /* Used by the IMAP service */
+ SYM_POP3, /* Used by the POP3 service */
+ SYM_SMTP, /* Used by the SMTP service */
+ SYM_SMTP_RECPS,
+ SYM_SMTP_ROOMS,
+ SYM_VCARD, /* vCard handling requires this */
SYM_MAX
};
struct CitContext {
struct CitContext *next; /* Link to next session in the list */
- struct usersupp usersupp; /* Database record buffers */
- struct quickroom quickroom;
+ 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 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[SIZ];/* Return address of outbound Internet mail */
int redirect_ssl;
#endif
+ int buffering;
+ char *output_buffer; /* hold output for one big dump */
+ int buffer_len;
+
/* A linked list of all express messages sent to us. */
struct ExpressMessage *FirstExpressMessage;
int disable_exp; /* Set to 1 to disable incoming pages */
/* Values for CitContext.state */
enum {
CON_IDLE, /* This context is doing nothing */
- CON_EXECUTING /* This context is bound to a thread */
+ CON_READY, /* This context is ready-to-run */
+ CON_EXECUTING, /* This context is bound to a thread */
};
* Various things we need to lock and unlock
*/
enum {
- S_USERSUPP,
- S_QUICKROOM,
+ S_USERS,
+ S_ROOMS,
S_SESSION_TABLE,
S_FLOORTAB,
S_CHATQUEUE,
S_NTTLIST,
S_DIRECTORY,
S_NETCONFIGS,
+ S_PUBLIC_CLIENTS,
+ S_LDAP,
+ S_FLOORCACHE,
MAX_SEMAPHORES
};
*/
enum {
CDB_MSGMAIN, /* message base */
- CDB_USERSUPP, /* user file */
- CDB_QUICKROOM, /* room index */
+ CDB_USERS, /* user file */
+ CDB_ROOMS, /* room index */
CDB_FLOORTAB, /* floor index */
CDB_MSGLISTS, /* room message lists */
CDB_VISIT, /* user/room relationships */
*/
struct UserFunctionHook {
struct UserFunctionHook *next;
- void (*h_function_pointer) (char *username, long usernum);
+ void (*h_function_pointer) (struct ctdluser *usbuf);
int eventtype;
};
extern struct UserFunctionHook *UserHookTable;
#define EVT_PURGEUSER 100 /* Deleting a user */
-#define EVT_OUTPUTMSG 101 /* Outputting a message */
+#define EVT_NEWUSER 102 /* Creating a user */
/*
* MessageFunctionHook extensions are used for hooks which implement handlers
long v_lastseen;
unsigned int v_flags;
char v_seen[SIZ];
+ char v_answered[SIZ];
int v_view;
};
#define V_LOCKOUT 2 /* User is locked out of this room */
#define V_ACCESS 4 /* Access is granted to this room */
-#define UA_KNOWN 2
-#define UA_GOTOALLOWED 4
-#define UA_HASNEWMSGS 8
-#define UA_ZAPPED 16
-
/* Supplementary data for a message on disk
* (These are kept separately from the message itself because they are
};
-
-/* Built-in debuggable stuff for checking for memory leaks */
-#ifdef DEBUG_MEMORY_LEAKS
-
-#define mallok(howbig) tracked_malloc(howbig, __FILE__, __LINE__)
-#define phree(whichptr) tracked_free(whichptr)
-#define reallok(whichptr,howbig) tracked_realloc(whichptr,howbig)
-#define strdoop(orig) tracked_strdup(orig, __FILE__, __LINE__)
-
-void *tracked_malloc(size_t, char *, int);
-void tracked_free(void *);
-void *tracked_realloc(void *, size_t);
-void dump_tracked(void);
-char *tracked_strdup(const char *, char *, int);
-
-struct TheHeap {
- struct TheHeap *next;
- char h_file[32];
- int h_line;
- void *h_ptr;
-};
-
-extern struct TheHeap *heap;
-
-#else
-
-#define mallok(howbig) malloc(howbig)
-#define phree(whichptr) free(whichptr)
-#define reallok(whichptr,howbig) realloc(whichptr,howbig)
-#define strdoop(orig) strdup(orig)
-
-
-#endif
-
-
/*
* Serialization routines use this struct to return a pointer and a length
*/