FreeBSD Compatibility (as proposed by acardenas)
[citadel.git] / libcitadel / lib / libcitadel.h
index 13737c39c797b6c2547f8d0cc402558a133a2f90..d0b2690bca9d4ffc750c210c280c0b6c70c76ccf 100644 (file)
 #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      802
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -221,8 +223,6 @@ int StrBufTCP_read_buffered_line_fast(StrBuf *Line,
                                      int selectresolution, 
                                      const char **Error);
 
-
-
 typedef enum _eReadState {
        eReadFail,
        eReadSuccess,
@@ -238,11 +238,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);
@@ -611,4 +631,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