comparison src/mail/ngx_mail_smtp_handler.c @ 384:09b703ae3ba5 NGINX_0_6_36

nginx 0.6.36 *) Change: now the "Invalid argument" error returned by setsockopt(TCP_NODELAY) on Solaris, is ignored. *) Change: now POSTs without "Content-Length" header line are allowed. *) Feature: the "try_files" directive. *) Feature: the --with-pcre option in the configure. *) Feature: the "if_modified_since" directive. *) Feature: the "$cookie_..." variables. *) Feature: the "$arg_..." variables. *) Bugfix: compatibility with Tru64 UNIX. Thanks to Dustin Marquess. *) Bugfix: a "ssl_engine" directive did not use a SSL-accelerator for asymmetric ciphers. Thanks to Marcin Gozdalik. *) Bugfix: in a redirect rewrite directive original arguments were concatenated with new arguments by a "?" rather than an "&"; the bug had appeared in 0.1.18. Thanks to Maxim Dounin. *) Bugfix: nginx could not be built on AIX. *) Bugfix: a double response might be returned if the epoll or rtsig methods are used and a redirect was returned to a request with body. Thanks to Eden Li. *) Bugfix: a segmentation fault might occur in worker process if "resolver" directive was used in SMTP proxy. *) Bugfix: fastcgi_store stored files not always. *) Bugfix: nginx did not process a FastCGI server response, if the server send too many messages to stderr before response.
author Igor Sysoev <http://sysoev.ru>
date Thu, 02 Apr 2009 00:00:00 +0400
parents babd3d9efb62
children 1878e9c00f22
comparison
equal deleted inserted replaced
383:3d40b0260a84 384:09b703ae3ba5
10 #include <ngx_mail.h> 10 #include <ngx_mail.h>
11 #include <ngx_mail_smtp_module.h> 11 #include <ngx_mail_smtp_module.h>
12 12
13 13
14 static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx); 14 static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx);
15 static void ngx_mail_smtp_resolve_name(ngx_event_t *rev);
15 static void ngx_mail_smtp_resolve_name_handler(ngx_resolver_ctx_t *ctx); 16 static void ngx_mail_smtp_resolve_name_handler(ngx_resolver_ctx_t *ctx);
16 static void ngx_mail_smtp_greeting(ngx_mail_session_t *s, ngx_connection_t *c); 17 static void ngx_mail_smtp_greeting(ngx_mail_session_t *s, ngx_connection_t *c);
17 static void ngx_mail_smtp_invalid_pipelining(ngx_event_t *rev); 18 static void ngx_mail_smtp_invalid_pipelining(ngx_event_t *rev);
18 static ngx_int_t ngx_mail_smtp_create_buffer(ngx_mail_session_t *s, 19 static ngx_int_t ngx_mail_smtp_create_buffer(ngx_mail_session_t *s,
19 ngx_connection_t *c); 20 ngx_connection_t *c);
86 87
87 88
88 static void 89 static void
89 ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx) 90 ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx)
90 { 91 {
91 ngx_connection_t *c; 92 ngx_connection_t *c;
92 ngx_mail_session_t *s; 93 ngx_mail_session_t *s;
93 ngx_mail_core_srv_conf_t *cscf;
94 94
95 s = ctx->data; 95 s = ctx->data;
96 c = s->connection; 96 c = s->connection;
97 97
98 if (ctx->state) { 98 if (ctx->state) {
128 128
129 ngx_resolve_addr_done(ctx); 129 ngx_resolve_addr_done(ctx);
130 130
131 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, 131 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
132 "address resolved: %V", &s->host); 132 "address resolved: %V", &s->host);
133
134 c->read->handler = ngx_mail_smtp_resolve_name;
135
136 ngx_post_event(c->read, &ngx_posted_events);
137 }
138
139
140 static void
141 ngx_mail_smtp_resolve_name(ngx_event_t *rev)
142 {
143 ngx_connection_t *c;
144 ngx_mail_session_t *s;
145 ngx_resolver_ctx_t *ctx;
146 ngx_mail_core_srv_conf_t *cscf;
147
148 c = rev->data;
149 s = c->data;
133 150
134 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); 151 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
135 152
136 ctx = ngx_resolve_start(cscf->resolver, NULL); 153 ctx = ngx_resolve_start(cscf->resolver, NULL);
137 if (ctx == NULL) { 154 if (ctx == NULL) {