/* citadel.h
* main Citadel/UX header file
- * see copyright.doc for copyright information
+ * see copyright.txt for copyright information
+ * $Id$
*/
/* system customizations are in sysconfig.h */
#include "sysdep.h"
#include "sysconfig.h"
#include "ipcdef.h"
-#define CITADEL "Citadel/UX DR19980818"
-#define REV_LEVEL 503
+#define CITADEL "Citadel/UX 5.70"
+#define REV_LEVEL 560
#define SERVER_TYPE 0 /* zero for stock Citadel/UX; other developers please
obtain SERVER_TYPE codes for your implementations */
*/
typedef unsigned char CIT_UBYTE;
+#define ROOMNAMELEN 128
+
+/*
+ * Message expiration policy stuff
+ */
+struct ExpirePolicy {
+ int expire_mode;
+ int expire_value;
+ };
+
+#define EXPIRE_NEXTLEVEL 0 /* Inherit expiration policy */
+#define EXPIRE_MANUAL 1 /* Don't expire messages at all */
+#define EXPIRE_NUMMSGS 2 /* Keep only latest n messages */
+#define EXPIRE_AGE 3 /* Expire messages after n days */
+
+
+/*
+ * Global system configuration
+ */
struct config {
- char c_nodename[16]; /* UUCP and Citadel nodename */
+ char c_nodename[16]; /* Unqualified "short" nodename */
char c_fqdn[64]; /* Fully Qualified Domain Name */
char c_humannode[21]; /* Long name of system */
char c_phonenum[16]; /* Dialup number of system */
char c_initax; /* initial access level */
char c_regiscall; /* call number to register on */
char c_twitdetect; /* twit detect flag */
- char c_twitroom[20]; /* twit detect msg move to room */
- int c_defent; /* command generated by <E> key */
+ char c_twitroom[ROOMNAMELEN]; /* twit detect msg move to room */
char c_moreprompt[80]; /* paginator prompt */
char c_restrict; /* restrict Internet mail flag */
long c_msgbase; /* size of message base */
char c_net_password[20]; /* system net password */
int c_port_number; /* TCP port to run the server on */
int c_ipgm_secret; /* Internal program authentication */
- };
+ struct ExpirePolicy c_ep; /* System default msg expire policy */
+ int c_userpurge; /* System default user purge (days) */
+ int c_roompurge; /* System default room purge (days) */
+ char c_logpages[ROOMNAMELEN]; /* Room to log pages to (or not) */
+ char c_createax; /* Axlevel required to create rooms */
+ long c_maxmsglen; /* Maximum message length */
+ int c_min_workers; /* Lower limit on number of threads */
+ int c_max_workers; /* Upper limit on number of threads */
+ int c_pop3_port; /* POP3 listener port (usually 110) */
+ int c_smtp_port; /* SMTP listener port (usually 25) */
+};
#define NODENAME config.c_nodename
#define FQDN config.c_fqdn
#define TWITROOM config.c_twitroom
#define RESTRICT_INTERNET config.c_restrict
-
-/* Defines the relationship of a user to a particular room */
-struct visit {
- char v_roomname[20];
- long v_generation;
- long v_lastseen;
- unsigned int v_flags;
- };
-
-#define V_FORGET 1 /* User has zapped this room */
-#define V_LOCKOUT 2 /* User is locked out of this room */
-#define V_ACCESS 4 /* Access is granted to this room */
-
-#define UA_INUSE 1
-#define UA_KNOWN 2
-#define UA_GOTOALLOWED 4
-#define UA_HASNEWMSGS 8
-#define UA_ZAPPED 16
-
/* Defines the actual user record */
+
struct usersupp { /* User record */
- int USuid; /* userid (==BBSUID for bbs only) */
- char password[20]; /* password (for BBS-only users) */
- long lastseen[MAXROOMS]; /* deprecated */
- long generation[MAXROOMS]; /* deprecated */
- long forget[MAXROOMS]; /* deprecated */
+ int version; /* Cit vers. which created this rec */
+ uid_t uid; /* Associate with a unix account? */
+ char password[32]; /* password (for BBS-only users) */
unsigned flags; /* See US_ flags below */
- int timescalled; /* Total number of logins */
- int posted; /* Number of messages posted (ever) */
- char fullname[26]; /* Name for Citadel messages & mail */
- char axlevel; /* Access level */
- CIT_UBYTE USscreenwidth; /* Screen width (for textmode users)*/
- CIT_UBYTE USscreenheight; /* Screen height(for textmode users)*/
+ long timescalled; /* Total number of logins */
+ long posted; /* Number of messages posted (ever) */
+ CIT_UBYTE axlevel; /* Access level */
long usernum; /* User number (never recycled) */
time_t lastcall; /* Last time the user called */
- char USname[30]; /* Real name (i.e. not a handle) */
- char USaddr[25]; /* Street address */
- char UScity[15]; /* Municipality */
- char USstate[3]; /* State or province */
- char USzip[10]; /* ZIP code */
- char USphone[11]; /* Voice telephone number */
- char USemail[32]; /* E-mail address (elsewhere) */
+ int USuserpurge; /* Purge time (in days) for user */
+ char fullname[64]; /* Name for Citadel messages & mail */
+ CIT_UBYTE USscreenwidth; /* Screen width (for textmode users)*/
+ CIT_UBYTE USscreenheight; /* Screen height(for textmode users)*/
};
-/* this is a mask for all of the bits the user is allowed to change */
-#define US_USER_SET (US_LASTOLD | US_EXPERT | US_UNLISTED | \
- US_NOPROMPT | US_DISAPPEAR | US_PAGINATOR | US_FLOORS)
-
/****************************************************************************
* This is the control record for the message base...
*/
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 */
};
/* Bits which may appear in CitControl.MMflags. Note that these don't
* Room records
*/
struct quickroom {
- char QRname[20]; /* Max. len is 19, plus null term */
+ 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 */
- long QRgen; /* Generation number of room */
+ time_t QRgen; /* Generation number of room */
unsigned QRflags; /* See flag values below */
char QRdirname[15]; /* Directory name, if applicable */
long QRinfo; /* Info file update relative to msgs*/
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 */
};
-/* 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
+/* 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. DO NOT set all three flags.
- *
- ****************************************************************************/
+ * flagged with both QR_PRIVATE and QR_GUESSNAME. NEVER set all three flags.
+ */
/*
* Events which might show up in the Citadel Log
#define MES_ANON 66 /* "****" header */
#define MES_AN2 67 /* "Anonymous" header */
-#define M_ERROR (-1) /* Can't send message due to bad address */
-#define M_LOCAL 0 /* Local message, do no network processing */
-#define M_INTERNET 1 /* Convert msg and send as Internet mail */
-#define M_BINARY 2 /* Process recipient and send via C/UX net */
+#define MES_ERROR (-1) /* Can't send message due to bad address */
+#define MES_LOCAL 0 /* Local message, do no network processing */
+#define MES_INTERNET 1 /* Convert msg and send as Internet mail */
+#define MES_BINARY 2 /* Process recipient and send via Cit net */
/****************************************************************************/
unsigned short f_flags; /* flags */
char f_name[256]; /* name of floor */
int f_ref_count; /* reference count */
+ struct ExpirePolicy f_ep; /* default expiration policy */
};
#define F_INUSE 1 /* floor is in use */
#define SB_YES_INTR 1 /* set to bbs mode, i/q enabled */
#define SB_SAVE 2 /* save settings */
#define SB_RESTORE 3 /* restore settings */
+#define SB_LAST 4 /* redo the last command sent */
#define NEXT_KEY 15
#define STOP_KEY 3
#define GF_SKIP 1 /* <;S>kip floor mode */
#define GF_ZAP 2 /* <;Z>ap floor mode */
-/* message transfer formats */
-#define MT_CITADEL 0 /* Citadel proprietary */
-#define MT_RFC822 2 /* RFC822 */
-#define MT_RAW 3 /* IGnet raw format */
+/*
+ * MIME types used in Citadel for configuration stuff
+ */
+#define SPOOLMIME "application/x-citadel-delivery-list"
+#define INTERNETCFG "application/x-citadel-internet-config"
+
+/*
+ * This structure is used to hold all of the fields of a message
+ * during conversion, processing, or whatever.
+ */
+struct minfo {
+ char A[512];
+ char B[512];
+ char C[512];
+ char D[512];
+ char E[512];
+ char G[512];
+ char H[512];
+ long I;
+ char N[512];
+ char O[512];
+ char P[512];
+ char R[512];
+ char S[512];
+ long T;
+ char U[512];
+ char Z[512];
+ char nexthop[512];
+ };
+
+#define TRACE lprintf(9, "Checkpoint: %s, %d\n", __FILE__, __LINE__)