From 869c309f23d4dfdf72681ae921e23b98a632a5d1 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 8 Jan 2011 11:41:56 +0100 Subject: [PATCH] libev migration - libevent doesn't require a special async connect mechanic, remove it. --- citadel/event_client.c | 44 +++------------------ citadel/event_client.h | 6 +-- citadel/modules/smtp/serv_smtpeventclient.c | 11 ++++++ 3 files changed, 18 insertions(+), 43 deletions(-) diff --git a/citadel/event_client.c b/citadel/event_client.c index c923e5fe6..2cf6dcea9 100644 --- a/citadel/event_client.c +++ b/citadel/event_client.c @@ -74,7 +74,6 @@ extern struct ev_loop *event_base; #define SEND_EVENT 1 #define RECV_EVENT 2 -#define CONN_EVENT 3 int QueueEventContext(void *Ctx, AsyncIO *IO, EventContextAttach CB) { @@ -155,9 +154,6 @@ void ShutDownCLient(AsyncIO *IO) case RECV_EVENT: ev_io_stop(event_base, &IO->recv_event); break; - case CONN_EVENT: - ev_io_stop(event_base, &IO->conn_event); - break; case 0: // no event active here; just bail out. break; @@ -339,10 +335,8 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents) static void -set_start_callback(struct ev_loop *loop, ev_io *watcher, int revents) +set_start_callback(struct ev_loop *loop, AsyncIO *IO, int revents) { - AsyncIO *IO = watcher->data; - switch(IO->NextState) { case eReadMessage: ev_io_start(event_base, &IO->recv_event); @@ -350,7 +344,7 @@ set_start_callback(struct ev_loop *loop, ev_io *watcher, int revents) break; case eSendReply: case eSendMore: - IO_send_callback(loop, watcher, revents); + IO_send_callback(loop, &IO->send_event, revents); break; case eTerminateConnection: case eAbort: @@ -359,16 +353,6 @@ set_start_callback(struct ev_loop *loop, ev_io *watcher, int revents) } } -static void -IO_connect_callback(struct ev_loop *loop, ev_io *watcher, int revents) -{ - AsyncIO *IO = watcher->data; - - ev_io_stop(event_base, &IO->conn_event); - IO->active_event = 0; - set_start_callback(loop, watcher, revents); -} - int event_connect_socket(AsyncIO *IO) { int fdflags; @@ -429,30 +413,12 @@ IO->curr_ai->ai_family, /// TODO: ipv6?? (IO->HEnt->h_addrtype == AF_INET6)? /* sizeof(in6_addr):*/ sizeof(struct sockaddr_in)); - if (rc >= 0) { + if ((rc >= 0) || (errno == EINPROGRESS)){ //// freeaddrinfo(res); - ev_io_init(&IO->conn_event, IO_send_callback, IO->sock, EV_WRITE); - IO->conn_event.data = IO; - set_start_callback(event_base, &IO->conn_event, 0); + set_start_callback(event_base, IO, 0); return 0; } - else if (errno == EINPROGRESS) { - ev_io_init(&IO->conn_event, IO_connect_callback, IO->sock, EV_WRITE); - IO->conn_event.data = IO; -/* TODO - - event_set(&IO->conn_event, - IO->sock, - EV_READ|EV_WRITE|EV_PERSIST, - IO_connect_callback, - IO); -*/ - ev_io_start(event_base, &IO->conn_event); - - IO->active_event = CONN_EVENT; - return 1; - } else { CtdlLogPrintf(CTDL_ERR, "connect() failed: %s\n", strerror(errno)); StrBufPrintf(IO->ErrMsg, "Failed to connect: %s", strerror(errno)); @@ -480,7 +446,7 @@ void InitEventIO(AsyncIO *IO, IO->ReadDone = ReadDone; IO->Terminate = Terminate; IO->LineReader = LineReader; - + if (ReadFirst) { IO->NextState = eReadMessage; } diff --git a/citadel/event_client.h b/citadel/event_client.h index 3aec485a1..4617908c5 100644 --- a/citadel/event_client.h +++ b/citadel/event_client.h @@ -36,8 +36,7 @@ struct AsyncIO { int active_event; eNextState NextState; ev_io recv_event, - send_event, - conn_event; + send_event; StrBuf *ErrMsg; /* if we fail to connect, or lookup, error goes here. */ /* read/send related... */ @@ -50,8 +49,7 @@ struct AsyncIO { SendDone, /* we may send more data */ Terminate, /* shutting down... */ Timeout, /* Timeout handler; may also be connection timeout */ - ConnFail, /* What to do when one connection failed? */ - CustomDNS; /* If the application wants to do custom dns functionality like cycle through different MX-Records */ + ConnFail; /* What to do when one connection failed? */ IO_LineReaderCallback LineReader; /* if we have linereaders, maybe we want to read more lines before the real application logic is called? */ diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index 67bcbf324..66674b3b2 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -656,6 +656,11 @@ void connect_one_smtpsrv(SmtpOutMsg *SendMsg) SendMsg->mx_port = DefaultMXPort; + SendMsg->IO.SendBuf.Buf = NewStrBufPlain(NULL, 1024); + SendMsg->IO.RecvBuf.Buf = NewStrBufPlain(NULL, 1024); + SendMsg->IO.IOBuf = NewStrBuf(); + SendMsg->IO.ErrMsg = SendMsg->MyQEntry->StatusMessage; + /* TODO: Relay! *SendMsg->mx_user = '\0'; *SendMsg->mx_pass = '\0'; @@ -969,6 +974,11 @@ eNextState smtp_resolve_mx_done(void *data) int resolve_mx_records(void *Ctx) { SmtpOutMsg * SendMsg = Ctx; +///TMP + SendMsg->IO.SendBuf.Buf = NewStrBufPlain(NULL, 1024); + SendMsg->IO.RecvBuf.Buf = NewStrBufPlain(NULL, 1024); + SendMsg->IO.IOBuf = NewStrBuf(); + SendMsg->IO.ErrMsg = SendMsg->MyQEntry->StatusMessage; InitEventIO(&SendMsg->IO, SendMsg, SMTP_C_DispatchReadDone, @@ -979,6 +989,7 @@ int resolve_mx_records(void *Ctx) SMTP_C_ReadServerStatus, 1); return 0; +/// END TMP */ if (!QueueQuery(ns_t_mx, SendMsg->node, &SendMsg->IO, -- 2.30.2