#include "citadel.h"
#ifdef HAVE_OPENSSL
+#define OPENSSL_NO_KRB5 /* work around redhat b0rken ssl headers */
#include <openssl/ssl.h>
#endif
#define CM_SKIP_HOOKS 0x01 /* Don't run server-side handlers */
-/*
- * Generic per-session variable or data structure storage
- */
-struct CtdlSessData {
- struct CtdlSessData *next;
- unsigned long sym_id;
- void *sym_data;
-};
-
-/*
- * 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
-};
-
-
/*
* Here's the big one... the Citadel context structure.
*
* modification in a linked list.
*/
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 */
char cs_inet_email[SIZ];/* 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_path[PATH_MAX];
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;
- int redirect_sock;
+ FILE *redirect_fp; /* a file instead (will go away) */
+ 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;
char preferred_formats[SIZ]; /* Preferred MIME formats */
/* Dynamically allocated session data */
- struct CtdlSessData *FirstSessData;
+ struct citimap *IMAP;
+ struct citpop3 *POP3;
+ struct citsmtp *SMTP;
+ char *SMTP_RECPS;
+ char *SMTP_ROOMS;
+ struct cit_ical *CIT_ICAL; /* calendaring data */
+ struct ma_info *ma; /* multipart/alternative data */
};
typedef struct CitContext t_context;
/* Supplementary data for a message on disk
- * (These are kept separately from the message itself because they are
- * fields whose values may change at some point after the message is saved.)
+ * These are kept separate from the message itself for one of two reasons:
+ * 1. Either their values may change at some point after initial save, or
+ * 2. They are merely caches of data which exist somewhere else, for speed.
*/
struct MetaData {
- long meta_msgnum; /* Message number in *local* message base */
- int meta_refcount; /* Number of rooms which point to this msg */
- char meta_content_type[64];
- /* more stuff will be added to this record in the future */
+ long meta_msgnum; /* Message number in *local* message base */
+ int meta_refcount; /* Number of rooms pointing to this msg */
+ char meta_content_type[64]; /* Cached MIME content-type */
+ long meta_rfc822_length; /* Cache of RFC822-translated msg length */
};