summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2016-01-16 18:50:22 +0100
committerFelix Fietkau <nbd@openwrt.org>2016-01-16 18:50:22 +0100
commit057a89885bb9dc4cf3a6e9dfc4be04ad72c4f8f0 (patch)
treef3fe360511ee07ec61ca58e7d1a8b5c87b3958b4
parentb94caa406f4e5c1db4691735ba4969b002dc978f (diff)
downloaduclient-057a89885bb9dc4cf3a6e9dfc4be04ad72c4f8f0.tar.gz
http: allow the header_done callback to reset the client state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--uclient-http.c4
-rw-r--r--uclient.h1
2 files changed, 4 insertions, 1 deletions
diff --git a/uclient-http.c b/uclient-http.c
index 676ce1b..e456564 100644
--- a/uclient-http.c
+++ b/uclient-http.c
@@ -211,6 +211,7 @@ static void uclient_http_reset_state(struct uclient_http *uh)
static void uclient_http_init_request(struct uclient_http *uh)
{
+ uh->seq++;
uclient_http_reset_state(uh);
blob_buf_init(&uh->meta, 0);
}
@@ -561,6 +562,7 @@ uclient_http_send_headers(struct uclient_http *uh)
static void uclient_http_headers_complete(struct uclient_http *uh)
{
enum auth_type auth_type = uh->auth_type;
+ int seq = uh->uc.seq;
uh->state = HTTP_STATE_RECV_DATA;
uh->uc.meta = uh->meta.head;
@@ -577,7 +579,7 @@ static void uclient_http_headers_complete(struct uclient_http *uh)
if (uh->uc.cb->header_done)
uh->uc.cb->header_done(&uh->uc);
- if (uh->eof)
+ if (uh->eof || seq != uh->uc.seq)
return;
if (uh->req_type == REQ_HEAD || uh->uc.status_code == 204) {
diff --git a/uclient.h b/uclient.h
index 0c76f6e..212fb7d 100644
--- a/uclient.h
+++ b/uclient.h
@@ -69,6 +69,7 @@ struct uclient {
bool data_eof;
int error_code;
int status_code;
+ int seq;
struct blob_attr *meta;
struct uloop_timeout connection_timeout;