From a4d24b8434d3e7177cb40db063cfa8c39f6379be Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 2 Apr 2011 11:26:07 +0200 Subject: [PATCH] Use IOBuffer with its StrBuf + const char* inside instead of having two of them --- citadel/clientsocket.c | 8 +-- citadel/context.c | 4 +- citadel/context.h | 10 +-- citadel/modules/clamav/serv_virus.c | 8 +-- citadel/modules/crypto/serv_crypto.c | 38 +++++------ citadel/modules/network/serv_network.c | 6 +- citadel/modules/pop3client/serv_pop3client.c | 6 +- citadel/modules/spam/serv_spam.c | 6 +- citadel/sysdep.c | 69 ++++++++++---------- 9 files changed, 78 insertions(+), 77 deletions(-) diff --git a/citadel/clientsocket.c b/citadel/clientsocket.c index 594b5eb96..49cfd54ef 100644 --- a/citadel/clientsocket.c +++ b/citadel/clientsocket.c @@ -136,8 +136,8 @@ int socket_read_blob(int *Socket, StrBuf * Target, int bytes, int timeout) retval = StrBufReadBLOBBuffered(Target, - CCC->sReadBuf, - &CCC->sPos, + CCC->SBuf.Buf, + &CCC->SBuf.ReadWritePointer, Socket, 1, bytes, O_TERM, &Error); if (retval < 0) { CtdlLogPrintf(CTDL_CRIT, @@ -155,8 +155,8 @@ int CtdlSockGetLine(int *sock, StrBuf * Target, int nSec) FlushStrBuf(Target); rc = StrBufTCP_read_buffered_line_fast(Target, - CCC->sReadBuf, - &CCC->sPos, + CCC->SBuf.Buf, + &CCC->SBuf.ReadWritePointer, sock, nSec, 1, &Error); if ((rc < 0) && (Error != NULL)) CtdlLogPrintf(CTDL_CRIT, diff --git a/citadel/context.c b/citadel/context.c index 5d29ce6f6..ad4332160 100644 --- a/citadel/context.c +++ b/citadel/context.c @@ -361,7 +361,7 @@ void RemoveContext (CitContext *con) } FreeStrBuf(&con->MigrateBuf); - FreeStrBuf(&con->ReadBuf); + FreeStrBuf(&con->RecvBuf.Buf); CtdlLogPrintf(CTDL_DEBUG, "Done with RemoveContext()\n"); } @@ -397,7 +397,7 @@ CitContext *CreateNewContext(void) { * the list. */ me->MigrateBuf = NewStrBuf(); - me->ReadBuf = NewStrBuf(); + me->RecvBuf.Buf = NewStrBuf(); begin_critical_section(S_SESSION_TABLE); me->cs_pid = ++next_pid; me->prev = NULL; diff --git a/citadel/context.h b/citadel/context.h index 3b05a2b0d..3c47c62c3 100644 --- a/citadel/context.h +++ b/citadel/context.h @@ -27,13 +27,13 @@ struct CitContext { int state; /* thread state (see CON_ values below) */ int kill_me; /* Set to nonzero to flag for termination */ - const char *Pos; /* Our read position inside of the ReadBuf */ - StrBuf *ReadBuf; /* Our block buffered read buffer */ - StrBuf *MigrateBuf; /* Our block buffered read buffer */ + IOBuffer SendBuf, /* Our write Buffer */ + RecvBuf, /* Our block buffered read buffer */ + SBuf; /* Our block buffered read buffer for clients */ - const char *sPos; /* Our read position inside of the ReadBuf */ - StrBuf *sReadBuf; /* Our block buffered read buffer */ + StrBuf *MigrateBuf; /* Our block buffered read buffer */ StrBuf *sMigrateBuf; /* Our block buffered read buffer */ + int client_socket; int is_local_socket; /* set to 1 if client is on unix domain sock */ /* Redirect this session's output to a memory buffer? */ diff --git a/citadel/modules/clamav/serv_virus.c b/citadel/modules/clamav/serv_virus.c index e31638aee..e57435cb7 100644 --- a/citadel/modules/clamav/serv_virus.c +++ b/citadel/modules/clamav/serv_virus.c @@ -115,9 +115,9 @@ int clamd(struct CtdlMessage *msg) { return(0); } CCC=CC; - CCC->sReadBuf = NewStrBuf(); + CCC->SBuf.Buf = NewStrBuf(); CCC->sMigrateBuf = NewStrBuf(); - CCC->sPos = NULL; + CCC->SBuf.ReadWritePointer = NULL; /* Command */ CtdlLogPrintf(CTDL_DEBUG, "Transmitting STREAM command\n"); @@ -144,7 +144,7 @@ int clamd(struct CtdlMessage *msg) { /* If the service isn't running, just pass the mail * through. Potentially throwing away mails isn't good. */ - FreeStrBuf(&CCC->sReadBuf); + FreeStrBuf(&CCC->SBuf.Buf); FreeStrBuf(&CCC->sMigrateBuf); return(0); } @@ -187,7 +187,7 @@ int clamd(struct CtdlMessage *msg) { } bail: close(sock); - FreeStrBuf(&CCC->sReadBuf); + FreeStrBuf(&CCC->SBuf.Buf); FreeStrBuf(&CCC->sMigrateBuf); return(is_virus); } diff --git a/citadel/modules/crypto/serv_crypto.c b/citadel/modules/crypto/serv_crypto.c index e10cb79f0..66693a792 100644 --- a/citadel/modules/crypto/serv_crypto.c +++ b/citadel/modules/crypto/serv_crypto.c @@ -565,59 +565,59 @@ int client_read_sslblob(StrBuf *Target, long bytes, int timeout) baselen = StrLength(Target); - if (StrLength(CCC->ReadBuf) > 0) + if (StrLength(CCC->RecvBuf.Buf) > 0) { long RemainLen; long TotalLen; const char *pchs; - if (CCC->Pos == NULL) - CCC->Pos = ChrPtr(CCC->ReadBuf); - pchs = ChrPtr(CCC->ReadBuf); - TotalLen = StrLength(CCC->ReadBuf); - RemainLen = TotalLen - (pchs - CCC->Pos); + if (CCC->RecvBuf.ReadWritePointer == NULL) + CCC->RecvBuf.ReadWritePointer = ChrPtr(CCC->RecvBuf.Buf); + pchs = ChrPtr(CCC->RecvBuf.Buf); + TotalLen = StrLength(CCC->RecvBuf.Buf); + RemainLen = TotalLen - (pchs - CCC->RecvBuf.ReadWritePointer); if (RemainLen > bytes) RemainLen = bytes; if (RemainLen > 0) { StrBufAppendBufPlain(Target, - CCC->Pos, + CCC->RecvBuf.ReadWritePointer, RemainLen, 0); - CCC->Pos += RemainLen; + CCC->RecvBuf.ReadWritePointer += RemainLen; } - if ((ChrPtr(CCC->ReadBuf) + StrLength(CCC->ReadBuf)) <= CCC->Pos) + if ((ChrPtr(CCC->RecvBuf.Buf) + StrLength(CCC->RecvBuf.Buf)) <= CCC->RecvBuf.ReadWritePointer) { - CCC->Pos = NULL; - FlushStrBuf(CCC->ReadBuf); + CCC->RecvBuf.ReadWritePointer = NULL; + FlushStrBuf(CCC->RecvBuf.Buf); } } if (StrLength(Target) >= bytes + baselen) return 1; - CCC->Pos = NULL; + CCC->RecvBuf.ReadWritePointer = NULL; while ((StrLength(Target) < bytes + baselen) && (retval >= 0)) { - retval = client_read_sslbuffer(CCC->ReadBuf, timeout); + retval = client_read_sslbuffer(CCC->RecvBuf.Buf, timeout); if (retval >= 0) { RemainRead = bytes - (StrLength (Target) - baselen); - if (RemainRead < StrLength(CCC->ReadBuf)) + if (RemainRead < StrLength(CCC->RecvBuf.Buf)) { StrBufAppendBufPlain( Target, - ChrPtr(CCC->ReadBuf), + ChrPtr(CCC->RecvBuf.Buf), RemainRead, 0); - CCC->Pos = ChrPtr(CCC->ReadBuf) + RemainRead; + CCC->RecvBuf.ReadWritePointer = ChrPtr(CCC->RecvBuf.Buf) + RemainRead; break; } - StrBufAppendBuf(Target, CCC->ReadBuf, 0); /* todo: Buf > bytes? */ - FlushStrBuf(CCC->ReadBuf); + StrBufAppendBuf(Target, CCC->RecvBuf.Buf, 0); /* todo: Buf > bytes? */ + FlushStrBuf(CCC->RecvBuf.Buf); } else { - FlushStrBuf(CCC->ReadBuf); + FlushStrBuf(CCC->RecvBuf.Buf); return -1; } diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index 1df6dfd6f..300b1b6bc 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -2180,9 +2180,9 @@ void network_poll_node(char *node, char *secret, char *host, char *port) { } CtdlLogPrintf(CTDL_DEBUG, "Connected!\n"); - CCC->sReadBuf = NewStrBuf(); + CCC->SBuf.Buf = NewStrBuf(); CCC->sMigrateBuf = NewStrBuf(); - CCC->sPos = NULL; + CCC->SBuf.ReadWritePointer = NULL; /* Read the server greeting */ if (sock_getln(&sock, buf, sizeof buf) < 0) goto bail; @@ -2219,7 +2219,7 @@ void network_poll_node(char *node, char *secret, char *host, char *port) { sock_puts(&sock, "QUIT"); bail: - FreeStrBuf(&CCC->sReadBuf); + FreeStrBuf(&CCC->SBuf.Buf); FreeStrBuf(&CCC->sMigrateBuf); if (sock != -1) sock_close(sock); diff --git a/citadel/modules/pop3client/serv_pop3client.c b/citadel/modules/pop3client/serv_pop3client.c index 0b2eb99be..40add1484 100644 --- a/citadel/modules/pop3client/serv_pop3client.c +++ b/citadel/modules/pop3client/serv_pop3client.c @@ -98,9 +98,9 @@ void pop3_do_fetching(char *roomname, char *pop3host, char *pop3user, char *pop3 goto bail; CtdlLogPrintf(CTDL_DEBUG, "Connected!\n"); - CCC->sReadBuf = NewStrBuf(); + CCC->SBuf.Buf = NewStrBuf(); CCC->sMigrateBuf = NewStrBuf(); - CCC->sPos = NULL; + CCC->SBuf.ReadWritePointer = NULL; /* Read the server greeting */ if (sock_getln(&sock, buf, sizeof buf) < 0) goto bail; @@ -245,7 +245,7 @@ void pop3_do_fetching(char *roomname, char *pop3host, char *pop3user, char *pop3 if (sock_getln(&sock, buf, sizeof buf) < 0) goto bail; CtdlLogPrintf(CTDL_DEBUG, ">%s\n", buf); bail: - FreeStrBuf(&CCC->sReadBuf); + FreeStrBuf(&CCC->SBuf.Buf); FreeStrBuf(&CCC->sMigrateBuf); if (sock != -1) diff --git a/citadel/modules/spam/serv_spam.c b/citadel/modules/spam/serv_spam.c index be8298298..ad81f1217 100644 --- a/citadel/modules/spam/serv_spam.c +++ b/citadel/modules/spam/serv_spam.c @@ -104,9 +104,9 @@ int spam_assassin(struct CtdlMessage *msg) { return(0); } - CCC->sReadBuf = NewStrBuf(); + CCC->SBuf.Buf = NewStrBuf(); CCC->sMigrateBuf = NewStrBuf(); - CCC->sPos = NULL; + CCC->SBuf.ReadWritePointer = NULL; /* Command */ CtdlLogPrintf(CTDL_DEBUG, "Transmitting command\n"); @@ -188,7 +188,7 @@ int spam_assassin(struct CtdlMessage *msg) { } bail: close(sock); - FreeStrBuf(&CCC->sReadBuf); + FreeStrBuf(&CCC->SBuf.Buf); FreeStrBuf(&CCC->sMigrateBuf); return(is_spam); } diff --git a/citadel/sysdep.c b/citadel/sysdep.c index 8ead78e0a..8715bc680 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -495,7 +495,7 @@ static void flush_client_inbuf(void) CitContext *CCC=CC; FlushStrBuf(CCC->ReadBuf); - CCC->Pos = NULL; + CCC->RecvBuf->ReadWritePointer = NULL; } */ @@ -694,8 +694,8 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) fclose(fd); #endif retval = StrBufReadBLOBBuffered(Target, - CCC->ReadBuf, - &CCC->Pos, + CCC->RecvBuf.Buf, + &CCC->RecvBuf.ReadWritePointer, &CCC->client_socket, 1, bytes, @@ -731,8 +731,9 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) */ void client_set_inbound_buf(long N) { - FlushStrBuf(CC->ReadBuf); - ReAdjustEmptyBuf(CC->ReadBuf, N * SIZ, N * SIZ); + CitContext *CCC=CC; + FlushStrBuf(CCC->RecvBuf.Buf); + ReAdjustEmptyBuf(CCC->RecvBuf.Buf, N * SIZ, N * SIZ); } int client_read_random_blob(StrBuf *Target, int timeout) @@ -746,18 +747,18 @@ int client_read_random_blob(StrBuf *Target, int timeout) long len; const char *pch; - len = StrLength(CCC->ReadBuf); - pch = ChrPtr(CCC->ReadBuf); + len = StrLength(CCC->RecvBuf.Buf); + pch = ChrPtr(CCC->RecvBuf.Buf); if (len > 0) { - if (CCC->Pos != NULL) { - len -= CCC->Pos - pch; - pch = CCC->Pos; + if (CCC->RecvBuf.ReadWritePointer != NULL) { + len -= CCC->RecvBuf.ReadWritePointer - pch; + pch = CCC->RecvBuf.ReadWritePointer; } StrBufAppendBufPlain(Target, pch, len, 0); - FlushStrBuf(CCC->ReadBuf); - CCC->Pos = NULL; + FlushStrBuf(CCC->RecvBuf.Buf); + CCC->RecvBuf.ReadWritePointer = NULL; #ifdef BIGBAD_IODBG { int rv = 0; @@ -810,8 +811,8 @@ int client_read_to(char *buf, int bytes, int timeout) int HaveMoreLinesWaiting(CitContext *CCC) { if ((CCC->kill_me == 1) || ( - (CCC->Pos == NULL) && - (StrLength(CCC->ReadBuf) == 0) && + (CCC->RecvBuf.ReadWritePointer == NULL) && + (StrLength(CCC->RecvBuf.Buf) == 0) && (CCC->client_socket != -1)) ) return 0; else @@ -850,10 +851,10 @@ int CtdlClientGetLine(StrBuf *Target) snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid); fd = fopen(fn, "a+"); - pch = ChrPtr(CCC->ReadBuf); - len = StrLength(CCC->ReadBuf); - if (CCC->Pos != NULL) - rlen = CC->Pos - pch; + pch = ChrPtr(CCC->RecvBuf.Buf); + len = StrLength(CCC->RecvBuf.Buf); + if (CCC->RecvBuf.ReadWritePointer != NULL) + rlen = CCC->RecvBuf.ReadWritePointer - pch; else rlen = 0; @@ -864,14 +865,14 @@ int CtdlClientGetLine(StrBuf *Target) len, rlen); #endif rc = client_readline_sslbuffer(Target, - CCC->ReadBuf, - &CCC->Pos, + CCC->RecvBuf.Buf, + &CCC->RecvBuf.ReadWritePointer, 1); #ifdef BIGBAD_IODBG - pch = ChrPtr(CCC->ReadBuf); - nlen = StrLength(CCC->ReadBuf); - if (CCC->Pos != NULL) - nrlen = CC->Pos - pch; + pch = ChrPtr(CCC->RecvBuf.Buf); + nlen = StrLength(CCC->RecvBuf.Buf); + if (CCC->RecvBuf.ReadWritePointer != NULL) + nrlen = CCC->RecvBuf.ReadWritePointer - pch; else nrlen = 0; /* @@ -904,10 +905,10 @@ int CtdlClientGetLine(StrBuf *Target) snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid); fd = fopen(fn, "a+"); - pch = ChrPtr(CCC->ReadBuf); - len = StrLength(CCC->ReadBuf); - if (CCC->Pos != NULL) - rlen = CC->Pos - pch; + pch = ChrPtr(CCC->RecvBuf.Buf); + len = StrLength(CCC->RecvBuf.Buf); + if (CCC->RecvBuf.ReadWritePointer != NULL) + rlen = CCC->RecvBuf.ReadWritePointer - pch; else rlen = 0; @@ -918,18 +919,18 @@ int CtdlClientGetLine(StrBuf *Target) len, rlen); #endif rc = StrBufTCP_read_buffered_line_fast(Target, - CCC->ReadBuf, - &CCC->Pos, + CCC->RecvBuf.Buf, + &CCC->RecvBuf.ReadWritePointer, &CCC->client_socket, 5, 1, &Error); #ifdef BIGBAD_IODBG - pch = ChrPtr(CCC->ReadBuf); - nlen = StrLength(CCC->ReadBuf); - if (CCC->Pos != NULL) - nrlen = CC->Pos - pch; + pch = ChrPtr(CCC->RecvBuf.Buf); + nlen = StrLength(CCC->RecvBuf.Buf); + if (CCC->RecvBuf.ReadWritePointer != NULL) + nrlen = CCC->RecvBuf.ReadWritePointer - pch; else nrlen = 0; /* -- 2.30.2