diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-01-31 20:34:26 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-01-31 20:34:26 +0000 |
commit | bd5c23ee0a5e47ee85432023baab7e02a75caee0 (patch) | |
tree | 8f53e99bf72295fc5bab9b2a81e2689eaa9cc1d9 | |
parent | 8ef386e1af89a51b60859063ad1dc80332cf5faf (diff) | |
download | nginx-bd5c23ee0a5e47ee85432023baab7e02a75caee0.tar.gz nginx-bd5c23ee0a5e47ee85432023baab7e02a75caee0.zip |
avoid deep nested calls, flatten call tree
-rw-r--r-- | src/mail/ngx_mail_smtp_handler.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/mail/ngx_mail_smtp_handler.c b/src/mail/ngx_mail_smtp_handler.c index 46247239c..a88a82cd4 100644 --- a/src/mail/ngx_mail_smtp_handler.c +++ b/src/mail/ngx_mail_smtp_handler.c @@ -12,6 +12,7 @@ static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx); +static void ngx_mail_smtp_resolve_name(ngx_event_t *rev); static void ngx_mail_smtp_resolve_name_handler(ngx_resolver_ctx_t *ctx); static void ngx_mail_smtp_greeting(ngx_mail_session_t *s, ngx_connection_t *c); static void ngx_mail_smtp_invalid_pipelining(ngx_event_t *rev); @@ -91,9 +92,8 @@ ngx_mail_smtp_init_session(ngx_mail_session_t *s, ngx_connection_t *c) static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx) { - ngx_connection_t *c; - ngx_mail_session_t *s; - ngx_mail_core_srv_conf_t *cscf; + ngx_connection_t *c; + ngx_mail_session_t *s; s = ctx->data; c = s->connection; @@ -134,6 +134,23 @@ ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx) ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "address resolved: %V", &s->host); + c->read->handler = ngx_mail_smtp_resolve_name; + + ngx_post_event(c->read, &ngx_posted_events); +} + + +static void +ngx_mail_smtp_resolve_name(ngx_event_t *rev) +{ + ngx_connection_t *c; + ngx_mail_session_t *s; + ngx_resolver_ctx_t *ctx; + ngx_mail_core_srv_conf_t *cscf; + + c = rev->data; + s = c->data; + cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); ctx = ngx_resolve_start(cscf->resolver, NULL); |