diff options
author | Felix Fietkau <nbd@openwrt.org> | 2016-01-16 18:50:22 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2016-01-16 18:50:22 +0100 |
commit | 057a89885bb9dc4cf3a6e9dfc4be04ad72c4f8f0 (patch) | |
tree | f3fe360511ee07ec61ca58e7d1a8b5c87b3958b4 | |
parent | b94caa406f4e5c1db4691735ba4969b002dc978f (diff) | |
download | uclient-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.c | 4 | ||||
-rw-r--r-- | uclient.h | 1 |
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) { @@ -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; |