#include <time.h>
#include <stdlib.h>
#include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER 739
+#define LIBCITADEL_VERSION_NUMBER 760
/*
* Here's a bunch of stupid magic to make the MIME parser portable.
char *libcitadel_version_string(void);
int libcitadel_version_number(void);
-
+void ShutDownLibCitadel(void);
/*
* MIME parser declarations
*/
-void extract_key(char *target, char *source, char *key);
+void extract_key(char *target, char *source, long sourcelen, char *key, long keylen);
void mime_parser(char *content_start, char *content_end,
void (*CallBack)
void *cbuserdata),
void *userdata,
int dont_decode
- );
+);
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 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);
-inline int StrBufNum_tokens(const StrBuf *source, char tok);
+int StrBufNum_tokens(const StrBuf *source, char tok);
int StrBufRemove_token(StrBuf *Source, int parmnum, char separator);
+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);
void StrBufAppendPrintf(StrBuf *Buf, const char *format, ...);
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);
+int StrBufSanitizeAscii(StrBuf *Buf, const char Mute);
#define LB (1) /* Internal escape chars */
#define RB (2)
#define QU (3)
/* Select the icon for a given MIME type */
const char *GetIconFilename(char *MimeType, size_t len);
-void ShutDownLibCitadel(void);
-
/* tools */
void CtdlInitBase64Table(void);
size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
int CtdlDecodeBase64(char *dest, const char *source, size_t length);
+unsigned int decode_hex(char *Source);
int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
-void striplt(char *);
+long striplt(char *);
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);
char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
#define IsEmptyStr(a) ((a)[0] == '\0')
#define num_parms(source) num_tokens(source,(char)'|')
-void stripout(char *str, char leftboundary, char rightboundary);
+int stripout(char *str, char leftboundary, char rightboundary);
void stripallbut(char *str, char leftboundary, char rightboundary);
char *myfgets(char *s, int size, FILE *stream);
void urlesc(char *outbuf, size_t oblen, char *strbuf);
FILE *CtdlTempFile(void);
void generate_uuid(char *buf);
char *bmstrcasestr(char *text, char *pattern);
+char *bmstrcasestr_len(char *text, size_t textlen, 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);
* Hash list implementation for Citadel
*/
#define HKEY(a) a, (sizeof(a) - 1)
+
typedef struct HashList HashList;
typedef struct HashKey HashKey;
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);
void JsonObjectAppend(JsonValue *Array, JsonValue *Val);
-void SerializeJson(StrBuf *Target, JsonValue *Val);
+void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal);
eEXCEPTION
} WF_MessageType;
-JsonValue *WildFireException(StrBuf *Message,
- const char *Filename, long FileLen,
+JsonValue *WildFireException(const char *Filename, long FileLen,
long LineNo,
+ StrBuf *Message,
int StackOffset);
void WildFireAddArray(JsonValue *ReportBase, JsonValue *Array, WF_MessageType Type);