* duplicate memreadline & bmstrcasestr to a const and non const version
[citadel.git] / libcitadel / lib / libcitadel.h
index d89995833bd97cdae305f68c9d25a5a63e19dad2..44e1544e77c9438a799b3365ed7472e16f64c271 100644 (file)
@@ -118,46 +118,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 +147,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 +266,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 +319,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 +332,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 +410,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 +419,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.