HASH: add a way to reset an iterator
[citadel.git] / libcitadel / lib / libcitadel.h
index 296d1cee50a0de60f1a7bef41184198ce4524931..02b9c9a4755352b5e3fdedec9daac474e41fdc99 100644 (file)
@@ -48,7 +48,7 @@ typedef enum AXLevel {
        AxAideU = 6
 }eUsrAxlvl;
 
-enum RoomNetCfg {
+typedef enum __RoomNetCfg {
        subpending,
        unsubpending,
        lastsent, /* Server internal use only */
@@ -58,8 +58,9 @@ enum RoomNetCfg {
        pop3client,
        rssclient,
        participate,
+       roommailalias,
        maxRoomNetCfg
-};
+} RoomNetCfg;
 
 enum GNET_POP3_PARTS { /* pop3client splits into these columns: */
        GNET_POP3_HOST = 1,
@@ -257,8 +258,8 @@ typedef struct __fd_iobuffer {
        int SplicePipe[2];
        int PipeSize;
        long TotalSendSize;
-       long TotalSentAlready;
-       long TotalReadAlready;
+       loff_t TotalSentAlready;
+       loff_t TotalReadAlready;
        long ChunkSize;
        long ChunkSendRemain;
        StrBuf *ChunkBuffer; /* just used if we don't have sendfile */
@@ -512,14 +513,15 @@ int GetKey(HashList *Hash, char *HKey, long HKLen, void **Data);
 int GetHashKeys(HashList *Hash, char ***List);
 int dbg_PrintHash(HashList *Hash, PrintHashContent first, PrintHashContent Second);
 int PrintHash(HashList *Hash, TransitionFunc Trans, PrintHashDataFunc PrintEntry);
-HashPos *GetNewHashPos(HashList *Hash, int StepWidth);
+HashPos *GetNewHashPos(const HashList *Hash, int StepWidth);
+void RewindHashPos(const HashList *Hash, HashPos *it, int StepWidth);
 int GetHashPosFromKey(HashList *Hash, const char *HKey, long HKLen, HashPos *At);
 int DeleteEntryFromHash(HashList *Hash, HashPos *At);
 int GetHashPosCounter(HashList *Hash, HashPos *At);
 void DeleteHashPos(HashPos **DelMe);
 int NextHashPos(HashList *Hash, HashPos *At);
 int GetHashPos(HashList *Hash, HashPos *At, long *HKLen, const char **HashKey, void **Data);
-int GetNextHashPos(HashList *Hash, HashPos *At, long *HKLen, const char **HashKey, void **Data);
+int GetNextHashPos(const HashList *Hash, HashPos *At, long *HKLen, const char **HashKey, void **Data);
 int GetHashAt(HashList *Hash,long At, long *HKLen, const char **HashKey, void **Data);
 void SortByHashKey(HashList *Hash, int Order);
 void SortByHashKeyStr(HashList *Hash);
@@ -655,5 +657,116 @@ extern ConstStr RoomNetCfgStrs[maxRoomNetCfg];
 /* a nice consistent place to define how we turn a message id into a thread id hash */
 #define ThreadIdHash(Buf) abs(HashLittle(ChrPtr(Buf), StrLength(Buf)))
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CFG_SMTP_FROM_FILTERALL 0
+#define CFG_SMTP_FROM_NOFILTER 1
+#define CFG_SMTP_FROM_CORRECT 2
+#define CFG_SMTP_FROM_REJECT 3
+/*
+ * MIME types used in Citadel for configuration stuff
+ */
+#define SPOOLMIME      "application/x-citadel-delivery-list"
+#define        INTERNETCFG     "application/x-citadel-internet-config"
+#define IGNETCFG       "application/x-citadel-ignet-config"
+#define IGNETMAP       "application/x-citadel-ignet-map"
+#define FILTERLIST     "application/x-citadel-filter-list"
+#define SIEVECONFIG    "application/x-citadel-sieve-config"
+#define XMPPMORTUARY   "application/x-citadel-xmpp-mortuary"
+#define INTERNETCFG     "application/x-citadel-internet-config"
+
+#define FILE_MAILALIAS       "__MAIL_ALIAS__"
+
+#define LISTING_FOLLOWS                100
+#define CIT_OK                 200
+#define MORE_DATA              300
+#define SEND_LISTING           400
+#define ERROR                  500
+#define BINARY_FOLLOWS         600
+#define SEND_BINARY            700
+#define START_CHAT_MODE                800
+
+#define INTERNAL_ERROR         10
+#define TOO_BIG                        11
+#define ILLEGAL_VALUE          12
+#define NOT_LOGGED_IN          20
+#define CMD_NOT_SUPPORTED      30
+#define SERVER_SHUTTING_DOWN   31
+#define PASSWORD_REQUIRED      40
+#define ALREADY_LOGGED_IN      41
+#define USERNAME_REQUIRED      42
+#define HIGHER_ACCESS_REQUIRED 50
+#define MAX_SESSIONS_EXCEEDED  51
+#define RESOURCE_BUSY          52
+#define RESOURCE_NOT_OPEN      53
+#define NOT_HERE               60
+#define INVALID_FLOOR_OPERATION        61
+#define NO_SUCH_USER           70
+#define FILE_NOT_FOUND         71
+#define ROOM_NOT_FOUND         72
+#define NO_SUCH_SYSTEM         73
+#define ALREADY_EXISTS         74
+#define MESSAGE_NOT_FOUND      75
+
+#define ASYNC_MSG              900
+#define ASYNC_GEXP             02
+
+#define QR_PERMANENT   1               /* Room does not purge              */
+#define QR_INUSE       2               /* Set if in use, clear if avail    */
+#define QR_PRIVATE     4               /* Set for any type of private room */
+#define QR_PASSWORDED  8               /* Set if there's a password too    */
+#define QR_GUESSNAME   16              /* Set if it's a guessname room     */
+#define QR_DIRECTORY   32              /* Directory room                   */
+#define QR_UPLOAD      64              /* Allowed to upload                */
+#define QR_DOWNLOAD    128             /* Allowed to download              */
+#define QR_VISDIR      256             /* Visible directory                */
+#define QR_ANONONLY    512             /* Anonymous-Only room              */
+#define QR_ANONOPT     1024            /* Anonymous-Option room            */
+#define QR_NETWORK     2048            /* Shared network room              */
+#define QR_PREFONLY    4096            /* Preferred status needed to enter */
+#define QR_READONLY    8192            /* Admin status required to post     */
+#define QR_MAILBOX     16384           /* Set if this is a private mailbox */
+
+#define QR2_SYSTEM     1               /* System room; hide by default     */
+#define QR2_SELFLIST   2               /* Self-service mailing list mgmt   */
+#define QR2_COLLABDEL  4               /* Anyone who can post can delete   */
+#define QR2_SUBJECTREQ 8               /* Subject strongly recommended */
+#define QR2_SMTP_PUBLIC        16              /* Listservice Subscribers may post */
+#define QR2_MODERATED  32              /* Listservice aide has to permit posts  */
+
+#define US_NEEDVALID   1               /* User needs to be validated       */
+#define US_EXTEDIT     2               /* Always use external editor       */
+#define US_PERM                4               /* Permanent user                   */
+#define US_LASTOLD     16              /* Print last old message with new  */
+#define US_EXPERT      32              /* Experienced user                 */
+#define US_UNLISTED    64              /* Unlisted userlog entry           */
+#define US_NOPROMPT    128             /* Don't prompt after each message  */
+#define US_PROMPTCTL   256             /* <N>ext & <S>top work at prompt   */
+#define US_DISAPPEAR   512             /* Use "disappearing msg prompts"   */
+#define US_REGIS       1024            /* Registered user                  */
+#define US_PAGINATOR   2048            /* Pause after each screen of text  */
+#define US_INTERNET    4096            /* Internet mail privileges         */
+#define US_FLOORS      8192            /* User wants to see floors         */
+#define US_COLOR       16384           /* User wants ANSI color support    */
+#define US_USER_SET    (US_LASTOLD | US_EXPERT | US_UNLISTED | \
+                       US_NOPROMPT | US_DISAPPEAR | US_PAGINATOR | \
+                       US_FLOORS | US_COLOR | US_PROMPTCTL | US_EXTEDIT)
+
+#define UA_KNOWN                2      /* Room appears in a 'known rooms' list */
+#define UA_GOTOALLOWED          4      /* User may goto this room if specified by exact name */
+#define UA_HASNEWMSGS           8      /* Unread messages exist in this room */
+#define UA_ZAPPED               16     /* User has forgotten (zapped) this room */
+#define UA_POSTALLOWED         32      /* User may post top-level messages here */
+#define UA_ADMINALLOWED                64      /* Admin or Room Admin rights exist here */
+#define UA_DELETEALLOWED       128     /* User is allowed to delete messages from this room */
+#define UA_REPLYALLOWED                256     /* User is allowed to reply to existing messages here */
+/* runtime flag extracted from goto reply; not db persistant, should be moved if new flags added */
+#define UA_ISTRASH              512    /* Only available in room view... */
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif // LIBCITADEL_H