X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Flibcitadel.h;h=2f275d7ed99ee0abd0bac66d2eaaab15bad2a3ec;hb=6b5f7c9bbe2f754fb0f2ff433b90dd76e76836eb;hp=f0c8ab735d7ec2074d3b50f966e40b7f934f1825;hpb=ceec483b7aac5ec74a718a1080de75e10860d298;p=citadel.git diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index f0c8ab735..2f275d7ed 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -14,6 +14,8 @@ #include #include #include +#include + #define LIBCITADEL_VERSION_NUMBER 789 /* @@ -107,6 +109,7 @@ typedef enum _room_views { VIEW_MAX } ROOM_VIEWS; +#define BLOG_EUIDBUF_SIZE 40 #ifndef IsEmptyStr #define IsEmptyStr(a) ((a)[0] == '\0') @@ -239,7 +242,6 @@ int StrBufTCP_read_buffered_line_fast(StrBuf *Line, const char **Error); -int StrBufSipLine(StrBuf *LineBuf, StrBuf *Buf, const char **Ptr); typedef enum _eReadState { eReadFail, @@ -262,7 +264,7 @@ 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); int StrBufSub(StrBuf *dest, const StrBuf *Source, unsigned long Offset, size_t nChars); @@ -330,6 +332,7 @@ int StrBufSanitizeAscii(StrBuf *Buf, const char Mute); #define QU (3) void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn); void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn); +void StrBufHexEscAppend(StrBuf *OutBuf, const StrBuf *In, const unsigned char *PlainIn, long PlainInLen); 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); @@ -352,6 +355,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 */ @@ -454,6 +481,7 @@ long lFlathash(const char *str, long len); 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); @@ -598,4 +626,7 @@ void WildFireSerializePayload(StrBuf *JsonBuffer, StrBuf *OutBuf, int *MsgCount, 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)) + #endif // LIBCITADEL_H