while ((Finished == eBufferNotEmpty) &&
((IO->NextState == eReadMessage)||
(IO->NextState == eReadMore)||
+ (IO->NextState == eReadFile)||
(IO->NextState == eReadPayload)))
{
if (IO->RecvBuf.nBlobBytesWanted != 0) {
}
else { /* Reading lines... */
//// lex line reply in callback, or do it ourselves. as nnn-blabla means continue reading in SMTP
- if (IO->LineReader)
+ if ((IO->NextState == eReadFile) &&
+ (Finished == eBufferNotEmpty))
+ {
+ Finished = WriteIOBAlreadyRead(&IO->IOB, &Err);
+ if (Finished == eReadSuccess)
+ {
+ IO->NextState = eSendReply;
+ }
+ }
+ else if (IO->LineReader)
Finished = IO->LineReader(IO);
else
Finished = StrBufChunkSipLine(IO->IOBuf, &IO->RecvBuf);
ev_io_stop(event_base, &IO->recv_event);
IO->NextState = IO->ReadDone(IO);
Finished = StrBufCheckBuffer(&IO->RecvBuf);
- if ((IO->NextState == eReadFile) &&
- (Finished == eBufferNotEmpty))
- {
- Finished = WriteIOBAlreadyRead(&IO->IOB, &Err);
- if (Finished == eReadSuccess)
- {
- IO->NextState = eSendReply;
- }
- }
}
}
IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents)
{
const char *errmsg;
- long rc;
ssize_t nbytes;
AsyncIO *IO = watcher->data;
switch (IO->NextState) {
case eReadFile:
- rc = FileRecvChunked(&IO->IOB, &errmsg);
- if (rc < 0)
+ nbytes = FileRecvChunked(&IO->IOB, &errmsg);
+ syslog(LOG_DEBUG, "****************nbytes: %ld ChunkRemain: %ldx.\n",
+ nbytes, IO->IOB.ChunkSendRemain);
+ if (nbytes < 0)
StrBufPlain(IO->ErrMsg, errmsg, -1);
+ else
+ {
+ if (IO->IOB.ChunkSendRemain == 0)
+ {
+ IO->NextState = eSendReply;
+ syslog(LOG_DEBUG, "***********************************xxxx.\n");
+ }
+ else
+ return;
+ }
break;
default:
nbytes = StrBuf_read_one_chunk_callback(watcher->fd, 0 /*TODO */, &IO->RecvBuf);
break;
}
+
#ifdef BIGBAD_IODBG
{
int rv = 0;
syslog(LOG_DEBUG,
"EVENT: Socket Invalid! %s \n",
strerror(errno));
+ ShutDownCLient(IO);
return;
}
}
syslog(LOG_DEBUG, "event: %s\n", __FUNCTION__);
become_session(IO->CitContext);
assert(IO->DNSFail);
+ assert(IO->DNSQuery->PostDNS);
switch (IO->DNSQuery->PostDNS(IO))
{
case eAbort: