diff options
-rw-r--r-- | uclient-example.c | 2 | ||||
-rw-r--r-- | uclient-http.c | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/uclient-example.c b/uclient-example.c index 07b330d..05f344d 100644 --- a/uclient-example.c +++ b/uclient-example.c @@ -9,7 +9,7 @@ static void example_header_done(struct uclient *cl) struct blob_attr *cur; int rem; - printf("Headers: \n"); + printf("Headers (%d): \n", cl->status_code); blobmsg_for_each_attr(cur, cl->meta, rem) { printf("%s=%s\n", blobmsg_name(cur), (char *) blobmsg_data(cur)); } diff --git a/uclient-http.c b/uclient-http.c index c344513..ef44a40 100644 --- a/uclient-http.c +++ b/uclient-http.c @@ -501,6 +501,19 @@ static void uclient_parse_http_line(struct uclient_http *uh, char *data) char *sep; if (uh->state == HTTP_STATE_REQUEST_DONE) { + char *code; + + /* HTTP/1.1 */ + strsep(&data, " "); + + code = strsep(&data, " "); + if (!code) + goto error; + + uh->uc.status_code = strtoul(code, &sep, 10); + if (sep && *sep) + goto error; + uh->state = HTTP_STATE_RECV_HEADERS; return; } @@ -524,6 +537,12 @@ static void uclient_parse_http_line(struct uclient_http *uh, char *data) sep++; blobmsg_add_string(&uh->meta, name, sep); + return; + +error: + uh->uc.status_code = 400; + uh->eof = true; + uclient_notify_eof(uh); } static void __uclient_notify_read(struct uclient_http *uh) |