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 }