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 |