From 706ab65f5413ab77f8915e870981fbe0b0a47235 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Fri, 14 Sep 2007 10:42:19 +0000 Subject: [PATCH] move event handling to protocol specific code, it is required to support SMTP greeting delay --- src/mail/ngx_mail_handler.c | 6 ------ src/mail/ngx_mail_imap_handler.c | 10 ++++++++-- src/mail/ngx_mail_pop3_handler.c | 6 ++++++ src/mail/ngx_mail_smtp_handler.c | 8 +++++++- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c index 8f549a8d3..000865d2f 100644 --- 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 *c) 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 47a79c6d7..0a93a0789 100644 --- a/src/mail/ngx_mail_imap_handler.c +++ b/src/mail/ngx_mail_imap_handler.c @@ -45,11 +45,17 @@ ngx_mail_imap_init_session(ngx_mail_session_t *s, ngx_connection_t *c) } } - 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 708787128..31cbc2192 100644 --- 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_session_t *s, ngx_connection_t *c) 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 76637f92f..92be7fa83 100644 --- 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_session_t *s, ngx_connection_t *c) } } + 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); }