Use IOBuffer with its StrBuf + const char* inside instead of having two of them
authorWilfried Goesgens <dothebart@citadel.org>
Sat, 2 Apr 2011 09:26:07 +0000 (11:26 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Sat, 2 Apr 2011 09:26:07 +0000 (11:26 +0200)
citadel/clientsocket.c
citadel/context.c
citadel/context.h
citadel/modules/clamav/serv_virus.c
citadel/modules/crypto/serv_crypto.c
citadel/modules/network/serv_network.c
citadel/modules/pop3client/serv_pop3client.c
citadel/modules/spam/serv_spam.c
citadel/sysdep.c

index 594b5eb9664d969e8f8b2988e66a2909b9e99439..49cfd54ef7c68fa03b590aad4347549e13213ea5 100644 (file)
@@ -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,
index 5d29ce6f6d2e6fa60469c3d81a34871d61e08680..ad4332160d7f7d1e3230dfeb52e693ecb8e20fb8 100644 (file)
@@ -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;
index 3b05a2b0d8a7dd1659cdea2eeae93685f0208669..3c47c62c39b3bd98afa83d201c345d1efd9f92a1 100644 (file)
@@ -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? */
index e31638aee42a5935d4f67b2b754537eae6afe9af..e57435cb793beea6951b847d303f49f2948518cc 100644 (file)
@@ -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);
 }
index e10cb79f0b489978622bed6d7f8edbe4bab08756..66693a7927c8669737bf3b83597c7499b72ee4d2 100644 (file)
@@ -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;
        
                }
index 1df6dfd6f47d7a0f91aec88787330637a4e60fc5..300b1b6bc37aaaffac17d18a94caebcc446f2951 100644 (file)
@@ -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);
index 0b2eb99be648be621704b725f3313e757d2e8a76..40add14844bc815ec0486c27debf7b634bf9e8ac 100644 (file)
@@ -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)
index be829829856e658dce582638243d9b8e7ac1921d..ad81f1217b3b650625ce8199d069a07c116c0591 100644 (file)
@@ -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);
 }
index 8ead78e0a65b08e63b90653a874d459f19d20e51..8715bc6802dbb9d14e6bf4f860df937d508f123d 100644 (file)
@@ -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;
 /*