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 index 8f549a8..000865d 100644 --- a/src/mail/ngx_mail_handler.c +++ b/src/mail/ngx_mail_handler.c
@@ -253,12 +253,6 @@ 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 index 47a79c6..0a93a07 100644 --- a/src/mail/ngx_mail_imap_handler.c +++ b/src/mail/ngx_mail_imap_handler.c
@@ -45,11 +45,17 @@ } } - c->read->handler = ngx_mail_imap_init_protocol; - s->out.len = sizeof(imap_greeting) - 1; s->out.data = imap_greeting; + c->read->handler = ngx_mail_imap_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_pop3_handler.c b/src/mail/ngx_mail_pop3_handler.c index 7087871..31cbc21 100644 --- a/src/mail/ngx_mail_pop3_handler.c +++ b/src/mail/ngx_mail_pop3_handler.c
@@ -62,6 +62,12 @@ 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 index 76637f9..92be7fa 100644 --- a/src/mail/ngx_mail_smtp_handler.c +++ b/src/mail/ngx_mail_smtp_handler.c
@@ -41,9 +41,15 @@ } } + 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); }