summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-03-22 18:30:09 +0100
committerFelix Fietkau <nbd@openwrt.org>2014-03-22 18:30:09 +0100
commitdbd61a7a6d5b61ba24d73f56e97b4d56baedffaf (patch)
tree18094eb1f5baa30597d082a8a8561b7ae1b5dae9
parent6ee437e845ad57a8f86dc4f3fbbaddfd487de059 (diff)
downloaduclient-dbd61a7a6d5b61ba24d73f56e97b4d56baedffaf.tar.gz
parse the http response code
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--uclient-example.c2
-rw-r--r--uclient-http.c19
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)