[OpenWrt-Devel] [PATCH v2 4/7] uclient-http: Implement error handling for header-sending

Tobias Schramm tobleminer at gmail.com
Sun Feb 18 07:46:07 EST 2018


Add some error handling for errors during assembly of headers

Signed-off-by: Tobias Schramm <tobleminer at gmail.com>
---
 uclient-http.c | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/uclient-http.c b/uclient-http.c
index 20b8a9a..04f16a3 100644
--- a/uclient-http.c
+++ b/uclient-http.c
@@ -568,36 +568,36 @@ fail:
 	return err;
 }
 
-static void
+static int
 uclient_http_add_auth_header(struct uclient_http *uh)
 {
 	if (!uh->uc.url->auth)
-		return;
+		return 0;
 
 	switch (uh->auth_type) {
 	case AUTH_TYPE_UNKNOWN:
 	case AUTH_TYPE_NONE:
 		break;
 	case AUTH_TYPE_BASIC:
-		uclient_http_add_auth_basic(uh);
-		break;
+		return uclient_http_add_auth_basic(uh);
 	case AUTH_TYPE_DIGEST:
-		uclient_http_add_auth_digest(uh);
-		break;
+		return uclient_http_add_auth_digest(uh);
 	}
+
+	return 0;
 }
 
-static void
+static int
 uclient_http_send_headers(struct uclient_http *uh)
 {
 	struct uclient_url *url = uh->uc.url;
 	struct blob_attr *cur;
 	enum request_type req_type = uh->req_type;
 	bool literal_ipv6;
-	int rem;
+	int err, rem;
 
 	if (uh->state >= HTTP_STATE_HEADERS_SENT)
-		return;
+		return 0;
 
 	if (uh->uc.proxy_url)
 		url = uh->uc.proxy_url;
@@ -620,11 +620,14 @@ uclient_http_send_headers(struct uclient_http *uh)
 	if (uclient_request_supports_body(uh->req_type))
 		ustream_printf(uh->us, "Transfer-Encoding: chunked\r\n");
 
-	uclient_http_add_auth_header(uh);
+	if ((err = uclient_http_add_auth_header(uh)))
+		return err;
 
 	ustream_printf(uh->us, "\r\n");
 
 	uh->state = HTTP_STATE_HEADERS_SENT;
+
+	return 0;
 }
 
 static void uclient_http_headers_complete(struct uclient_http *uh)
@@ -1020,12 +1023,14 @@ uclient_http_set_header(struct uclient *cl, const char *name, const char *value)
 static int
 uclient_http_send_data(struct uclient *cl, const char *buf, unsigned int len)
 {
+	int err;
 	struct uclient_http *uh = container_of(cl, struct uclient_http, uc);
 
 	if (uh->state >= HTTP_STATE_REQUEST_DONE)
 		return -1;
 
-	uclient_http_send_headers(uh);
+	if ((err = uclient_http_send_headers(uh)))
+		return err;
 
 	if (len > 0) {
 		ustream_printf(uh->us, "%X\r\n", len);
@@ -1039,12 +1044,15 @@ uclient_http_send_data(struct uclient *cl, const char *buf, unsigned int len)
 static int
 uclient_http_request_done(struct uclient *cl)
 {
+	int err;
 	struct uclient_http *uh = container_of(cl, struct uclient_http, uc);
 
 	if (uh->state >= HTTP_STATE_REQUEST_DONE)
 		return -1;
 
-	uclient_http_send_headers(uh);
+	if ((err = uclient_http_send_headers(uh)))
+		return err;
+
 	if (uclient_request_supports_body(uh->req_type))
 		ustream_printf(uh->us, "0\r\n\r\n");
 	uh->state = HTTP_STATE_REQUEST_DONE;
-- 
2.16.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list