Browse Source

http: allow the header_done callback to reset the client state

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau 8 years ago
parent
commit
057a89885b
2 changed files with 4 additions and 1 deletions
  1. 3 1
      uclient-http.c
  2. 1 0
      uclient.h

+ 3 - 1
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) {

+ 1 - 0
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;