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
+#define CTDLMESSAGE_MAGIC 0x159d
+#define CM_SKIP_HOOKS 0x01 // Don't run server-side handlers
// Data structure returned by validate_recipients()
#define CTDLEXIT_UNUSER 108 // Could not determine uid to run as
#define CTDLEXIT_CRYPTO 109 // Problem initializing SSL or TLS
+// Any other exit is likely to be from an unexpected abort (segfault etc)
+// and we want to try restarting.
+
+
+
// Reasons why a session would be terminated (set CC->kill_me to these values)
enum {
KILLME_NOT,
// Event types for hooks
enum {
- EVT_STOP , // Session is terminating
- EVT_START , // Session is starting
- EVT_LOGIN , // A user is logging in
- EVT_NEWROOM , // Changing rooms
- EVT_LOGOUT , // A user is logging out
- EVT_SETPASS , // Setting or changing password
- EVT_CMD , // Called after each server command
- EVT_RWHO , // An RWHO command is being executed
- EVT_ASYNC , // Doing asynchronous messages
- EVT_STEALTH , // Entering stealth mode
- EVT_UNSTEALTH , // Exiting stealth mode
- EVT_TIMER , // Timer events are called once per minute and are not tied to any session
- EVT_HOUSE , // as needed houskeeping stuff
- EVT_SHUTDOWN , // Server is shutting down
- EVT_PURGEUSER , // Deleting a user
- EVT_NEWUSER , // Creating a user
- EVT_BEFORESAVE ,
- EVT_AFTERSAVE ,
- EVT_SMTPSCAN , // called before submitting a msg from SMTP
+ EVT_STOP, // Session is terminating
+ EVT_START, // Session is starting
+ EVT_LOGIN, // A user is logging in
+ EVT_NEWROOM, // Changing rooms
+ EVT_LOGOUT, // A user is logging out
+ EVT_SETPASS, // Setting or changing password
+ EVT_CMD, // Called after each server command
+ EVT_RWHO, // An RWHO command is being executed
+ EVT_ASYNC, // Doing asynchronous messages
+ EVT_STEALTH, // Entering stealth mode
+ EVT_UNSTEALTH, // Exiting stealth mode
+ EVT_TIMER, // Timer events are called once per minute and are not tied to any session
+ EVT_HOUSE, // as needed houskeeping stuff
+ EVT_SHUTDOWN, // Server is shutting down
+ EVT_PURGEUSER, // Deleting a user
+ EVT_NEWUSER, // Creating a user
+ EVT_BEFORESAVE,
+ EVT_AFTERSAVE,
+ EVT_SMTPSCAN, // called before submitting a msg from SMTP
EVT_AFTERUSRMBOXSAVE // 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 */
- XMSG_PRI_REMOTE, /* Other users on a Citadel network (future) */
- XMSG_PRI_FOREIGN, /* Contacts on foreign instant message hosts */
+ XMSG_PRI_LOCAL, // Other users on -this- server
+ XMSG_PRI_REMOTE, // Other users on a Citadel network
+ XMSG_PRI_FOREIGN, // Contacts on foreign instant message hosts
MAX_XMSG_PRI
};
#define V_ACCESS 4 // Access is granted to this room
-/* Supplementary data for a message on disk
- * 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
- */
+// Supplementary data for a message on disk
+// 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 */
+ 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
};
eVltMsgNum = '3'
} eMsgField;
+
+// User records.
+typedef struct ctdluser ctdluser;
+struct ctdluser { // User record
+ int version; // Citadel version which created this record
+ uid_t uid; // Associate with a unix account?
+ char password[32]; // password
+ unsigned flags; // See US_ flags below
+ long timescalled; // Total number of logins
+ long posted; // Number of messages ever submitted
+ cit_uint8_t axlevel; // Access level
+ long usernum; // User number (never recycled)
+ time_t lastcall; // Date/time of most recent login
+ int USuserpurge; // Purge time (in days) for user
+ char fullname[64]; // Display name (primary identifier)
+ long msgnum_bio; // msgnum of user's profile (bio)
+ long msgnum_pic; // msgnum of user's avatar (photo)
+ char emailaddrs[512]; // Internet email addresses
+ long msgnum_inboxrules; // msgnum of user's inbox filtering rules
+ long lastproc_inboxrules; // msgnum of last message filtered
+};
+
+
+// Room records.
+struct ctdlroom {
+ char QRname[ROOMNAMELEN]; // Name of room
+ char QRpasswd[10]; // Only valid if it's a private rm
+ long QRroomaide; // User number of room aide
+ long QRhighest; // Highest message NUMBER in room
+ time_t QRgen; // Generation number of room
+ unsigned QRflags; // See flag values below
+ char QRdirname[15]; // Directory name, if applicable
+ long msgnum_info; // msgnum of room banner (info file)
+ char QRfloor; // Which floor this room is on
+ time_t QRmtime; // Date/time of last post
+ struct ExpirePolicy QRep; // Message expiration policy
+ long QRnumber; // Globally unique room number
+ char QRorder; // Sort key for room listing order
+ unsigned QRflags2; // Additional flags
+ int QRdefaultview; // How to display the contents
+ long msgnum_pic; // msgnum of room picture or icon
+};
+
+// Private rooms are always flagged with QR_PRIVATE. If neither QR_PASSWORDED
+// or QR_GUESSNAME is set, then it is invitation-only. Passworded rooms are
+// flagged with both QR_PRIVATE and QR_PASSWORDED while guess-name rooms are
+// flagged with both QR_PRIVATE and QR_GUESSNAME. NEVER set all three flags.
+
+
#endif // SERVER_H