-
/*
* Copyright (c) 1987-2021 by the citadel.org team
*
#include "webcit.h"
#include "webserver.h"
-long MaxRead = -1; /* should we do READ scattered or all at once? */
+long MaxRead = -1; /* should we do READ scattered or all at once? */
/*
* register the timeout
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s < 0) {
syslog(LOG_WARNING, "Can't create socket [%s]: %s\n", sockpath, strerror(errno));
- return (-1);
+ return(-1);
}
if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
syslog(LOG_WARNING, "Can't connect [%s]: %s\n", sockpath, strerror(errno));
close(s);
- return (-1);
+ return(-1);
}
return s;
}
}
-int StrBuf_ServGetln(StrBuf * buf) {
+int StrBuf_ServGetln(StrBuf *buf) {
const char *ErrStr = NULL;
int rc;
-
+
if (!WC->connected)
return -1;
FlushStrBuf(buf);
- rc = StrBufTCP_read_buffered_line_fast(buf, WC->ReadBuf, &WC->ReadPos, &WC->serv_sock, 5, 1, &ErrStr);
- if (rc < 0) {
- syslog(LOG_INFO, "StrBuf_ServGetln(): Server connection broken: %s\n", (ErrStr) ? ErrStr : "");
+ rc = StrBufTCP_read_buffered_line_fast(buf,
+ WC->ReadBuf,
+ &WC->ReadPos,
+ &WC->serv_sock,
+ 5, 1,
+ &ErrStr);
+ if (rc < 0)
+ {
+ syslog(LOG_INFO, "StrBuf_ServGetln(): Server connection broken: %s\n",
+ (ErrStr)?ErrStr:"");
wc_backtrace(LOG_INFO);
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
}
#ifdef SERV_TRACE
- else {
+ else
+ {
long pos = 0;
if (WC->ReadPos != NULL)
pos = WC->ReadPos - ChrPtr(WC->ReadBuf);
return rc;
}
-int StrBuf_ServGetBLOBBuffered(StrBuf * buf, long BlobSize) {
+int StrBuf_ServGetBLOBBuffered(StrBuf *buf, long BlobSize) {
const char *ErrStr;
int rc;
-
- rc = StrBufReadBLOBBuffered(buf, WC->ReadBuf, &WC->ReadPos, &WC->serv_sock, 1, BlobSize, NNN_TERM, &ErrStr);
+
+ rc = StrBufReadBLOBBuffered(buf,
+ WC->ReadBuf,
+ &WC->ReadPos,
+ &WC->serv_sock,
+ 1,
+ BlobSize,
+ NNN_TERM,
+ &ErrStr);
if (rc < 0) {
- syslog(LOG_INFO, "StrBuf_ServGetBLOBBuffered(): Server connection broken: %s\n", (ErrStr) ? ErrStr : "");
+ syslog(LOG_INFO, "StrBuf_ServGetBLOBBuffered(): Server connection broken: %s\n",
+ (ErrStr)?ErrStr:"");
wc_backtrace(LOG_INFO);
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
}
#ifdef SERV_TRACE
- else
- syslog(LOG_DEBUG, "%3d<<<BLOB: %d bytes\n", WC->serv_sock, StrLength(buf));
+ else
+ syslog(LOG_DEBUG, "%3d<<<BLOB: %d bytes\n", WC->serv_sock, StrLength(buf));
#endif
return rc;
}
-int StrBuf_ServGetBLOB(StrBuf * buf, long BlobSize) {
+int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize) {
const char *ErrStr;
int rc;
-
+
WC->ReadPos = NULL;
rc = StrBufReadBLOB(buf, &WC->serv_sock, 1, BlobSize, &ErrStr);
if (rc < 0) {
- syslog(LOG_INFO, "StrBuf_ServGetBLOB(): Server connection broken: %s\n", (ErrStr) ? ErrStr : "");
+ syslog(LOG_INFO, "StrBuf_ServGetBLOB(): Server connection broken: %s\n",
+ (ErrStr)?ErrStr:"");
wc_backtrace(LOG_INFO);
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
}
#ifdef SERV_TRACE
- else
- syslog(LOG_DEBUG, "%3d<<<BLOB: %d bytes\n", WC->serv_sock, StrLength(buf));
+ else
+ syslog(LOG_DEBUG, "%3d<<<BLOB: %d bytes\n", WC->serv_sock, StrLength(buf));
#endif
return rc;
}
-void FlushReadBuf(void) {
+void FlushReadBuf (void) {
long len;
const char *pch;
const char *pche;
pche = pch + len;
if (WC->ReadPos != pche) {
syslog(LOG_ERR,
- "ERROR: somebody didn't eat his soup! Remaing Chars: %ld [%s]\n", (long) (pche - WC->ReadPos), pche);
- syslog(LOG_ERR,
- "--------------------------------------------------------------------------------\n"
- "Whole buf: [%s]\n"
- "--------------------------------------------------------------------------------\n", pch);
- AppendImportantMessage(HKEY
- ("Suppenkasper alert! watch your webcit logfile and get connected to your favourite opensource Crew."));
+ "ERROR: somebody didn't eat his soup! Remaing Chars: %ld [%s]\n",
+ (long)(pche - WC->ReadPos),
+ pche
+ );
+ syslog(LOG_ERR,
+ "--------------------------------------------------------------------------------\n"
+ "Whole buf: [%s]\n"
+ "--------------------------------------------------------------------------------\n",
+ pch);
+ AppendImportantMessage(HKEY("Suppenkasper alert! watch your webcit logfile and get connected to your favourite opensource Crew."));
}
}
retval = write(WC->serv_sock, &buf[bytes_written], nbytes - bytes_written);
if (retval < 1) {
const char *ErrStr = strerror(errno);
- syslog(LOG_INFO, "serv_write(): Server connection broken: %s\n", (ErrStr) ? ErrStr : "");
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ syslog(LOG_INFO, "serv_write(): Server connection broken: %s\n", (ErrStr)?ErrStr:"");
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
* send line to server
* string the line to send to the citadel server
*/
-int serv_putbuf(const StrBuf * string) {
+int serv_putbuf(const StrBuf *string) {
#ifdef SERV_TRACE
syslog(LOG_DEBUG, "%3d>>>%s\n", WC->serv_sock, ChrPtr(string));
#endif
* format the formatstring
* ... the entities to insert into format
*/
-int serv_printf(const char *format, ...) {
+int serv_printf(const char *format,...) {
va_list arg_ptr;
char buf[SIZ];
size_t len;
* Read binary data from server into memory using a series of server READ commands.
* returns the read content as StrBuf
*/
-int serv_read_binary(StrBuf * Ret, size_t total_len, StrBuf * Buf) {
+int serv_read_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf) {
size_t bytes_read = 0;
size_t this_block = 0;
int rc = 6;
while ((bytes_read < total_len) && (ServerRc == 6)) {
- if (WC->serv_sock == -1) {
- FlushStrBuf(Ret);
- return -1;
+ if (WC->serv_sock==-1) {
+ FlushStrBuf(Ret);
+ return -1;
}
- serv_printf("READ " SIZE_T_FMT "|" SIZE_T_FMT, bytes_read, total_len - bytes_read);
- if ((rc = StrBuf_ServGetln(Buf) > 0) && (ServerRc = GetServerStatus(Buf, NULL), ServerRc == 6)) {
+ serv_printf("READ "SIZE_T_FMT"|"SIZE_T_FMT, bytes_read, total_len-bytes_read);
+ if ( (rc = StrBuf_ServGetln(Buf) > 0) && (ServerRc = GetServerStatus(Buf, NULL), ServerRc == 6) ) {
if (rc < 0)
return rc;
StrBufCutLeft(Buf, 4);
if (rc < 0) {
syslog(LOG_INFO, "Server connection broken during download\n");
wc_backtrace(LOG_INFO);
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
}
-int client_write(StrBuf * ThisBuf) {
- const char *ptr, *eptr;
- long count;
+int client_write(StrBuf *ThisBuf) {
+ const char *ptr, *eptr;
+ long count;
ssize_t res = 0;
- fd_set wset;
- int fdflags;
+ fd_set wset;
+ int fdflags;
ptr = ChrPtr(ThisBuf);
count = StrLength(ThisBuf);
fdflags = fcntl(WC->Hdr->http_sock, F_GETFL);
- while ((ptr < eptr) && (WC->Hdr->http_sock != -1)) {
- if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
- FD_ZERO(&wset);
- FD_SET(WC->Hdr->http_sock, &wset);
- if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
- syslog(LOG_INFO, "client_write: Socket select failed (%s)\n", strerror(errno));
- return -1;
- }
- }
-
- if ((WC->Hdr->http_sock == -1) || ((res = write(WC->Hdr->http_sock, ptr, count)), (res == -1))) {
- syslog(LOG_INFO, "client_write: Socket write failed (%s)\n", strerror(errno));
+ while ((ptr < eptr) && (WC->Hdr->http_sock != -1)) {
+ if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
+ FD_ZERO(&wset);
+ FD_SET(WC->Hdr->http_sock, &wset);
+ if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
+ syslog(LOG_INFO, "client_write: Socket select failed (%s)\n", strerror(errno));
+ return -1;
+ }
+ }
+
+ if ((WC->Hdr->http_sock == -1) || ((res = write(WC->Hdr->http_sock, ptr, count)), (res == -1))) {
+ syslog(LOG_INFO, "client_write: Socket write failed (%s)\n", strerror(errno));
wc_backtrace(LOG_INFO);
- return -1;
- }
- count -= res;
+ return -1;
+ }
+ count -= res;
ptr += res;
- }
+ }
return 0;
}
-int read_serv_chunk(StrBuf * Buf, size_t total_len, size_t *bytes_read) {
+int read_serv_chunk( StrBuf *Buf, size_t total_len, size_t *bytes_read) {
int rc;
int ServerRc;
- serv_printf("READ " SIZE_T_FMT "|" SIZE_T_FMT, *bytes_read, total_len - (*bytes_read));
- if ((rc = StrBuf_ServGetln(Buf) > 0) && (ServerRc = GetServerStatus(Buf, NULL), ServerRc == 6)) {
+ serv_printf("READ "SIZE_T_FMT"|"SIZE_T_FMT, *bytes_read, total_len-(*bytes_read));
+ if ( (rc = StrBuf_ServGetln(Buf) > 0) && (ServerRc = GetServerStatus(Buf, NULL), ServerRc == 6) ) {
size_t this_block = 0;
if (rc < 0)
if (rc < 0) {
syslog(LOG_INFO, "Server connection broken during download\n");
wc_backtrace(LOG_INFO);
- if (WC->serv_sock > 0)
- close(WC->serv_sock);
+ if (WC->serv_sock > 0) close(WC->serv_sock);
WC->serv_sock = (-1);
WC->connected = 0;
WC->logged_in = 0;
return 6;
}
-static inline int send_http(StrBuf * Buf) {
+static inline int send_http(StrBuf *Buf) {
#ifdef HAVE_OPENSSL
if (is_https)
return client_write_ssl(Buf);
#endif
return client_write(Buf);
}
-
/*
* Read binary data from server into memory using a series of server READ commands.
* returns the read content as StrBuf
*/
-void serv_read_binary_to_http(StrBuf * MimeType, size_t total_len, int is_static, int detect_mime) {
+void serv_read_binary_to_http(StrBuf *MimeType, size_t total_len, int is_static, int detect_mime) {
int ServerRc = 6;
size_t bytes_read = 0;
int first = 1;
vStreamT *SC = NULL;
IOBuffer ReadBuffer;
IOBuffer WriteBuffer;
-
+
Buf = NewStrBuf();
WC->Hdr->HaveRange++;
WC->Hdr->TotalBytes = total_len;
/* open range? or beyound file border? correct the numbers. */
- if ((WC->Hdr->RangeTil == -1) || (WC->Hdr->RangeTil >= total_len))
+ if ((WC->Hdr->RangeTil == -1) || (WC->Hdr->RangeTil>= total_len))
WC->Hdr->RangeTil = total_len - 1;
bytes_read = WC->Hdr->RangeStart;
total_len = WC->Hdr->RangeTil;
}
else
- chunked = total_len > SIZ * 10; /* TODO: disallow for HTTP / 1.0 */
+ chunked = total_len > SIZ * 10; /* TODO: disallow for HTTP / 1.0 */
if (chunked) {
BufHeader = NewStrBuf();
size_t bytes_read = 0;
const char *CT;
- ServerRc = read_serv_chunk(Buf, total_len, &bytes_read);
+ ServerRc = read_serv_chunk(
+ Buf,
+ total_len,
+ &bytes_read);
- if (ServerRc != 6) {
+ if (ServerRc != 6)
+ {
FreeStrBuf(&BufHeader);
FreeStrBuf(&Buf);
return;
memset(&WriteBuffer, 0, sizeof(IOBuffer));
if (chunked && !DisableGzip && WC->Hdr->HR.gzip_ok) {
is_gzip = 1;
- SC = StrBufNewStreamContext(eZLibEncode, &Err);
+ SC = StrBufNewStreamContext (eZLibEncode, &Err);
if (SC == NULL) {
syslog(LOG_ERR, "Error while initializing stream context: %s", Err);
FreeStrBuf(&Buf);
memset(&ReadBuffer, 0, sizeof(IOBuffer));
ReadBuffer.Buf = WC->WBuf;
- WriteBuffer.Buf = NewStrBufPlain(NULL, SIZ * 2);;
+ WriteBuffer.Buf = NewStrBufPlain(NULL, SIZ*2);;
pBuf = WriteBuffer.Buf;
}
else {
if (!detect_mime) {
http_transmit_headers(ChrPtr(MimeType), is_static, chunked, is_gzip);
-
+
if (send_http(WC->HBuf) < 0) {
FreeStrBuf(&Buf);
FreeStrBuf(&WriteBuffer.Buf);
while ((bytes_read < total_len) && (ServerRc == 6) && (client_con_state == 0)) {
- if (WC->serv_sock == -1) {
- FlushStrBuf(WC->WBuf);
+ if (WC->serv_sock==-1) {
+ FlushStrBuf(WC->WBuf);
FreeStrBuf(&Buf);
FreeStrBuf(&WriteBuffer.Buf);
FreeStrBuf(&BufHeader);
return;
}
- ServerRc = read_serv_chunk(Buf, total_len, &bytes_read);
+ ServerRc = read_serv_chunk(
+ Buf,
+ total_len,
+ &bytes_read);
if (ServerRc != 6)
break;
if (detect_mime) {
const char *CT;
detect_mime = 0;
-
+
CT = GuessMimeType(SKEY(WC->WBuf));
StrBufPlain(MimeType, CT, -1);
if (is_gzip) {
is_gzip = WC->Hdr->HR.gzip_ok;
}
http_transmit_headers(ChrPtr(MimeType), is_static, chunked, is_gzip);
-
+
client_con_state = send_http(WC->HBuf);
}
int rc;
do {
- rc = StrBufStreamTranscode(eZLibEncode, &WriteBuffer, &ReadBuffer, NULL, -1, SC, done,
- &Err);
+ rc = StrBufStreamTranscode(eZLibEncode, &WriteBuffer, &ReadBuffer, NULL, -1, SC, done, &Err);
- if (StrLength(pBuf) > 0) {
- StrBufPrintf(BufHeader, "%s%x\r\n", (first) ? "" : "\r\n", StrLength(pBuf));
+ if (StrLength (pBuf) > 0) {
+ StrBufPrintf(BufHeader, "%s%x\r\n",
+ (first)?"":"\r\n",
+ StrLength (pBuf));
first = 0;
client_con_state = send_http(BufHeader);
if (client_con_state == 0) {
}
else {
if ((chunked) && (client_con_state == 0)) {
- StrBufPrintf(BufHeader, "%s%x\r\n", (first) ? "" : "\r\n", StrLength(pBuf));
+ StrBufPrintf(BufHeader, "%s%x\r\n",
+ (first)?"":"\r\n",
+ StrLength (pBuf));
first = 0;
client_con_state = send_http(BufHeader);
}
StrBufPlain(BufHeader, HKEY("\r\n0\r\n\r\n"));
if (send_http(BufHeader) < 0) {
FreeStrBuf(&Buf);
- FreeStrBuf(&BufHeader);
+ FreeStrBuf(&BufHeader);
return;
}
}
FreeStrBuf(&Buf);
}
-int ClientGetLine(ParsedHttpHdrs * Hdr, StrBuf * Target) {
+int ClientGetLine(ParsedHttpHdrs *Hdr, StrBuf *Target) {
const char *Error;
#ifdef HAVE_OPENSSL
const char *pch, *pchs;
if (pch != NULL) {
rlen = 0;
len = pch - pchs;
- if (len > 0 && (*(pch - 1) == '\r'))
- rlen++;
+ if (len > 0 && (*(pch - 1) == '\r') )
+ rlen ++;
StrBufSub(Target, Hdr->ReadBuf, 0, len - rlen);
StrBufCutLeft(Hdr->ReadBuf, len + 1);
return len - rlen;
}
}
- while (retval == 0) {
+ while (retval == 0) {
pch = NULL;
pchs = ChrPtr(Hdr->ReadBuf);
if (*pchs != '\0')
}
if (retval == 0) {
sleeeeeeeeeep(1);
- ntries++;
+ ntries ++;
}
if (ntries > 10)
return 0;
if ((retval > 0) && (pch != NULL)) {
rlen = 0;
len = pch - pchs;
- if (len > 0 && (*(pch - 1) == '\r'))
- rlen++;
+ if (len > 0 && (*(pch - 1) == '\r') )
+ rlen ++;
StrBufSub(Target, Hdr->ReadBuf, 0, len - rlen);
StrBufCutLeft(Hdr->ReadBuf, len + 1);
return len - rlen;
}
- else
+ else
return -1;
}
- else
+ else
#endif
- return StrBufTCP_read_buffered_line_fast(Target, Hdr->ReadBuf, &Hdr->Pos, &Hdr->http_sock, 5, 1, &Error);
+ return StrBufTCP_read_buffered_line_fast(Target,
+ Hdr->ReadBuf,
+ &Hdr->Pos,
+ &Hdr->http_sock,
+ 5,
+ 1,
+ &Error);
}
int s, i, b;
int ip_version = 6;
- retry:
+retry:
memset(&sin6, 0, sizeof(sin6));
memset(&sin4, 0, sizeof(sin4));
sin6.sin6_family = AF_INET6;
sin4.sin_family = AF_INET;
- if ((ip_addr == NULL) /* any IPv6 */
- ||(IsEmptyStr(ip_addr))
- || (!strcmp(ip_addr, "*"))
- ) {
+ if ( (ip_addr == NULL) /* any IPv6 */
+ || (IsEmptyStr(ip_addr))
+ || (!strcmp(ip_addr, "*"))
+ ) {
IsDefault = 1;
ip_version = 6;
sin6.sin6_addr = in6addr_any;
}
- else if (!strcmp(ip_addr, "0.0.0.0")) { /* any IPv4 */
+ else if (!strcmp(ip_addr, "0.0.0.0")) /* any IPv4 */
+ {
ip_version = 4;
sin4.sin_addr.s_addr = INADDR_ANY;
}
- else if ((strchr(ip_addr, '.')) && (!strchr(ip_addr, ':'))) { /* specific IPv4 */
+ else if ((strchr(ip_addr, '.')) && (!strchr(ip_addr, ':'))) /* specific IPv4 */
+ {
ip_version = 4;
if (inet_pton(AF_INET, ip_addr, &sin4.sin_addr) <= 0) {
syslog(LOG_WARNING, "Error binding to [%s] : %s\n", ip_addr, strerror(errno));
return (-WC_EXIT_BIND);
}
}
- else { /* specific IPv6 */
+ else /* specific IPv6 */
+ {
ip_version = 6;
if (inet_pton(AF_INET6, ip_addr, &sin6.sin6_addr) <= 0) {
syslog(LOG_WARNING, "Error binding to [%s] : %s\n", ip_addr, strerror(errno));
p = getprotobyname("tcp");
- s = socket(((ip_version == 6) ? PF_INET6 : PF_INET), SOCK_STREAM, (p->p_proto));
+ s = socket( ((ip_version == 6) ? PF_INET6 : PF_INET), SOCK_STREAM, (p->p_proto));
if (s < 0) {
- if (IsDefault && (errno == EAFNOSUPPORT)) {
+ if (IsDefault && (errno == EAFNOSUPPORT))
+ {
s = 0;
ip_addr = ipv4broadcast;
goto retry;
int actual_queue_len;
actual_queue_len = queue_len;
- if (actual_queue_len < 5)
- actual_queue_len = 5;
+ if (actual_queue_len < 5) actual_queue_len = 5;
i = unlink(sockpath);
if ((i != 0) && (errno != ENOENT)) {
- syslog(LOG_WARNING, "webcit: can't unlink %s: %s\n", sockpath, strerror(errno));
+ syslog(LOG_WARNING, "webcit: can't unlink %s: %s\n",
+ sockpath, strerror(errno));
return (-WC_EXIT_BIND);
}
return (-WC_EXIT_BIND);
}
- if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+ if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
syslog(LOG_WARNING, "webcit: Can't bind: %s\n", strerror(errno));
close(s);
return (-WC_EXIT_BIND);
}
chmod(sockpath, 0777);
- return (s);
+ return(s);
}
* 0 Request timed out.
* -1 Connection is broken, or other error.
*/
-int client_read_to(ParsedHttpHdrs * Hdr, StrBuf * Target, int bytes, int timeout) {
+int client_read_to(ParsedHttpHdrs *Hdr, StrBuf *Target, int bytes, int timeout) {
const char *Error;
int retval = 0;
if (StrLength(Hdr->ReadBuf) > 0) {
bufremain = StrLength(Hdr->ReadBuf) - (Hdr->Pos - ChrPtr(Hdr->ReadBuf));
-
+
if (bytes < bufremain)
bufremain = bytes;
StrBufAppendBufPlain(Target, Hdr->Pos, bufremain, 0);
}
if (bytes > bufremain) {
- while ((StrLength(Hdr->ReadBuf) + StrLength(Target) < bytes + baselen) && (retval >= 0))
+ while ((StrLength(Hdr->ReadBuf) + StrLength(Target) < bytes + baselen) &&
+ (retval >= 0))
retval = client_read_sslbuffer(Hdr->ReadBuf, timeout);
if (retval >= 0) {
- StrBufAppendBuf(Target, Hdr->ReadBuf, 0); /* todo: Buf > bytes? */
+ StrBufAppendBuf(Target, Hdr->ReadBuf, 0); /* todo: Buf > bytes? */
return 1;
}
else {
return -1;
}
}
- else
+ else
return 1;
}
#endif
- retval = StrBufReadBLOBBuffered(Target, Hdr->ReadBuf, &Hdr->Pos, &Hdr->http_sock, 1, bytes, O_TERM, &Error);
+ retval = StrBufReadBLOBBuffered(Target,
+ Hdr->ReadBuf,
+ &Hdr->Pos,
+ &Hdr->http_sock,
+ 1,
+ bytes,
+ O_TERM,
+ &Error);
if (retval < 0) {
syslog(LOG_INFO, "client_read() failed: %s\n", Error);
wc_backtrace(LOG_DEBUG);
/*
* Begin buffering HTTP output so we can transmit it all in one write operation later.
*/
-void begin_burst(void) {
+void begin_burst(void)
+{
if (WC->WBuf == NULL) {
WC->WBuf = NewStrBufPlain(NULL, 32768);
}
/*
* Finish buffering HTTP output. [Compress using zlib and] output with a Content-Length: header.
*/
-long end_burst(void) {
- const char *ptr, *eptr;
- long count;
+long end_burst(void)
+{
+ const char *ptr, *eptr;
+ long count;
ssize_t res = 0;
- fd_set wset;
- int fdflags;
+ fd_set wset;
+ int fdflags;
- if (!DisableGzip && (WC->Hdr->HR.gzip_ok)) {
+ if (!DisableGzip && (WC->Hdr->HR.gzip_ok))
+ {
if (CompressBuffer(WC->WBuf) > 0)
hprintf("Content-encoding: gzip\r\n");
else {
fdflags = fcntl(WC->Hdr->http_sock, F_GETFL);
while ((ptr < eptr) && (WC->Hdr->http_sock != -1)) {
- if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
- FD_ZERO(&wset);
- FD_SET(WC->Hdr->http_sock, &wset);
- if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
- syslog(LOG_DEBUG, "client_write: Socket select failed (%s)\n", strerror(errno));
- return -1;
- }
- }
-
- if ((WC->Hdr->http_sock == -1) || (res = write(WC->Hdr->http_sock, ptr, count)) == -1) {
- syslog(LOG_DEBUG, "client_write: Socket write failed (%s)\n", strerror(errno));
- wc_backtrace(LOG_INFO);
- return res;
- }
- count -= res;
+ if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
+ FD_ZERO(&wset);
+ FD_SET(WC->Hdr->http_sock, &wset);
+ if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
+ syslog(LOG_DEBUG, "client_write: Socket select failed (%s)\n", strerror(errno));
+ return -1;
+ }
+ }
+
+ if ((WC->Hdr->http_sock == -1) ||
+ (res = write(WC->Hdr->http_sock,
+ ptr,
+ count)) == -1) {
+ syslog(LOG_DEBUG, "client_write: Socket write failed (%s)\n", strerror(errno));
+ wc_backtrace(LOG_INFO);
+ return res;
+ }
+ count -= res;
ptr += res;
- }
+ }
ptr = ChrPtr(WC->WBuf);
count = StrLength(WC->WBuf);
eptr = ptr + count;
- while ((ptr < eptr) && (WC->Hdr->http_sock != -1)) {
- if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
- FD_ZERO(&wset);
- FD_SET(WC->Hdr->http_sock, &wset);
- if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
- syslog(LOG_INFO, "client_write: Socket select failed (%s)\n", strerror(errno));
- return -1;
- }
- }
-
- if ((WC->Hdr->http_sock == -1) || (res = write(WC->Hdr->http_sock, ptr, count)) == -1) {
- syslog(LOG_INFO, "client_write: Socket write failed (%s)\n", strerror(errno));
+ while ((ptr < eptr) && (WC->Hdr->http_sock != -1)) {
+ if ((fdflags & O_NONBLOCK) == O_NONBLOCK) {
+ FD_ZERO(&wset);
+ FD_SET(WC->Hdr->http_sock, &wset);
+ if (select(WC->Hdr->http_sock + 1, NULL, &wset, NULL, NULL) == -1) {
+ syslog(LOG_INFO, "client_write: Socket select failed (%s)\n", strerror(errno));
+ return -1;
+ }
+ }
+
+ if ((WC->Hdr->http_sock == -1) ||
+ (res = write(WC->Hdr->http_sock,
+ ptr,
+ count)) == -1) {
+ syslog(LOG_INFO, "client_write: Socket write failed (%s)\n", strerror(errno));
wc_backtrace(LOG_INFO);
- return res;
- }
- count -= res;
+ return res;
+ }
+ count -= res;
ptr += res;
- }
+ }
return StrLength(WC->WBuf);
}
* lingering_close() a`la Apache. see
* http://httpd.apache.org/docs/2.0/misc/fin_wait_2.html for rationale
*/
-int lingering_close(int fd) {
+int lingering_close(int fd)
+{
char buf[SIZ];
int i;
fd_set set;
return close(fd);
}
-void HttpNewModule_TCPSOCKETS(ParsedHttpHdrs * httpreq) {
+void
+HttpNewModule_TCPSOCKETS
+(ParsedHttpHdrs *httpreq)
+{
httpreq->ReadBuf = NewStrBufPlain(NULL, SIZ * 4);
}
-void HttpDetachModule_TCPSOCKETS(ParsedHttpHdrs * httpreq) {
+void
+HttpDetachModule_TCPSOCKETS
+(ParsedHttpHdrs *httpreq)
+{
FlushStrBuf(httpreq->ReadBuf);
ReAdjustEmptyBuf(httpreq->ReadBuf, 4 * SIZ, SIZ);
}
-void HttpDestroyModule_TCPSOCKETS(ParsedHttpHdrs * httpreq) {
+void
+HttpDestroyModule_TCPSOCKETS
+(ParsedHttpHdrs *httpreq)
+{
FreeStrBuf(&httpreq->ReadBuf);
}
-void SessionNewModule_TCPSOCKETS(wcsession * sess) {
+void
+SessionNewModule_TCPSOCKETS
+(wcsession *sess)
+{
sess->CLineBuf = NewStrBuf();
sess->MigrateReadLineBuf = NewStrBuf();
}
-void SessionDestroyModule_TCPSOCKETS(wcsession * sess) {
+void
+SessionDestroyModule_TCPSOCKETS
+(wcsession *sess)
+{
FreeStrBuf(&sess->CLineBuf);
FreeStrBuf(&sess->ReadBuf);
sess->connected = 0;