+ MimeParserCallBackType CallBack,
+ MimeParserCallBackType PreMultiPartCallBack,
+ MimeParserCallBackType PostMultiPartCallBack,
+ void *userdata,
+ int dont_decode);
+
+typedef struct StrBuf StrBuf;
+
+#define strof(a) #a
+#define CStrOf(a) #a, sizeof(#a) - 1
+typedef struct _ConstStr {
+ const char *Key;
+ long len;
+}ConstStr;
+#define CKEY(a) (a).Key, (a).len
+
+StrBuf* NewStrBuf(void);
+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);
+
+int StrBufPlain(StrBuf *Buf, const char* ptr, int nChars);
+StrBuf* _NewConstStrBuf(const char* StringConstant, size_t SizeOfStrConstant);
+#define NewConstStrBuf(a) _NewConstStrBuf(a, sizeof(a))
+void FreeStrBuf (StrBuf **FreeMe);
+char *SmashStrBuf (StrBuf **SmashMe);
+void HFreeStrBuf (void *VFreeMe);
+int FlushStrBuf(StrBuf *buf);
+int FLUSHStrBuf(StrBuf *buf); /* expensive but doesn't leave content behind for others to find in case of errors */
+
+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);
+long StrBufPook(StrBuf *Buf, const char* ptr, long nThChar, long nChars, char PookValue);
+
+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);
+#define NNN_TERM 1
+#define O_TERM 0
+int StrBufReadBLOBBuffered(StrBuf *Buf,
+ StrBuf *IOBuf,
+ const char **BufPos,
+ int *fd,
+ int append,
+ long nBytes,
+ int check,
+ const char **Error);
+int StrBufTCP_read_buffered_line(StrBuf *Line,
+ StrBuf *buf,
+ int *fd,
+ int timeout,
+ int selectresolution,
+ const char **Error);
+int StrBufTCP_read_buffered_line_fast(StrBuf *Line,
+ StrBuf *buf,
+ const char **Pos,
+ int *fd,
+ int timeout,
+ int selectresolution,
+ const char **Error);
+
+int StrBufSipLine(StrBuf *LineBuf, StrBuf *Buf, const char **Ptr);
+int StrBufReplaceToken(StrBuf *Buf, long where, long HowLong, const char *Repl, long ReplLen);
+int StrBufExtract_token(StrBuf *dest, const StrBuf *Source, int parmnum, char separator);
+int StrBufSub(StrBuf *dest, const StrBuf *Source, unsigned long 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);
+int StrBufNum_tokens(const StrBuf *source, char tok);
+int StrBufRemove_token(StrBuf *Source, int parmnum, char separator);
+
+int StrBufHaveNextToken(const StrBuf *Source, const char **pStart);
+int StrBufExtract_NextToken(StrBuf *dest, const StrBuf *Source, const char **pStart, char separator);
+int StrBufSkip_NTokenS(const StrBuf *Source, const char **pStart, char separator, int nTokens);
+unsigned long StrBufExtractNext_unsigned_long(const StrBuf* Source, const char **pStart, char separator);
+long StrBufExtractNext_long(const StrBuf* Source, const char **pStart, char separator);
+int StrBufExtractNext_int(const StrBuf* Source, const char **pStart, char separator);
+
+
+void StrBufAppendBufPlain(StrBuf *Buf, const char *AppendBuf, long AppendSize, unsigned long Offset);
+void StrBufAppendBuf(StrBuf *Buf, const StrBuf *AppendBuf, unsigned long Offset);
+size_t CurlFillStrBuf_callback(void *ptr, size_t size, size_t nmemb, void *stream);
+void StrBufAppendPrintf(StrBuf *Buf, const char *format, ...);
+#ifdef SHOW_ME_VAPPEND_PRINTF
+/* so owe don't create an include depndency, this is just visible on demand. */
+void StrBufVAppendPrintf(StrBuf *Buf, const char *format, va_list ap);
+#endif
+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 StrBufStripAllBut(StrBuf *Buf, char leftboundary, char rightboundary);
+void StrBufUpCase(StrBuf *Buf);
+void StrBufLowerCase(StrBuf *Buf);
+void StrBufStripSlashes(StrBuf *Dir, int RemoveTrailingSlash);
+void StrBufEUid_unescapize(StrBuf *target, const StrBuf *source);
+void StrBufEUid_escapize(StrBuf *target, const StrBuf *source);
+
+void StrBufToUnixLF(StrBuf *buf);
+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 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)
+#define QU (3)
+void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
+void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
+long StrEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks);
+long StrECMAEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
+long StrHtmlEcmaEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks);
+void StrMsgEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
+void StrIcalEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
+
+long StrTol(const StrBuf *Buf);
+int StrToi(const StrBuf *Buf);
+int StrBufIsNumber(const StrBuf *Buf);
+long StrBuf_Utf8StrLen(StrBuf *Buf);
+long StrBuf_Utf8StrCut(StrBuf *Buf, int maxlen);
+
+const char *GuessMimeType(const char *data, size_t dlen);