Mercurial > hg > nginx
comparison src/mail/ngx_mail_handler.c @ 5398:04e43d03e153
Mail: smtp pipelining support.
Basically, this does the following two changes (and corresponding
modifications of related code):
1. Does not reset session buffer unless it's reached it's end, and always
wait for LF to terminate command (even if we detected invalid command).
2. Record command name to make it available for handlers (since now we
can't assume that command starts from s->buffer->start).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 30 Sep 2013 22:09:57 +0400 |
parents | 28a64967e891 |
children | 957d734362ed |
comparison
equal
deleted
inserted
replaced
5397:ae73d7a4fcde | 5398:04e43d03e153 |
---|---|
618 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { | 618 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { |
619 ngx_mail_session_internal_server_error(s); | 619 ngx_mail_session_internal_server_error(s); |
620 return NGX_ERROR; | 620 return NGX_ERROR; |
621 } | 621 } |
622 | 622 |
623 return NGX_AGAIN; | 623 if (s->buffer->pos == s->buffer->last) { |
624 return NGX_AGAIN; | |
625 } | |
624 } | 626 } |
625 | 627 |
626 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); | 628 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); |
627 | 629 |
628 rc = cscf->protocol->parse_command(s); | 630 rc = cscf->protocol->parse_command(s); |
659 | 661 |
660 void | 662 void |
661 ngx_mail_auth(ngx_mail_session_t *s, ngx_connection_t *c) | 663 ngx_mail_auth(ngx_mail_session_t *s, ngx_connection_t *c) |
662 { | 664 { |
663 s->args.nelts = 0; | 665 s->args.nelts = 0; |
664 s->buffer->pos = s->buffer->start; | 666 |
665 s->buffer->last = s->buffer->start; | 667 if (s->buffer->pos == s->buffer->last) { |
668 s->buffer->pos = s->buffer->start; | |
669 s->buffer->last = s->buffer->start; | |
670 } | |
671 | |
666 s->state = 0; | 672 s->state = 0; |
667 | 673 |
668 if (c->read->timer_set) { | 674 if (c->read->timer_set) { |
669 ngx_del_timer(c->read); | 675 ngx_del_timer(c->read); |
670 } | 676 } |