Tag stable-78x for 7.86 release
[citadel.git] / libcitadel / lib / libcitadel.h
index d89995833bd97cdae305f68c9d25a5a63e19dad2..dc921fef3659384bbe38dda9b4b1899751cf1c48 100644 (file)
@@ -1,8 +1,3 @@
-/*
- * $Id$
- *
- */
-
 
 /* protect against double includes */
 #ifndef LIBCITADEL_H
@@ -15,7 +10,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER      780
+#define LIBCITADEL_VERSION_NUMBER      786
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -118,46 +113,25 @@ void ShutDownLibCitadel(void);
 
 void extract_key(char *target, char *source, long sourcelen, char *key, long keylen, char KeyEnd);
 
+
+typedef void (*MimeParserCallBackType)(char *cbname,
+                                      char *cbfilename,
+                                      char *cbpartnum,
+                                      char *cbdisp,
+                                      void *cbcontent,
+                                      char *cbtype,
+                                      char *cbcharset,
+                                      size_t cblength,
+                                      char *cbencoding,
+                                      char *cbid,
+                                      void *cbuserdata);
+
 void mime_parser(char *content_start, char *content_end,
-               void (*CallBack)
-                       (char *cbname,
-                       char *cbfilename,
-                       char *cbpartnum,
-                       char *cbdisp,
-                       void *cbcontent,
-                       char *cbtype,
-                       char *cbcharset,
-                       size_t cblength,
-                       char *cbencoding,
-                       char *cbid,
-                       void *cbuserdata),
-               void (*PreMultiPartCallBack)
-                       (char *cbname,
-                       char *cbfilename,
-                       char *cbpartnum,
-                       char *cbdisp,
-                       void *cbcontent,
-                       char *cbtype,
-                       char *cbcharset,
-                       size_t cblength,
-                       char *cbencoding,
-                       char *cbid,
-                       void *cbuserdata),
-               void (*PostMultiPartCallBack)
-                       (char *cbname,
-                       char *cbfilename,
-                       char *cbpartnum,
-                       char *cbdisp,
-                       void *cbcontent,
-                       char *cbtype,
-                       char *cbcharset,
-                       size_t cblength,
-                       char *cbencoding,
-                       char *cbid,
-                       void *cbuserdata),
-               void *userdata,
-               int dont_decode
-);
+                MimeParserCallBackType CallBack,
+                MimeParserCallBackType PreMultiPartCallBack,
+                MimeParserCallBackType PostMultiPartCallBack,
+                void *userdata,
+                int dont_decode);
 
 
 
@@ -168,86 +142,18 @@ void mime_decode(char *partnum,
                 char *disposition,
                 char *id,
                 char *name, char *filename,
-                void (*CallBack)
-                 (char *cbname,
-                  char *cbfilename,
-                  char *cbpartnum,
-                  char *cbdisp,
-                  void *cbcontent,
-                  char *cbtype,
-                  char *cbcharset,
-                  size_t cblength,
-                  char *cbencoding,
-                  char *cbid,
-                  void *cbuserdata),
-                void (*PreMultiPartCallBack)
-                 (char *cbname,
-                  char *cbfilename,
-                  char *cbpartnum,
-                  char *cbdisp,
-                  void *cbcontent,
-                  char *cbtype,
-                  char *cbcharset,
-                  size_t cblength,
-                  char *cbencoding,
-                  char *cbid,
-                  void *cbuserdata),
-                void (*PostMultiPartCallBack)
-                 (char *cbname,
-                  char *cbfilename,
-                  char *cbpartnum,
-                  char *cbdisp,
-                  void *cbcontent,
-                  char *cbtype,
-                  char *cbcharset,
-                  size_t cblength,
-                  char *cbencoding,
-                  char *cbid,
-                  void *cbuserdata),
-                 void *userdata,
-                 int dont_decode
-);
+                MimeParserCallBackType CallBack,
+                MimeParserCallBackType PreMultiPartCallBack,
+                MimeParserCallBackType PostMultiPartCallBack,
+                void *userdata,
+                int dont_decode);
 void the_mime_parser(char *partnum,
                     char *content_start, char *content_end,
-                    void (*CallBack)
-                     (char *cbname,
-                      char *cbfilename,
-                      char *cbpartnum,
-                      char *cbdisp,
-                      void *cbcontent,
-                      char *cbtype,
-                      char *cbcharset,
-                      size_t cblength,
-                      char *cbencoding,
-                      char *cbid,
-                      void *cbuserdata),
-                    void (*PreMultiPartCallBack)
-                     (char *cbname,
-                      char *cbfilename,
-                      char *cbpartnum,
-                      char *cbdisp,
-                      void *cbcontent,
-                      char *cbtype,
-                      char *cbcharset,
-                      size_t cblength,
-                      char *cbencoding,
-                      char *cbid,
-                      void *cbuserdata),
-                    void (*PostMultiPartCallBack)
-                     (char *cbname,
-                      char *cbfilename,
-                      char *cbpartnum,
-                      char *cbdisp,
-                      void *cbcontent,
-                      char *cbtype,
-                      char *cbcharset,
-                      size_t cblength,
-                      char *cbencoding,
-                      char *cbid,
-                      void *cbuserdata),
-                     void *userdata,
-                     int dont_decode
-);
+                    MimeParserCallBackType CallBack,
+                    MimeParserCallBackType PreMultiPartCallBack,
+                    MimeParserCallBackType PostMultiPartCallBack,
+                    void *userdata,
+                    int dont_decode);
 
 typedef struct StrBuf StrBuf;
 
@@ -355,6 +261,10 @@ void StrBuf_RFC822_to_Utf8(StrBuf *Target, const StrBuf *DecodeMe, const StrBuf*
 int StrBufDecodeBase64(StrBuf *Buf);
 int StrBufDecodeHex(StrBuf *Buf);
 int StrBufRFC2047encode(StrBuf **target, const StrBuf *source);
+StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp, 
+                                          StrBuf *UserName, 
+                                          StrBuf *EmailAddress,
+                                          StrBuf *EncBuf);
 int StrBufSanitizeAscii(StrBuf *Buf, const char Mute);
 #define LB                     (1)             /* Internal escape chars */
 #define RB                     (2)
@@ -404,8 +314,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);
+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);
@@ -415,8 +327,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);
@@ -491,6 +405,8 @@ 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 GetHashAt(HashList *Hash,long At, long *HKLen, const char **HashKey, void **Data);
 void SortByHashKey(HashList *Hash, int Order);
@@ -498,12 +414,12 @@ void SortByHashKeyStr(HashList *Hash);
 int GetCount(HashList *Hash);
 const void *GetSearchPayload(const void *HashVoid);
 void SortByPayload(HashList *Hash, CompareFunc SortBy);
-void generic_free_handler(void *ptr);
 void reference_free_handler(void *ptr);
 int HashLittle(const void *key, size_t length);
 
 
 void convert_spaces_to_underscores(char *str);
+int CheckEncode(const char *pch, long len, const char *pche);
 
 /*
  * Convert 4 bytes char into an Integer.