Removed some leftover dependencies on message fields which no longer exist
[citadel.git] / citadel / server.h
index 70770a15a931cbde9814401bcadf3b4cf969a330..e5e64539c0a7f6ca1012414b61ebc522c7c05c75 100644 (file)
@@ -1,4 +1,16 @@
-
+/* 
+ * Main declarations file for the Citadel server
+ *
+ * Copyright (c) 1987-2020 by the citadel.org team
+ *
+ * This program is open source software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
 #ifndef SERVER_H
 #define SERVER_H
@@ -23,6 +35,7 @@ struct CtdlMessage {
        char cm_anon_type;              /* Anonymous or author-visible */
        char cm_format_type;            /* Format type */
        char *cm_fields[256];           /* Data fields */
+       long cm_lengths[256];           /* size of datafields */
        unsigned int cm_flags;          /* How to handle (NOT SAVED TO DISK) */
 };
 
@@ -30,45 +43,80 @@ struct CtdlMessage {
 #define        CM_SKIP_HOOKS   0x01            /* Don't run server-side handlers */
 
 
-
-#define CTDLEXIT_SHUTDOWN      0       /* Normal shutdown; do NOT auto-restart */
+/* Data structure returned by validate_recipients() */
+typedef struct __recptypes {
+       int recptypes_magic;
+        int num_local;
+        int num_internet;
+        int num_ignet;
+       int num_room;
+        int num_error;
+       char *errormsg;
+       char *recp_local;
+       char *recp_internet;
+       char *recp_room;
+       char *recp_orgroom;
+       char *display_recp;
+       char *bounce_to;
+       char *envelope_from;
+       char *sending_room;
+} recptypes;
+
+#define RECPTYPES_MAGIC 0xfeeb
+
+#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
  * restart.
  */
-#define CTDLEXIT_CONFIG                101     /* Could not read citadel.config */
-#define CTDLEXIT_CONTROL       102     /* Could not acquire lock */
-#define CTDLEXIT_HOME          103     /* Citadel home directory not found */
-#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 CTDL_EXIT_UNSUP_AUTH   107     /* Unsupported auth mode configured */
+#define CTDLEXIT_CONFIG                101     // Could not read system configuration
+#define CTDLEXIT_CONTROL       102     // Could not acquire lock
+#define CTDLEXIT_HOME          103     // Citadel home directory not found
+#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 CTDL_EXIT_UNSUP_AUTH   107     // Unsupported auth mode configured
+#define CTDLEXIT_UNUSER                108     // Could not determine uid to run as
+#define CTDLEXIT_CRYPTO                109     // Problem initializing SSL or TLS
 
+/*
+ * Reasons why a session would be terminated (set CC->kill_me to these values)
+ */
+enum {
+       KILLME_NOT,
+       KILLME_UNKNOWN,
+       KILLME_CLIENT_LOGGED_OUT,
+       KILLME_IDLE,
+       KILLME_CLIENT_DISCONNECTED,
+       KILLME_AUTHFAILED,
+       KILLME_SERVER_SHUTTING_DOWN,
+       KILLME_MAX_SESSIONS_EXCEEDED,
+       KILLME_ADMIN_TERMINATE,
+       KILLME_SELECT_INTERRUPTED,
+       KILLME_SELECT_FAILED,
+       KILLME_WRITE_FAILED,
+       KILLME_SIMULATION_WORKER,
+       KILLME_NOLOGIN,
+       KILLME_NO_CRYPTO,
+       KILLME_READSTRING_FAILED,
+       KILLME_MALLOC_FAILED,
+       KILLME_QUOTA,
+       KILLME_READ_FAILED,
+       KILLME_ILLEGAL_MANAGESIEVE_COMMAND,
+       KILLME_SPAMMER,
+       KILLME_XML_PARSER
+};
 
 
 #define CS_STEALTH     1       /* stealth mode */
 #define CS_CHAT                2       /* chat mode */
 #define CS_POSTING     4       /* Posting */
 
-
-/*
- * This is the control record for the message base... 
- */
-struct CitControl {
-       long MMhighest;                 /* highest message number in file   */
-       unsigned MMflags;               /* Global system flags              */
-       long MMnextuser;                /* highest user number on system    */
-       long MMnextroom;                /* highest room number on system    */
-       int version;                    /* Server-hosted upgrade level      */
-       int fulltext_wordbreaker;       /* ID of wordbreaker in use         */
-       long MMfulltext;                /* highest message number indexed   */
-       int MMdbversion;                /* Version of Berkeley DB used on previous server run */
-};
-
 extern int ScheduledShutdown;
-extern struct CitControl CitControl;
+extern uid_t ctdluid;
+extern int sanity_diag_mode;
 
 struct ExpressMessage {
        struct ExpressMessage *next;
@@ -97,12 +145,9 @@ enum {
        S_SUPPMSGMAIN,
        S_CONFIG,
        S_HOUSEKEEPING,
-       S_NTTLIST,
        S_DIRECTORY,
        S_NETCONFIGS,
-       S_PUBLIC_CLIENTS,
        S_FLOORCACHE,
-       S_DEBUGMEMLEAKS,
        S_ATBF,
        S_JOURNAL_QUEUE,
        S_RPLIST,
@@ -110,24 +155,15 @@ enum {
        S_CHKPWD,
        S_LOG,
        S_NETSPOOL,
-       S_THREAD_LIST,
        S_XMPP_QUEUE,
        S_SCHEDULE_LIST,
-       S_SINGLE_USER,
-       S_LDAP,
+       S_SINGLE_USER,
+       S_LDAP,
        S_IM_LOGS,
        MAX_SEMAPHORES
 };
 
 
-/*
- * Upload types
- */
-#define UPL_FILE       0
-#define UPL_NET                1
-#define UPL_IMAGE      2
-
-
 /*
  * message transfer formats
  */
@@ -142,7 +178,7 @@ enum {
 /*
  * Message format types in the database
  */
-#define        FMT_CITADEL     0       /* Citadel vari-format (proprietary) */
+#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) */
 
@@ -163,7 +199,8 @@ enum {
        CDB_FULLTEXT,           /* full text search index        */
        CDB_EUIDINDEX,          /* locate msgs by EUID           */
        CDB_USERSBYNUMBER,      /* index of users by number      */
-       CDB_OPENID,             /* associates OpenIDs with users */
+       CDB_EXTAUTH,            /* associates OpenIDs with users */
+       CDB_CONFIG,             /* system configuration database */
        MAXCDB                  /* total number of CDB's defined */
 };
 
@@ -173,7 +210,7 @@ struct cdbdata {
 };
 
 
-/* 
+/*
  * Event types can't be enum'ed, because they must remain consistent between
  * builds (to allow for binary modules built somewhere else)
  */
@@ -201,6 +238,7 @@ struct cdbdata {
 #define EVT_BEFORESAVE 201
 #define EVT_AFTERSAVE  202
 #define EVT_SMTPSCAN   203     /* called before submitting a msg from SMTP */
+#define EVT_AFTERUSRMBOXSAVE 204 /* called afte a message was saved into a users inbox */
 /* Priority levels for paging functions (lower is better) */
 enum {
        XMSG_PRI_LOCAL,         /* Other users on -this- server */
@@ -231,15 +269,16 @@ typedef struct __visit {
  * 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.
+ * DO NOT PUT BIG DATA IN HERE ... we need this struct to be tiny for lots of quick r/w
  */
 struct MetaData {
        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 */
-       char mimetype[64];              /* if we were able to guess the mimetype for the data */ 
 };
 
+
 /* Calls to AdjRefCount() are queued and deferred, so the user doesn't
  * have to wait for various disk-intensive operations to complete synchronously.
  * This is the record format.
@@ -250,12 +289,12 @@ struct arcq {
 };
 
 
-/* 
+/*
  * Serialization routines use this struct to return a pointer and a length
  */
 struct ser_ret {
-        size_t len;
-        unsigned char *ser;
+       size_t len;
+       unsigned char *ser;
 };
 
 
@@ -267,12 +306,28 @@ struct UseTable {
        time_t ut_timestamp;
 };
 
-
-
-/* Preferred field order                                                       */
-/*               **********                    Important fields                */
-/*                         ***************     Semi-important fields           */
-/*                                        *    Message text (MUST be last)     */
-#define FORDER "IPTAFONHRDBCEWJGKLQSVXZYUM"
+typedef enum _MsgField {
+       eAuthor       = 'A',
+       eBig_message  = 'B',
+       eExclusiveID  = 'E',
+       erFc822Addr   = 'F',
+       emessageId    = 'I',
+       eJournal      = 'J',
+       eReplyTo      = 'K',
+       eListID       = 'L',
+       eMesageText   = 'M',
+       eOriginalRoom = 'O',
+       eMessagePath  = 'P',
+       eRecipient    = 'R',
+       eTimestamp    = 'T',
+       eMsgSubject   = 'U',
+       eenVelopeTo   = 'V',
+       eWeferences   = 'W',
+       eCarbonCopY   = 'Y',
+       eErrorMsg     = '0',
+       eSuppressIdx  = '1',
+       eExtnotify    = '2',
+       eVltMsgNum    = '3'
+} eMsgField;
 
 #endif /* SERVER_H */