X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Flibcitadel.h;h=46709311c0131e5ec97ed1cae8f135f503064087;hb=3cfffe2479a77433a5e0801d24b902b33b0078f3;hp=6d4e2181cb26b4ebb315179619c5c1eb168835ee;hpb=6ae0819ac13984a0dfa583281fc0081af735c77d;p=citadel.git diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index 6d4e2181c..46709311c 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -1,7 +1,7 @@ /* * Header file for libcitadel * - * Copyright (c) 1987-2013 by the citadel.org team + * Copyright (c) 1987-2018 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. @@ -28,7 +28,7 @@ #include #include -#define LIBCITADEL_VERSION_NUMBER 821 +#define LIBCITADEL_VERSION_NUMBER 921 /* * Here's a bunch of stupid magic to make the MIME parser portable. @@ -49,16 +49,16 @@ typedef enum AXLevel { }eUsrAxlvl; typedef enum __RoomNetCfg { - subpending, - unsubpending, - lastsent, /* Server internal use only */ - ignet_push_share, - listrecp, - digestrecp, - pop3client, - rssclient, - participate, - roommailalias, + subpending = 0, + unsubpending = 1, + lastsent = 2, /* Server internal use only */ + ignet_push_share = 3, + listrecp = 4, + digestrecp = 5, + pop3client = 6, + rssclient = 7, + participate = 8, + roommailalias = 9, maxRoomNetCfg } RoomNetCfg; @@ -100,6 +100,7 @@ typedef enum _room_views { VIEW_DRAFTS = 9, /* Drafts view */ VIEW_BLOG = 10, /* Blog view */ VIEW_QUEUE = 11, /* SMTP/... QUEUE rooms */ + VIEW_WIKIMD = 12, /* Markdown Wiki view */ VIEW_MAX, VIEW_JSON_LIST, } ROOM_VIEWS; @@ -107,7 +108,7 @@ typedef enum _room_views { #define BLOG_EUIDBUF_SIZE 40 #ifndef IsEmptyStr -#define IsEmptyStr(a) ((a)[0] == '\0') +#define IsEmptyStr(a) ( ( (a) == NULL ) || ((a)[0] == '\0') ) #endif @@ -191,6 +192,7 @@ typedef struct _ConstStr { StrBuf* NewStrBuf(void); StrBuf* NewStrBufDup(const StrBuf *CopyMe); StrBuf* NewStrBufPlain(const char* ptr, int nChars); +void SwapBuffers(StrBuf *A, StrBuf *B); long StrBufShrinkToFit(StrBuf *Buf, int Force); void ReAdjustEmptyBuf(StrBuf *Buf, long ThreshHold, long NewSize); void NewStrBufDupAppendFlush(StrBuf **CreateRelpaceMe, StrBuf *CopyFlushMe, const char *NoMe, int KeepOriginal); @@ -252,28 +254,6 @@ typedef struct _file_buffer { int nBlobBytesWanted; } IOBuffer; - -typedef struct __fd_iobuffer { - IOBuffer *IOB; - int OtherFD; - int SplicePipe[2]; - int PipeSize; - long TotalSendSize; - loff_t TotalSentAlready; - loff_t TotalReadAlready; - long ChunkSize; - long ChunkSendRemain; - StrBuf *ChunkBuffer; /* just used if we don't have sendfile */ -} FDIOBuffer; - - -void FDIOBufferInit(FDIOBuffer *FDB, IOBuffer *IO, int FD, long TotalSendSize); -void FDIOBufferDelete(FDIOBuffer *FDB); -int FileSendChunked(FDIOBuffer *FDB, const char **Err); -int FileRecvChunked(FDIOBuffer *FDB, const char **Err); -int FileMoveChunked(FDIOBuffer *FDB, const char **Err); -eReadState WriteIOBAlreadyRead(FDIOBuffer *FDB, const char **Error); - long StrBuf_read_one_chunk_callback (int fd, short event, IOBuffer *FB); int StrBuf_write_one_chunk_callback(int fd, short event, IOBuffer *FB); @@ -337,7 +317,22 @@ void StrBuf_RFC822_2_Utf8(StrBuf *Target, /* deprecated old version: */ void StrBuf_RFC822_to_Utf8(StrBuf *Target, const StrBuf *DecodeMe, const StrBuf* DefaultCharset, StrBuf *FoundCharset); +typedef enum __eStreamType { + eBase64Encode, + eBase64Decode, + eZLibEncode, + eZLibDecode, + eEmtyCodec +} eStreamType; + +typedef struct vStreamT vStreamT; +vStreamT *StrBufNewStreamContext(eStreamType type, const char **Err); +int StrBufDestroyStreamContext(eStreamType type, vStreamT **Stream, const char **Err); +int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, const char* pIn, long pInLen, vStreamT *Stream, int LastChunk, const char **Err); + int StrBufDecodeBase64(StrBuf *Buf); +void StrBufDecodeQP(StrBuf *Buf); +int StrBufDecodeBase64To(const StrBuf *BufIn, StrBuf *BufOut); int StrBufDecodeHex(StrBuf *Buf); StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe); int StrBufRFC2047encode(StrBuf **target, const StrBuf *source); @@ -424,13 +419,11 @@ void StripSlashes(char *Dir, int TrailingSlash); size_t 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); int is_msg_in_sequence_set(const char *mset, long msgnum); 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); long stripallbut(char *str, char leftboundary, char rightboundary); @@ -448,7 +441,7 @@ char *rfc2047encode(const char *line, long length); int is_msg_in_mset(const char *mset, long msgnum); int pattern2(char *search, char *patn); void stripltlen(char *, int *); -char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int do_citaformat); +char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth); void LoadEntityList(char *FileName); @@ -469,7 +462,7 @@ struct vCard { struct vCard *vcard_new(void); -void vcard_add_prop(struct vCard *v, char *propname, char *propvalue); +void vcard_add_prop(struct vCard *v, const char *propname, const char *propvalue); struct vCard *vcard_load(char *vtext); struct vCard *VCardLoad(StrBuf *vbtext); @@ -498,8 +491,9 @@ typedef const char *(*PrintHashContent)(void * Data); typedef int (*CompareFunc)(const void* Item1, const void*Item2); typedef long (*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); +typedef const char* (*PrintHashDataFunc) (const char *Key, void *Item, int Odd); +long FourHash(const char *key, long length); long Flathash(const char *str, long len); long lFlathash(const char *str, long len); #define IKEY(a) (const char*) &a, sizeof(a) @@ -515,6 +509,7 @@ 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); int GetHashKeys(HashList *Hash, char ***List); +const char *dbg_PrintStrBufPayload(const char *Key, void *Item, int Odd); int dbg_PrintHash(HashList *Hash, PrintHashContent first, PrintHashContent Second); int PrintHash(HashList *Hash, TransitionFunc Trans, PrintHashDataFunc PrintEntry); HashPos *GetNewHashPos(const HashList *Hash, int StepWidth); @@ -596,7 +591,11 @@ JsonValue *NewJsonNumber(const char *Key, long keylen, long Number); JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number); -JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe); +enum { + NEWJSONSTRING_COPYBUF, // make a copy of the StrBuf, source is left alone + NEWJSONSTRING_SMASHBUF // smash the source StrBuf, the json object now owns that memory +}; +JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe, int copy_or_smash); JsonValue *NewJsonPlainString(const char *Key, long keylen, const char *CopyMe, long len); @@ -660,6 +659,7 @@ extern ConstStr RoomNetCfgStrs[maxRoomNetCfg]; /* a nice consistent place to define how we turn a message id into a thread id hash */ #define ThreadIdHash(Buf) abs(HashLittle(ChrPtr(Buf), StrLength(Buf))) +#define ThreadIdHashOffset(Buf, Offset) abs(HashLittle(ChrPtr(Buf) + Offset, StrLength(Buf)-Offset)) #ifdef __cplusplus extern "C" { @@ -679,7 +679,6 @@ extern "C" { #define FILTERLIST "application/x-citadel-filter-list" #define SIEVECONFIG "application/x-citadel-sieve-config" #define XMPPMORTUARY "application/x-citadel-xmpp-mortuary" -#define INTERNETCFG "application/x-citadel-internet-config" #define FILE_MAILALIAS "__MAIL_ALIAS__" @@ -739,6 +738,7 @@ extern "C" { #define QR2_SUBJECTREQ 8 /* Subject strongly recommended */ #define QR2_SMTP_PUBLIC 16 /* Listservice Subscribers may post */ #define QR2_MODERATED 32 /* Listservice aide has to permit posts */ +#define QR2_NOUPLMSG 64 /* If a file is uploaded, no message will be posted. */ #define US_NEEDVALID 1 /* User needs to be validated */ #define US_EXTEDIT 2 /* Always use external editor */