Mercurial > hg > nginx
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 } |