Merge branch 'feature/handle_icy_uris_v33' into 'release/v3.3'

Modified http_parser to handle ICY uris (Backport v3.3)

See merge request espressif/esp-idf!6325
This commit is contained in:
Angus Gratton 2019-10-17 13:58:05 +08:00
commit 9f10f684d3

View File

@ -280,8 +280,11 @@ enum state
{ s_dead = 1 /* important that this is > 0 */ { s_dead = 1 /* important that this is > 0 */
, s_start_req_or_res , s_start_req_or_res
, s_res_or_resp_I /* for ICY URIs */
, s_res_or_resp_H , s_res_or_resp_H
, s_start_res , s_start_res
, s_res_I /* for ICY URIs */
, s_res_IC /* for ICY URIs */
, s_res_H , s_res_H
, s_res_HT , s_res_HT
, s_res_HTT , s_res_HTT
@ -728,6 +731,10 @@ reexecute:
if (ch == 'H') { if (ch == 'H') {
UPDATE_STATE(s_res_or_resp_H); UPDATE_STATE(s_res_or_resp_H);
CALLBACK_NOTIFY(message_begin);
} else if (ch == 'I') {
UPDATE_STATE(s_res_or_resp_I);
CALLBACK_NOTIFY(message_begin); CALLBACK_NOTIFY(message_begin);
} else { } else {
parser->type = HTTP_REQUEST; parser->type = HTTP_REQUEST;
@ -738,6 +745,13 @@ reexecute:
break; break;
} }
case s_res_or_resp_I: /* ICY URI case */
if (ch == 'C') {
parser->type = HTTP_RESPONSE;
UPDATE_STATE(s_res_IC);
}
break;
case s_res_or_resp_H: case s_res_or_resp_H:
if (ch == 'T') { if (ch == 'T') {
parser->type = HTTP_RESPONSE; parser->type = HTTP_RESPONSE;
@ -764,7 +778,9 @@ reexecute:
case 'H': case 'H':
UPDATE_STATE(s_res_H); UPDATE_STATE(s_res_H);
break; break;
case 'I': /* ICY URI */
UPDATE_STATE(s_res_I);
break;
case CR: case CR:
case LF: case LF:
break; break;
@ -777,6 +793,15 @@ reexecute:
CALLBACK_NOTIFY(message_begin); CALLBACK_NOTIFY(message_begin);
break; break;
} }
case s_res_I:
STRICT_CHECK(ch != 'C');
UPDATE_STATE(s_res_IC);
break;
case s_res_IC:
STRICT_CHECK(ch != 'Y');
UPDATE_STATE(s_res_http_minor);
break;
case s_res_H: case s_res_H:
STRICT_CHECK(ch != 'T'); STRICT_CHECK(ch != 'T');