extern HashList *InboundEventQueue;
extern struct ev_loop *event_base;
-#define SEND_EVENT 1
-#define RECV_EVENT 2
int QueueEventContext(void *Ctx, AsyncIO *IO, EventContextAttach CB)
{
void ShutDownCLient(AsyncIO *IO)
{
CtdlLogPrintf(CTDL_DEBUG, "EVENT x %d\n", IO->sock);
- switch (IO->active_event) {
- case SEND_EVENT:
+
+ if (IO->sock != 0)
+ {
ev_io_stop(event_base, &IO->send_event);
- break;
- case RECV_EVENT:
ev_io_stop(event_base, &IO->recv_event);
- break;
- case 0:
- // no event active here; just bail out.
- break;
+ close(IO->sock);
+ IO->sock = 0;
+ IO->SendBuf.fd = 0;
+ IO->RecvBuf.fd = 0;
}
- IO->active_event = 0;
IO->Terminate(IO->Data);
}
if (Finished != eMustReadMore) {
ev_io_stop(event_base, &IO->recv_event);
- IO->active_event = 0;
IO->NextState = IO->ReadDone(IO->Data);
Finished = StrBufCheckBuffer(&IO->RecvBuf);
}
{
IO->NextState = IO->SendDone(IO->Data);
ev_io_start(event_base, &IO->send_event);
-
- IO->active_event = SEND_EVENT;
-
}
else if ((IO->NextState == eTerminateConnection) ||
(IO->NextState == eAbort) )
}
#endif
ev_io_stop(event_base, &IO->send_event);
- IO->active_event = 0;
switch (IO->NextState) {
case eSendReply:
break;
ShutDownCLient(IO);
else {
ev_io_start(event_base, &IO->send_event);
-
- IO->active_event = SEND_EVENT;
}
break;
case eReadMessage:
}
else {
ev_io_start(event_base, &IO->recv_event);
-
- IO->active_event = RECV_EVENT;
}
break;
switch(IO->NextState) {
case eReadMessage:
ev_io_start(event_base, &IO->recv_event);
- IO->active_event = RECV_EVENT;
break;
case eSendReply:
case eSendMore:
IO_connfail_callback,
conn_timeout, 0);
IO->conn_fail.data = IO;
+ ev_timer_start(event_base, &IO->conn_fail);
return 0;
}
IO->ReadDone = ReadDone;
IO->Terminate = Terminate;
IO->LineReader = LineReader;
+ IO->ConnFail = ConnFail;
if (ReadFirst) {
IO->NextState = eReadMessage;
eMaxSMTPC
} eSMTP_C_States;
-const long SMTP_C_ConnTimeout = 300; /* wail 5 minutes for connections... */
+const long SMTP_C_ConnTimeout = 60; /* wail 1 minute for connections... */
const long SMTP_C_ReadTimeouts[eMaxSMTPC] = {
90, /* Greeting... */
30, /* EHLO */
RemoveQItem(Msg->MyQItem);
}
-
- close(Msg->IO.sock);
DeleteSmtpOutMsg(Msg);
}
void get_one_mx_host_ip_done(void *Ctx,
- int status,
- int timeouts,
- struct hostent *hostent)
+ int status,
+ int timeouts,
+ struct hostent *hostent)
{
AsyncIO *IO = Ctx;
SmtpOutMsg *SendMsg = IO->Data;
/*****************************************************************************/
eNextState SMTP_C_Terminate(void *Data)
{
- SmtpOutMsg *pMsg = Data;
+ AsyncIO *IO = Data;
+ SmtpOutMsg *pMsg = IO->Data;
FinalizeMessageSend(pMsg);
return 0;
}
eNextState SMTP_C_Timeout(void *Data)
{
- SmtpOutMsg *pMsg = Data;
+ AsyncIO *IO = Data;
+ SmtpOutMsg *pMsg = IO->Data;
FinalizeMessageSend(pMsg);
return 0;
}
eNextState SMTP_C_ConnFail(void *Data)
{
- SmtpOutMsg *pMsg = Data;
+ AsyncIO *IO = Data;
+ SmtpOutMsg *pMsg = IO->Data;
FinalizeMessageSend(pMsg);
return 0;
}