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,
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,
}
FreeStrBuf(&con->MigrateBuf);
- FreeStrBuf(&con->ReadBuf);
+ FreeStrBuf(&con->RecvBuf.Buf);
CtdlLogPrintf(CTDL_DEBUG, "Done with RemoveContext()\n");
}
* 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;
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? */
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");
/* 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);
}
}
bail: close(sock);
- FreeStrBuf(&CCC->sReadBuf);
+ FreeStrBuf(&CCC->SBuf.Buf);
FreeStrBuf(&CCC->sMigrateBuf);
return(is_virus);
}
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;
}
}
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;
sock_puts(&sock, "QUIT");
bail:
- FreeStrBuf(&CCC->sReadBuf);
+ FreeStrBuf(&CCC->SBuf.Buf);
FreeStrBuf(&CCC->sMigrateBuf);
if (sock != -1)
sock_close(sock);
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;
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)
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");
}
bail: close(sock);
- FreeStrBuf(&CCC->sReadBuf);
+ FreeStrBuf(&CCC->SBuf.Buf);
FreeStrBuf(&CCC->sMigrateBuf);
return(is_spam);
}
CitContext *CCC=CC;
FlushStrBuf(CCC->ReadBuf);
- CCC->Pos = NULL;
+ CCC->RecvBuf->ReadWritePointer = NULL;
}
*/
fclose(fd);
#endif
retval = StrBufReadBLOBBuffered(Target,
- CCC->ReadBuf,
- &CCC->Pos,
+ CCC->RecvBuf.Buf,
+ &CCC->RecvBuf.ReadWritePointer,
&CCC->client_socket,
1,
bytes,
*/
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)
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;
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
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;
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;
/*
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;
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;
/*