comparison src/imap/ngx_imap_handler.c @ 421:01456a419cf9

nginx-0.0.10-2004-09-10-18:32:02 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 10 Sep 2004 14:32:02 +0000
parents 33a8253115b4
children edaefb2a20fc
comparison
equal deleted inserted replaced
420:33a8253115b4 421:01456a419cf9
79 if (s->buffer == NULL) { 79 if (s->buffer == NULL) {
80 ngx_imap_close_connection(s->connection); 80 ngx_imap_close_connection(s->connection);
81 return; 81 return;
82 } 82 }
83 83
84 c->read->event_handler = ngx_pop3_auth_state;
85
84 ngx_pop3_auth_state(rev); 86 ngx_pop3_auth_state(rev);
85 } 87 }
86 88
87 89
88 static void ngx_pop3_auth_state(ngx_event_t *rev) 90 static void ngx_pop3_auth_state(ngx_event_t *rev)
89 { 91 {
92 ngx_uint_t quit;
90 u_char *text; 93 u_char *text;
91 ssize_t size; 94 ssize_t size;
92 ngx_int_t rc; 95 ngx_int_t rc;
93 ngx_connection_t *c; 96 ngx_connection_t *c;
94 ngx_imap_session_t *s; 97 ngx_imap_session_t *s;
95 98
96 c = rev->data; 99 c = rev->data;
97 s = c->data; 100 s = c->data;
98 101
102 ngx_log_debug0(NGX_LOG_DEBUG_IMAP, c->log, 0, "pop3 auth state");
103
99 /* TODO: timeout */ 104 /* TODO: timeout */
100 105
101 rc = ngx_pop3_read_command(s); 106 rc = ngx_pop3_read_command(s);
102 107
103 if (rc == NGX_AGAIN || rc == NGX_ERROR) { 108 if (rc == NGX_AGAIN || rc == NGX_ERROR) {
104 return; 109 return;
105 } 110 }
106 111
107 s->state = 0; 112 quit = 0;
113 text = pop3_ok;
114 size = sizeof(pop3_ok) - 1;
115
116 if (rc == NGX_OK) {
117 switch (s->imap_state) {
118
119 case ngx_pop3_start:
120
121 switch (s->command) {
122
123 case NGX_POP3_USER:
124 if (s->args.nelts == 1) {
125 s->imap_state = ngx_pop3_user;
126 } else {
127 rc = NGX_IMAP_PARSE_INVALID_COMMAND;
128 }
129
130 break;
131
132 case NGX_POP3_QUIT:
133 quit = 1;
134 break;
135
136 default:
137 s->imap_state = ngx_pop3_start;
138 rc = NGX_IMAP_PARSE_INVALID_COMMAND;
139 break;
140 }
141
142 break;
143
144 case ngx_pop3_user:
145
146 switch (s->command) {
147
148 case NGX_POP3_PASS:
149 if (s->args.nelts == 1) {
150 /* STUB */ s->imap_state = ngx_pop3_start;
151 } else {
152 rc = NGX_IMAP_PARSE_INVALID_COMMAND;
153 }
154
155 break;
156
157 case NGX_POP3_QUIT:
158 quit = 1;
159 break;
160
161 default:
162 s->imap_state = ngx_pop3_start;
163 rc = NGX_IMAP_PARSE_INVALID_COMMAND;
164 break;
165 }
166
167 break;
168 }
169 }
108 170
109 if (rc == NGX_IMAP_PARSE_INVALID_COMMAND) { 171 if (rc == NGX_IMAP_PARSE_INVALID_COMMAND) {
110 text = pop3_invalid_command; 172 text = pop3_invalid_command;
111 size = sizeof(pop3_invalid_command) - 1; 173 size = sizeof(pop3_invalid_command) - 1;
112
113 } else {
114 text = pop3_ok;
115 size = sizeof(pop3_ok) - 1;
116 } 174 }
117 175
118 if (ngx_send(c, text, size) < size) { 176 if (ngx_send(c, text, size) < size) {
119 /* 177 /*
120 * we treat the incomplete sending as NGX_ERROR 178 * we treat the incomplete sending as NGX_ERROR
121 * because it is very strange here 179 * because it is very strange here
122 */ 180 */
123 ngx_imap_close_connection(c); 181 ngx_imap_close_connection(c);
124 return; 182 return;
125 } 183 }
184
185 if (quit) {
186 ngx_imap_close_connection(c);
187 return;
188 }
189
190 s->args.nelts = 0;
191 s->buffer->pos = s->buffer->start;
192 s->buffer->last = s->buffer->start;
126 } 193 }
127 194
128 195
129 static ngx_int_t ngx_pop3_read_command(ngx_imap_session_t *s) 196 static ngx_int_t ngx_pop3_read_command(ngx_imap_session_t *s)
130 { 197 {