Fix unhandled content issue

This commit is contained in:
Ilja Kartašov 2019-04-25 13:50:05 +02:00
parent 12be39c747
commit 2af6556748
2 changed files with 13 additions and 3 deletions

View File

@ -273,8 +273,9 @@ http_10_parse_header(char *data, int32_t *p_size, AislStream stream)
*p_size -= size; *p_size -= size;
return HTTP_PARSER_SUCCESS; return HTTP_PARSER_SUCCESS;
} else if (newline == key || (newline == key+1 && *key == '\r')) { } else if (newline == key || (newline == key+1 && *key == '\r')) {
*p_size -= size;
return (aisl_stream_set_end_of_headers(stream) == 0) ? return (aisl_stream_set_end_of_headers(stream) == 0) ?
HTTP_PARSER_READY : HTTP_PARSER_SUCCESS; HTTP_PARSER_SUCCESS : HTTP_PARSER_READY;
} }
return HTTP_PARSER_ERROR; return HTTP_PARSER_ERROR;
} }
@ -283,7 +284,12 @@ http_10_parse_header(char *data, int32_t *p_size, AislStream stream)
ParserStatus ParserStatus
http_10_parse_body(char *data, int32_t *p_size, AislStream stream) http_10_parse_body(char *data, int32_t *p_size, AislStream stream)
{ {
switch (aisl_stream_set_body(stream, data, *p_size)) { int32_t size = *p_size;
if (!size)
return HTTP_PARSER_HUNGRY;
switch (aisl_stream_set_body(stream, data, size)) {
case 0: case 0:
return HTTP_PARSER_READY; return HTTP_PARSER_READY;
case -1: case -1:

View File

@ -168,6 +168,7 @@ aisl_stream_set_end_of_headers(AislStream stream)
} else { } else {
result = 2; result = 2;
} }
return result; return result;
} }
@ -180,6 +181,8 @@ aisl_stream_set_body(AislStream stream, const char *data, int32_t size)
if (!(stream->content_length < size)) { if (!(stream->content_length < size)) {
struct aisl_evt_input on_input; struct aisl_evt_input on_input;
stream->content_length -= size;
if (stream->content_length == 0) { if (stream->content_length == 0) {
stream->state = AISL_STREAM_STATE_READY; stream->state = AISL_STREAM_STATE_READY;
result = 0; result = 0;
@ -188,7 +191,7 @@ aisl_stream_set_body(AislStream stream, const char *data, int32_t size)
} }
on_input.evt.code = AISL_EVENT_STREAM_INPUT; on_input.evt.code = AISL_EVENT_STREAM_INPUT;
on_input.evt.source = (void *) stream; on_input.evt.source = (void *)stream;
on_input.evt.status = AISL_SUCCESS; on_input.evt.status = AISL_SUCCESS;
on_input.data = data; on_input.data = data;
on_input.size = size; on_input.size = size;
@ -358,6 +361,7 @@ aisl_response(AislStream stream, AislHttpResponse rs_code, uint64_t c_len)
return AISL_MALLOC_ERROR; return AISL_MALLOC_ERROR;
stream->head_offset = l; stream->head_offset = l;
stream->body_offset = l;
stream->state = AISL_STREAM_STATE_SEND_HEADER; stream->state = AISL_STREAM_STATE_SEND_HEADER;
return AISL_SUCCESS; return AISL_SUCCESS;