/*
* 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 812
/*
* Here's a bunch of stupid magic to make the MIME parser portable.
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
typedef struct __fd_iobuffer {
IOBuffer *IOB;
int OtherFD;
+ int SplicePipe[2];
+ int PipeSize;
long TotalSendSize;
long TotalSentAlready;
+ long TotalReadAlready;
long ChunkSize;
long ChunkSendRemain;
StrBuf *ChunkBuffer; /* just used if we don't have sendfile */
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);
+int FileMoveChunked(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 StrBufSipLine(StrBuf *LineBuf, const StrBuf *Buf, const char **Ptr);
int StrBufReplaceToken(StrBuf *Buf, long where, long HowLong, const char *Repl, long ReplLen);
+int StrBufExtract_tokenFromStr(StrBuf *dest, const char *Source, long SourceLen, int parmnum, char separator);
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);
#define RB (2)
#define QU (3)
void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
+void StrBufUrlescUPAppend(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);
/* URL parsing & connection data */
typedef struct ParsedURL ParsedURL;
struct ParsedURL {
+ int Priority;
StrBuf *URL;
StrBuf *UrlWithoutCred;
StrBuf *CurlCreds;
struct hostent *HEnt;
struct sockaddr_in6 Addr;
ParsedURL *Next;
+ int IsRelay;
+ StrBuf *UsrName;
+ StrBuf *Password;
};
void FreeURL(ParsedURL** Url);
/* 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