X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Flibcitadel.h;h=3f1e59785c2050b9ea40f39a8600d2a80067d5f9;hb=2c441d09e5c799d28510595ef453db91987a640f;hp=96cb9f3ff91307a7bb7c0d33e0b9f5191ba86766;hpb=dfb3e5bfc00c693b04f8bbd34de79b369992c329;p=citadel.git diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index 96cb9f3ff..3f1e59785 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -14,7 +14,9 @@ #include #include #include -#define LIBCITADEL_VERSION_NUMBER 800 +#include + +#define LIBCITADEL_VERSION_NUMBER 801 /* * Here's a bunch of stupid magic to make the MIME parser portable. @@ -219,6 +221,27 @@ int StrBufTCP_read_buffered_line_fast(StrBuf *Line, int selectresolution, const char **Error); +typedef enum _eReadState { + eReadFail, + eReadSuccess, + eMustReadMore, + eBufferNotEmpty +} eReadState; + +typedef struct _file_buffer { + StrBuf *Buf; + const char *ReadWritePointer; + int fd; + int LineCompleted; + int nBlobBytesWanted; +} IOBuffer; + +long StrBuf_read_one_chunk_callback (int fd, short event, IOBuffer *FB); +int StrBuf_write_one_chunk_callback(int fd, short event, IOBuffer *FB); + +eReadState StrBufChunkSipLine(StrBuf *LineBuf, IOBuffer *FB); +eReadState StrBufCheckBuffer(IOBuffer *FB); + int StrBufSipLine(StrBuf *LineBuf, const 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); @@ -310,6 +333,30 @@ int LoadIconDir(const char *DirName); const char *GetIconFilename(char *MimeType, size_t len); +/* URL parsing & connection data */ +typedef struct ParsedURL ParsedURL; +struct ParsedURL { + StrBuf *URL; + StrBuf *UrlWithoutCred; + StrBuf *CurlCreds; + unsigned Port; + const char *Host; + const char *User; + const char *Pass; + const char *LocalPart; + const char *PlainUrl; + int IsIP; + int IPv6; + int af; + struct hostent *HEnt; + struct sockaddr_in6 Addr; + ParsedURL *Next; +}; + +void FreeURL(ParsedURL** Url); +int ParseURL(ParsedURL **Url, StrBuf *UrlStr, unsigned short DefaultPort); +void CurlPrepareURL(ParsedURL *Url); + /* tools */ @@ -410,8 +457,11 @@ long lFlathash(const char *str, long len); #define IKEY(a) (const char*) &a, sizeof(a) #define LKEY(a) (const char*) &a, sizeof(a) +int TestValidateHash(HashList *TestHash); + HashList *NewHash(int Uniq, HashFunc F); void DeleteHash(HashList **Hash); +void DeleteHashContent(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); @@ -559,4 +609,8 @@ extern ConstStr RoomNetCfgStrs[maxRoomNetCfg]; /* Convenience function to "perform a function and cut a log record if result != 0" */ #define CtdlLogResult(x) if (x) syslog(LOG_CRIT, "%s:%d %s", __FILE__, __LINE__, strerror(errno)) +/* 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))) + + #endif // LIBCITADEL_H