Readloop remove special cases
[citadel.git] / libcitadel / lib / libcitadel.h
index f47c4a24106f9c6b998563a9355be1c5a5aeee95..d520eae4c96d8733104465bc58402629ada5b796 100644 (file)
@@ -1,5 +1,15 @@
 /*
  * Header file for libcitadel
+ *
+ * Copyright (c) 1987-2012 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  */
 
 
 #include <stdlib.h>
 #include <stdarg.h>
 #include <arpa/inet.h>
+#include <sys/types.h>
+#include <netinet/in.h>
 
-#define LIBCITADEL_VERSION_NUMBER      800
+#define LIBCITADEL_VERSION_NUMBER      810
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -86,9 +98,12 @@ typedef enum _room_views {
        VIEW_JOURNAL            = 8,    /* Journal view */
        VIEW_DRAFTS             = 9,    /* Drafts view */
        VIEW_BLOG               = 10,   /* Blog view */
-       VIEW_MAX
+       VIEW_QUEUE              = 11,   /* SMTP/... QUEUE rooms */
+       VIEW_MAX,
+       VIEW_JSON_LIST,
 } ROOM_VIEWS;
 
+#define BLOG_EUIDBUF_SIZE      40
 
 #ifndef IsEmptyStr
 #define IsEmptyStr(a) ((a)[0] == '\0')
@@ -220,8 +235,6 @@ int StrBufTCP_read_buffered_line_fast(StrBuf *Line,
                                      int selectresolution, 
                                      const char **Error);
 
-
-
 typedef enum _eReadState {
        eReadFail,
        eReadSuccess,
@@ -237,11 +250,31 @@ typedef struct _file_buffer {
        int nBlobBytesWanted;
 } IOBuffer;
 
+
+typedef struct __fd_iobuffer {
+       IOBuffer *IOB;
+       int OtherFD;
+       int SplicePipe[2];
+       long TotalSendSize;
+       long TotalSentAlready;
+       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);
+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);
 
 eReadState StrBufChunkSipLine(StrBuf *LineBuf, IOBuffer *FB);
 eReadState StrBufCheckBuffer(IOBuffer *FB);
+long IOBufferStrLength(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);
@@ -337,6 +370,7 @@ const char *GetIconFilename(char *MimeType, size_t len);
 /* URL parsing & connection data */
 typedef struct ParsedURL ParsedURL;
 struct ParsedURL {
+       int Priority;
        StrBuf *URL;
        StrBuf *UrlWithoutCred;
        StrBuf *CurlCreds;
@@ -610,4 +644,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