From: Felix Fietkau Date: Sat, 22 Mar 2014 17:30:09 +0000 (+0100) Subject: parse the http response code X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuclient.git;a=commitdiff_plain;h=dbd61a7a6d5b61ba24d73f56e97b4d56baedffaf parse the http response code Signed-off-by: Felix Fietkau --- 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)