http: allow the header_done callback to reset the client state
authorFelix Fietkau <nbd@openwrt.org>
Sat, 16 Jan 2016 17:50:22 +0000 (18:50 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 16 Jan 2016 17:50:22 +0000 (18:50 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
uclient-http.c
uclient.h

index 676ce1bea1af81c14764df449db99c42043a6dd7..e4565642d83efa1bbd6e2a7995d868bf93d29a6b 100644 (file)
@@ -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) {
index 0c76f6e342d4583d5468908cf278bc59a9eeb0f7..212fb7d71e84d58c9761615d7e1e0688e1647b69 100644 (file)
--- 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;