src/server/daemon/sessionhandler.c

changeset 41
bb7a1f5a8b48
parent 37
360b9aabe17e
child 44
3da1f7b6847f
equal deleted inserted replaced
40:56cda23f48d4 41:bb7a1f5a8b48
166 if(ev_pollin(ev, conn->fd, event) != 0) { 166 if(ev_pollin(ev, conn->fd, event) != 0) {
167 perror("poll"); 167 perror("poll");
168 } 168 }
169 } 169 }
170 170
171 void evt_request_input(event_handler_t *handler, event_t *event) { 171 int evt_request_input(event_handler_t *handler, event_t *event) {
172 EventHttpIO *io = event->cookie; 172 EventHttpIO *io = event->cookie;
173 HttpParser *parser = io->parser; 173 HttpParser *parser = io->parser;
174 HTTPRequest *request = io->request; 174 HTTPRequest *request = io->request;
175 netbuf *buf = request->netbuf; 175 netbuf *buf = request->netbuf;
176 176
181 buf->inbuf + buf->pos, 181 buf->inbuf + buf->pos,
182 buf->maxsize - buf->pos); 182 buf->maxsize - buf->pos);
183 if(r == -1) { 183 if(r == -1) {
184 // TODO: error handling 184 // TODO: error handling
185 fprintf(stderr, "%s\n", "Error: Cannot read from socket"); 185 fprintf(stderr, "%s\n", "Error: Cannot read from socket");
186 return; 186 return 0;
187 } 187 }
188 188
189 buf->cursize += r; 189 buf->cursize += r;
190 state = http_parser_process(parser); 190 state = http_parser_process(parser);
191 if(state == 2) { 191 if(state == 2) {
192 // TODO: error handling 192 // TODO: error handling
193 fprintf(stderr, "%s\n", "Error: Cannot parse http request"); 193 fprintf(stderr, "%s\n", "Error: Cannot parse http request");
194 return; 194 return 0;
195 } else if(state == 1) { 195 } else if(state == 1) {
196 // we need more data -> begin poll, which repeats this function 196 /*
197 ev_pollin(handler, request->connection->fd, event); 197 * we need more data -> return 1 to tell the event handler to
198 // TODO: check ev_pollin return value for errors 198 * continue polling
199 return; 199 */
200 return 1;
200 } 201 }
201 202
202 // we are done with reading 203 // we are done with reading
203 204
204 // set socket blocking 205 // set socket blocking
211 // TODO: critical error 212 // TODO: critical error
212 } 213 }
213 214
214 // process request 215 // process request
215 r = handle_request(request, NULL); 216 r = handle_request(request, NULL);
216 } 217
218 return 0; // TODO: return before handle_request
219 }

mercurial