# HG changeset patch # User Igor Sysoev # Date 1189766539 0 # Node ID a231e37a19abbc9117cf806758ac35f1e630e169 # Parent 2647950e047fafa501ba00580a153e35ef8787f4 move event handling to protocol specific code, it is required to support SMTP greeting delay diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c --- a/src/mail/ngx_mail_handler.c +++ b/src/mail/ngx_mail_handler.c @@ -253,12 +253,6 @@ ngx_mail_init_session(ngx_connection_t * return; } - ngx_add_timer(c->read, cscf->timeout); - - if (ngx_handle_read_event(c->read, 0) == NGX_ERROR) { - ngx_mail_close_connection(c); - } - c->write->handler = ngx_mail_send; ngx_mail_init_sessions[s->protocol](s, c); diff --git a/src/mail/ngx_mail_imap_handler.c b/src/mail/ngx_mail_imap_handler.c --- a/src/mail/ngx_mail_imap_handler.c +++ b/src/mail/ngx_mail_imap_handler.c @@ -45,10 +45,16 @@ ngx_mail_imap_init_session(ngx_mail_sess } } + s->out.len = sizeof(imap_greeting) - 1; + s->out.data = imap_greeting; + c->read->handler = ngx_mail_imap_init_protocol; - s->out.len = sizeof(imap_greeting) - 1; - s->out.data = imap_greeting; + ngx_add_timer(c->read, cscf->timeout); + + if (ngx_handle_read_event(c->read, 0) == NGX_ERROR) { + ngx_mail_close_connection(c); + } ngx_mail_send(c->write); } diff --git a/src/mail/ngx_mail_pop3_handler.c b/src/mail/ngx_mail_pop3_handler.c --- a/src/mail/ngx_mail_pop3_handler.c +++ b/src/mail/ngx_mail_pop3_handler.c @@ -62,6 +62,12 @@ ngx_mail_pop3_init_session(ngx_mail_sess c->read->handler = ngx_mail_pop3_init_protocol; + ngx_add_timer(c->read, cscf->timeout); + + if (ngx_handle_read_event(c->read, 0) == NGX_ERROR) { + ngx_mail_close_connection(c); + } + ngx_mail_send(c->write); } diff --git a/src/mail/ngx_mail_smtp_handler.c b/src/mail/ngx_mail_smtp_handler.c --- a/src/mail/ngx_mail_smtp_handler.c +++ b/src/mail/ngx_mail_smtp_handler.c @@ -41,9 +41,15 @@ ngx_mail_smtp_init_session(ngx_mail_sess } } + s->out = cscf->smtp_greeting; + c->read->handler = ngx_mail_smtp_init_protocol; - s->out = cscf->smtp_greeting; + ngx_add_timer(c->read, cscf->timeout); + + if (ngx_handle_read_event(c->read, 0) == NGX_ERROR) { + ngx_mail_close_connection(c); + } ngx_mail_send(c->write); }