]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/libcitadel.h
Switch handling to have a pointer to the target address
[citadel.git] / libcitadel / lib / libcitadel.h
index b8309761cf087da081d4b67bd0acfd32ea25f165..1201a9be74abf773308201056da88bae16623880 100644 (file)
@@ -14,6 +14,9 @@
 #include <time.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <arpa/inet.h>
+#include <libcitadel.h>
+
 #define LIBCITADEL_VERSION_NUMBER      789
 
 /*
@@ -131,7 +134,7 @@ void ShutDownLibCitadel(void);
  * MIME parser declarations
  */
 
-void extract_key(char *target, char *source, long sourcelen, char *key, long keylen, char KeyEnd);
+long extract_key(char *target, char *source, long sourcelen, char *key, long keylen, char KeyEnd);
 
 
 typedef void (*MimeParserCallBackType)(char *cbname,
@@ -167,6 +170,11 @@ void mime_decode(char *partnum,
                 MimeParserCallBackType PostMultiPartCallBack,
                 void *userdata,
                 int dont_decode);
+int mime_decode_now (char *part_start, 
+                    size_t length,
+                    char *encoding,
+                    char **decoded,
+                    size_t *bytes_decoded);
 void the_mime_parser(char *partnum,
                     char *content_start, char *content_end,
                     MimeParserCallBackType CallBack,
@@ -233,7 +241,31 @@ int StrBufTCP_read_buffered_line_fast(StrBuf *Line,
                                      int selectresolution, 
                                      const char **Error);
 
+
 int StrBufSipLine(StrBuf *LineBuf, StrBuf *Buf, const char **Ptr);
+
+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 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);
@@ -323,6 +355,26 @@ 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;
+       unsigned Port;
+       const char *Host;
+       const char *User;
+       const char *Pass;
+       const char *LocalPart;
+       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);
+
 /* tools */
 
 
@@ -351,7 +403,7 @@ const char *cmemreadlinelen(const char *start, char *buf, int maxlen, int *retle
 #define IsEmptyStr(a) ((a)[0] == '\0')
 #define num_parms(source)              num_tokens(source,(char)'|')
 int stripout(char *str, char leftboundary, char rightboundary);
-void stripallbut(char *str, char leftboundary, char rightboundary);
+long stripallbut(char *str, char leftboundary, char rightboundary);
 char *myfgets(char *s, int size, FILE *stream);
 void urlesc(char *outbuf, size_t oblen, char *strbuf);
 char *CtdlTempFileName(char *prefix1, int prefix2);
@@ -425,6 +477,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);
@@ -567,5 +620,6 @@ void WildFireSerializePayload(StrBuf *JsonBuffer, StrBuf *OutBuf, int *MsgCount,
 #define WF_STRUCTINDEX "1"
 #define WF_SUB "1"
 
+extern ConstStr RoomNetCfgStrs[maxRoomNetCfg];
 
 #endif // LIBCITADEL_H