comparison src/imap/ngx_imap_parse.c @ 417:0526206251f6

nginx-0.0.10-2004-09-07-19:29:22 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 07 Sep 2004 15:29:22 +0000
parents
children 47709bff4468
comparison
equal deleted inserted replaced
416:b9bd635011de 417:0526206251f6
1
2 #include <ngx_config.h>
3 #include <ngx_core.h>
4 #include <ngx_event.h>
5 #include <ngx_imap.h>
6
7
8 ngx_int_t ngx_pop3_parse_command(ngx_imap_request_t *r)
9 {
10 u_char ch, *p, *c;
11 enum {
12 sw_start = 0,
13 sw_done
14 } state;
15
16 while (p < r->buf->last && state < sw_done) {
17 ch = *p++;
18
19 switch (state) {
20
21 /* POP3 commands */
22 case sw_start:
23 if (ch == ' ') {
24 c = r->buf->start;
25
26 if (p - 1 - m == 4) {
27
28 if (*c == 'U' && *(c + 1) == 'S'
29 && *(c + 2) == 'E' && *(c + 3) == 'R')
30 {
31 r->command = NGX_POP3_USER;
32
33 } else if (*c == 'P' && *(c + 1) == 'A'
34 && *(c + 2) == 'A' && *(c + 3) == 'S')
35 {
36 r->method = NGX_POP3_PASS;
37
38 } else if (*c == 'Q' && *(c + 1) == 'U'
39 && *(c + 2) == 'I' && *(c + 3) == 'T')
40 {
41 r->method = NGX_POP3_QUIT;
42
43 } else if (*c == 'N' && *(c + 1) == 'O'
44 && *(c + 2) == 'O' && *(c + 3) == 'P')
45 {
46 r->method = NGX_POP3_NOOP;
47 }
48 }
49
50 state = sw_spaces_before_arg;
51 break;
52 }
53
54 if (ch < 'A' || ch > 'Z') {
55 return NGX_IMAP_PARSE_INVALID_COMMAND;
56 }
57
58 break;
59 }
60
61 /* suppress warning */
62 case sw_done:
63 break;
64 }
65 }
66
67 return NGX_OK;
68 }