]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/libcitadel.h
* zero-safe StrtoI/L
[citadel.git] / libcitadel / lib / libcitadel.h
index 8dcca78397523882cc3215fe76de8375a12e845f..28358c89a4cdd80596c69ca62dd988a2c9824d5d 100644 (file)
@@ -15,7 +15,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER      738
+#define LIBCITADEL_VERSION_NUMBER      739
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -90,6 +90,7 @@ void mime_parser(char *content_start, char *content_end,
                        char *cbcharset,
                        size_t cblength,
                        char *cbencoding,
+                       char *cbid,
                        void *cbuserdata),
                void (*PreMultiPartCallBack)
                        (char *cbname,
@@ -101,6 +102,7 @@ void mime_parser(char *content_start, char *content_end,
                        char *cbcharset,
                        size_t cblength,
                        char *cbencoding,
+                       char *cbid,
                        void *cbuserdata),
                void (*PostMultiPartCallBack)
                        (char *cbname,
@@ -112,6 +114,7 @@ void mime_parser(char *content_start, char *content_end,
                        char *cbcharset,
                        size_t cblength,
                        char *cbencoding,
+                       char *cbid,
                        void *cbuserdata),
                void *userdata,
                int dont_decode
@@ -124,6 +127,7 @@ void mime_decode(char *partnum,
                 char *part_start, size_t length,
                 char *content_type, char *charset, char *encoding,
                 char *disposition,
+                char *id,
                 char *name, char *filename,
                 void (*CallBack)
                  (char *cbname,
@@ -135,6 +139,7 @@ void mime_decode(char *partnum,
                   char *cbcharset,
                   size_t cblength,
                   char *cbencoding,
+                  char *cbid,
                   void *cbuserdata),
                 void (*PreMultiPartCallBack)
                  (char *cbname,
@@ -146,6 +151,7 @@ void mime_decode(char *partnum,
                   char *cbcharset,
                   size_t cblength,
                   char *cbencoding,
+                  char *cbid,
                   void *cbuserdata),
                 void (*PostMultiPartCallBack)
                  (char *cbname,
@@ -157,6 +163,7 @@ void mime_decode(char *partnum,
                   char *cbcharset,
                   size_t cblength,
                   char *cbencoding,
+                  char *cbid,
                   void *cbuserdata),
                  void *userdata,
                  int dont_decode
@@ -173,6 +180,7 @@ void the_mime_parser(char *partnum,
                       char *cbcharset,
                       size_t cblength,
                       char *cbencoding,
+                      char *cbid,
                       void *cbuserdata),
                     void (*PreMultiPartCallBack)
                      (char *cbname,
@@ -184,6 +192,7 @@ void the_mime_parser(char *partnum,
                       char *cbcharset,
                       size_t cblength,
                       char *cbencoding,
+                      char *cbid,
                       void *cbuserdata),
                     void (*PostMultiPartCallBack)
                      (char *cbname,
@@ -195,6 +204,7 @@ void the_mime_parser(char *partnum,
                       char *cbcharset,
                       size_t cblength,
                       char *cbencoding,
+                      char *cbid,
                       void *cbuserdata),
                      void *userdata,
                      int dont_decode
@@ -202,6 +212,12 @@ void the_mime_parser(char *partnum,
 
 typedef struct StrBuf StrBuf;
 
+typedef struct _ConstStr {
+       const char *Key;
+       long len;
+}ConstStr;
+
+
 StrBuf* NewStrBuf(void);
 StrBuf* NewStrBufDup(const StrBuf *CopyMe);
 StrBuf* NewStrBufPlain(const char* ptr, int nChars);
@@ -212,19 +228,28 @@ void FreeStrBuf (StrBuf **FreeMe);
 void HFreeStrBuf (void *VFreeMe);
 int FlushStrBuf(StrBuf *buf);
 
-inline const char *ChrPtr(const StrBuf *Str);
-inline int StrLength(const StrBuf *Str);
+const char *ChrPtr(const StrBuf *Str);
+int StrLength(const StrBuf *Str);
+#define SKEY(a) ChrPtr(a), StrLength(a)
 long StrBufPeek(StrBuf *Buf, const char* ptr, long nThChar, char PeekValue);
 
 int StrBufTCP_read_line(StrBuf *buf, int *fd, int append, const char **Error);
 int StrBufReadBLOB(StrBuf *Buf, int *fd, int append, long nBytes, const char **Error);
-
+int StrBufTCP_read_buffered_line(StrBuf *Line, 
+                                StrBuf *buf, 
+                                int *fd, 
+                                int timeout, 
+                                int selectresolution, 
+                                const char **Error);
+
+int StrBufSipLine(StrBuf *LineBuf, StrBuf *Buf, const char **Ptr);
 int StrBufExtract_token(StrBuf *dest, const StrBuf *Source, int parmnum, char separator);
 int StrBufSub(StrBuf *dest, const StrBuf *Source, size_t Offset, size_t nChars);
 unsigned long StrBufExtract_unsigned_long(const StrBuf* Source, int parmnum, char separator);
 long StrBufExtract_long(const StrBuf* Source, int parmnum, char separator);
 int StrBufExtract_int(const StrBuf* Source, int parmnum, char separator);
 inline int StrBufNum_tokens(const StrBuf *source, char tok);
+int StrBufRemove_token(StrBuf *Source, int parmnum, char separator);
 
 void StrBufAppendBufPlain(StrBuf *Buf, const char *AppendBuf, long AppendSize, size_t Offset);
 void StrBufAppendBuf(StrBuf *Buf, const StrBuf *AppendBuf, size_t Offset);
@@ -236,17 +261,32 @@ void StrBufVAppendPrintf(StrBuf *Buf, const char *format, va_list ap);
 void StrBufPrintf(StrBuf *Buf, const char *format, ...) __attribute__((__format__(__printf__,2,3)));
 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 StrBufUpCase(StrBuf *Buf);
+void StrBufLowerCase(StrBuf *Buf);
 void StrBufEUid_unescapize(StrBuf *target, const StrBuf *source);
 void StrBufEUid_escapize(StrBuf *target, const StrBuf *source);
 
 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_to_Utf8(StrBuf *Target, const StrBuf *DecodeMe, const StrBuf* DefaultCharset, StrBuf *FoundCharset);
 int StrBufDecodeBase64(StrBuf *Buf);
 int StrBufRFC2047encode(StrBuf **target, const StrBuf *source);
+#define LB                     (1)             /* Internal escape chars */
+#define RB                     (2)
+#define QU                     (3)
+void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
+long StrEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks);
+void StrMsgEscAppend(StrBuf *Target, StrBuf *Source, const char *PlainIn);
 
 long StrTol(const StrBuf *Buf);
 int StrToi(const StrBuf *Buf);
+long StrBuf_Utf8StrLen(StrBuf *Buf);
+long StrBuf_Utf8StrCut(StrBuf *Buf, int maxlen);
 
 const char *GuessMimeType(const char *data, size_t dlen);
 const char* GuessMimeByFilename(const char *what, size_t len);
@@ -336,7 +376,7 @@ long StrBufUnescape(StrBuf *Buf, int StripBlanks);
 /*
  * Hash list implementation for Citadel
  */
-#define HKEY(a) a, sizeof(a) - 1
+#define HKEY(a) a, (sizeof(a) - 1)
 typedef struct HashList HashList;
 
 typedef struct HashKey HashKey;
@@ -350,8 +390,12 @@ typedef int (*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);
+#define IKEY(a) (const char*)(&((int)a)), sizeof(int)
+
 HashList *NewHash(int Uniq, HashFunc F);
 void DeleteHash(HashList **Hash);
+void HDeleteHash(void *vHash);
 int GetHash(HashList *Hash, const char *HKey, long HKLen, void **Data);
 void Put(HashList *Hash, const char *HKey, long HKLen, void *Data, DeleteHashDataFunc DeleteIt);
 int GetKey(HashList *Hash, char *HKey, long HKLen, void **Data);
@@ -367,6 +411,7 @@ 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);
 
 
 void convert_spaces_to_underscores(char *str);