Modified http_parser to handle ICY uris.
ICY URIs e.g `http://uk1.internet-radio.com/proxy/vombat?mp=/;` need to be handled differently. For basic use case, these URIs are similar to HTTP with exception that they reply with `ICY 200` etc in place of `HTTP/1.1 200`. In http_parser, we now also parse ICY URIs to be able to handle these similar to HTTP. Signed-off-by: Vikram Dattu <vikram.dattu@espressif.com>
This commit is contained in:
parent
0b4faeb781
commit
31c720602d
1 changed files with 26 additions and 1 deletions
|
@ -280,8 +280,11 @@ enum state
|
|||
{ s_dead = 1 /* important that this is > 0 */
|
||||
|
||||
, s_start_req_or_res
|
||||
, s_res_or_resp_I /* for ICY URIs */
|
||||
, s_res_or_resp_H
|
||||
, s_start_res
|
||||
, s_res_I /* for ICY URIs */
|
||||
, s_res_IC /* for ICY URIs */
|
||||
, s_res_H
|
||||
, s_res_HT
|
||||
, s_res_HTT
|
||||
|
@ -728,6 +731,10 @@ reexecute:
|
|||
if (ch == '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);
|
||||
} else {
|
||||
parser->type = HTTP_REQUEST;
|
||||
|
@ -738,6 +745,13 @@ reexecute:
|
|||
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:
|
||||
if (ch == 'T') {
|
||||
parser->type = HTTP_RESPONSE;
|
||||
|
@ -764,7 +778,9 @@ reexecute:
|
|||
case 'H':
|
||||
UPDATE_STATE(s_res_H);
|
||||
break;
|
||||
|
||||
case 'I': /* ICY URI */
|
||||
UPDATE_STATE(s_res_I);
|
||||
break;
|
||||
case CR:
|
||||
case LF:
|
||||
break;
|
||||
|
@ -777,6 +793,15 @@ reexecute:
|
|||
CALLBACK_NOTIFY(message_begin);
|
||||
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:
|
||||
STRICT_CHECK(ch != 'T');
|
||||
|
|
Loading…
Reference in a new issue