* add a way to pass the workbuffers into the RFC-822 decoder, so we don't need to...
[citadel.git] / libcitadel / lib / libcitadel.h
index 92ab07f3ee096d78c23ed59b9e5a8c90867c395d..c52fa6e2e0369689dfc2fafd657fc750737a111f 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * $Id$
- *
+ * Header file for libcitadel
  */
 
 
@@ -15,7 +14,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER      780
+#define LIBCITADEL_VERSION_NUMBER      789
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -68,6 +67,18 @@ enum RoomNetCfg {
        maxRoomNetCfg
 };
 
+enum GNET_POP3_PARTS { /* pop3client splits into these columns: */
+       GNET_POP3_HOST = 1,
+       GNET_POP3_USER = 2,
+       GNET_POP3_PASS = 4,
+       GNET_POP3_DONT_DELETE_REMOTE = 4,
+       GNET_POP3_INTERVAL = 5
+};
+
+enum GNET_PUSH_SHARE { /* ignet_push_share splits into these columns: */
+       GNET_IGNET_NODE = 1,
+       GNET_IGNET_ROOM = 2
+};
 
 typedef enum __GPEXWhichPolicy {
        roompolicy,
@@ -81,16 +92,20 @@ typedef enum __GPEXWhichPolicy {
  * View definitions.
  * Note that not all views are implemented in all clients.
  */
-#define        VIEW_BBS                0       /* Bulletin board view */
-#define VIEW_MAILBOX           1       /* Mailbox summary */
-#define VIEW_ADDRESSBOOK       2       /* Address book view */
-#define VIEW_CALENDAR          3       /* Calendar view */
-#define VIEW_TASKS             4       /* Tasks view */
-#define VIEW_NOTES             5       /* Notes view */
-#define        VIEW_WIKI               6       /* Wiki view */
-#define VIEW_CALBRIEF          7       /* Brief Calendar view */
-#define VIEW_JOURNAL           8       /* Journal view */
-#define VIEW_BLOG              9       /* Blog view (not yet implemented) */
+typedef enum _room_views {
+       VIEW_BBS                = 0,    /* Bulletin board view */
+       VIEW_MAILBOX            = 1,    /* Mailbox summary */
+       VIEW_ADDRESSBOOK        = 2,    /* Address book view */
+       VIEW_CALENDAR           = 3,    /* Calendar view */
+       VIEW_TASKS              = 4,    /* Tasks view */
+       VIEW_NOTES              = 5,    /* Notes view */
+       VIEW_WIKI               = 6,    /* Wiki view */
+       VIEW_CALBRIEF           = 7,    /* Brief Calendar view */
+       VIEW_JOURNAL            = 8,    /* Journal view */
+       VIEW_DRAFTS             = 9,    /* Drafts view */
+       VIEW_BLOG               = 10,   /* Blog view */
+       VIEW_MAX
+} ROOM_VIEWS;
 
 
 #ifndef IsEmptyStr
@@ -175,6 +190,7 @@ StrBuf* NewStrBufDup(const StrBuf *CopyMe);
 StrBuf* NewStrBufPlain(const char* ptr, int nChars);
 long StrBufShrinkToFit(StrBuf *Buf, int Force);
 void ReAdjustEmptyBuf(StrBuf *Buf, long ThreshHold, long NewSize);
+void NewStrBufDupAppendFlush(StrBuf **CreateRelpaceMe, StrBuf *CopyFlushMe, const char *NoMe, int KeepOriginal);
 
 int StrBufPlain(StrBuf *Buf, const char* ptr, int nChars);
 StrBuf* _NewConstStrBuf(const char* StringConstant, size_t SizeOfStrConstant);
@@ -249,6 +265,7 @@ void StrBufCutLeft(StrBuf *Buf, int nChars);
 void StrBufCutRight(StrBuf *Buf, int nChars);
 void StrBufCutAt(StrBuf *Buf, int AfternChars, const char *At);
 void StrBufTrim(StrBuf *Buf);
+void StrBufSpaceToBlank(StrBuf *Buf);
 void StrBufStripAllBut(StrBuf *Buf, char leftboundary, char rightboundary);
 void StrBufUpCase(StrBuf *Buf);
 void StrBufLowerCase(StrBuf *Buf);
@@ -262,7 +279,15 @@ void StrBufReplaceChars(StrBuf *buf, char search, char replace);
 int CompressBuffer(StrBuf *Buf);
 void StrBufConvert(StrBuf *ConvertBuf, StrBuf *TmpBuf, void *pic);
 void ctdl_iconv_open(const char *tocode, const char *fromcode, void *pic);
+void StrBuf_RFC822_2_Utf8(StrBuf *Target, 
+                         const StrBuf *DecodeMe, 
+                         const StrBuf* DefaultCharset, 
+                         StrBuf *FoundCharset, 
+                         StrBuf *ConvertBuf, 
+                         StrBuf *ConvertBuf2);
+/* deprecated old version: */
 void StrBuf_RFC822_to_Utf8(StrBuf *Target, const StrBuf *DecodeMe, const StrBuf* DefaultCharset, StrBuf *FoundCharset);
+
 int StrBufDecodeBase64(StrBuf *Buf);
 int StrBufDecodeHex(StrBuf *Buf);
 int StrBufRFC2047encode(StrBuf **target, const StrBuf *source);
@@ -319,8 +344,10 @@ int haschar(const char *st, int ch);
 void remove_token(char *source, int parmnum, char separator);
 void fmt_date(char *buf, size_t n, time_t thetime, int seconds);
 int is_msg_in_sequence_set(const char *mset, long msgnum);
-const char *memreadline(const char *start, char *buf, int maxlen);
-const char *memreadlinelen(const char *start, char *buf, int maxlen, int *retlen);
+char *memreadline(char *start, char *buf, int maxlen);
+char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
+const char *cmemreadline(const char *start, char *buf, int maxlen);
+const char *cmemreadlinelen(const char *start, char *buf, int maxlen, int *retlen);
 #define IsEmptyStr(a) ((a)[0] == '\0')
 #define num_parms(source)              num_tokens(source,(char)'|')
 int stripout(char *str, char leftboundary, char rightboundary);
@@ -330,8 +357,10 @@ void urlesc(char *outbuf, size_t oblen, char *strbuf);
 char *CtdlTempFileName(char *prefix1, int prefix2);
 FILE *CtdlTempFile(void);
 void generate_uuid(char *buf);
-const char *bmstrcasestr(const char *text, const char *pattern);
-const char *bmstrcasestr_len(const char *text, size_t textlen, const char *pattern, size_t patlen);
+char *bmstrcasestr(char *text, const char *pattern);
+char *bmstrcasestr_len(char *text, size_t textlen, const char *pattern, size_t patlen);
+const char *cbmstrcasestr(const char *text, const char *pattern);
+const char *cbmstrcasestr_len(const char *text, size_t textlen, const char *pattern, size_t patlen);
 void CtdlMakeTempFileName(char *name, int len);
 char *rfc2047encode(char *line, long length);
 int is_msg_in_mset(const char *mset, long msgnum);
@@ -385,12 +414,14 @@ typedef struct HashPos HashPos;
 typedef void (*DeleteHashDataFunc)(void * Data);
 typedef const char *(*PrintHashContent)(void * Data);
 typedef int (*CompareFunc)(const void* Item1, const void*Item2);
-typedef int (*HashFunc)(const char *Str, long Len);
+typedef long (*HashFunc)(const char *Str, long Len);
 typedef void (*TransitionFunc) (void *Item1, void *Item2, int Odd);
 typedef void (*PrintHashDataFunc) (const char *Key, void *Item, int Odd);
 
-int Flathash(const char *str, long len);
+long Flathash(const char *str, long len);
+long lFlathash(const char *str, long len);
 #define IKEY(a) (const char*) &a, sizeof(a)
+#define LKEY(a) (const char*) &a, sizeof(a)
 
 HashList *NewHash(int Uniq, HashFunc F);
 void DeleteHash(HashList **Hash);
@@ -418,6 +449,10 @@ void SortByPayload(HashList *Hash, CompareFunc SortBy);
 void reference_free_handler(void *ptr);
 int HashLittle(const void *key, size_t length);
 
+typedef struct MSet MSet;
+int ParseMSet(MSet **MsetList, StrBuf *MSetStr);
+int IsInMSetList(MSet *MSetList, long MsgNo);
+void DeleteMSet(MSet **FreeMe);
 
 void convert_spaces_to_underscores(char *str);
 int CheckEncode(const char *pch, long len, const char *pche);