void* http_parser_create(enum HTTP_PARSER_MODE mode) { struct http_context *ctx; ctx = (struct http_context*)malloc(sizeof(struct http_context)); if(!ctx) return NULL; memset(ctx, 0, sizeof(struct http_context)); ctx->server_mode = mode; http_parser_clear(ctx); return ctx; }
static void http_session_onsend(void* param, int code, size_t bytes) { int r = 0; struct http_session_t *session; session = (struct http_session_t*)param; session->vec_count = 0; session->vec = NULL; if (session->onsend) { r = session->onsend(session->onsendparam, code, bytes); if (0 == r && 0 == code) { http_parser_clear(session->parser); // reset parser if (session->remain > 0) http_session_onrecv(session, 0, session->remain); // next round else r = aio_tcp_transport_recv(session->transport, session->data, HTTP_RECV_BUFFER); } } if (0 != code || 0 != r) code = aio_tcp_transport_destroy(session->transport); }