[LEDE-DEV] [PATCH uclient] http: allow sending message body for DELETE request

Rafał Miłecki zajec5 at gmail.com
Thu Jun 16 05:10:05 PDT 2016


Sending entity within DELETE is not forbidden by RFC 7231, see section
4.3.5. DELETE:
> A payload within a DELETE request message has no defined semantics;
> sending a payload body on a DELETE request might cause some existing
> implementations to reject the request.

Signed-off-by: Rafał Miłecki <zajec5 at gmail.com>
---
 uclient-http.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/uclient-http.c b/uclient-http.c
index c6336a6..f0451cc 100644
--- a/uclient-http.c
+++ b/uclient-http.c
@@ -286,6 +286,18 @@ static void uclient_http_process_headers(struct uclient_http *uh)
 	uh->auth_type = uclient_http_update_auth_type(uh);
 }
 
+static bool uclient_request_supports_body(enum request_type req_type)
+{
+	switch (req_type) {
+	case REQ_POST:
+	case REQ_PUT:
+	case REQ_DELETE:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static void
 uclient_http_add_auth_basic(struct uclient_http *uh)
 {
@@ -564,7 +576,7 @@ uclient_http_send_headers(struct uclient_http *uh)
 	blobmsg_for_each_attr(cur, uh->headers.head, rem)
 		ustream_printf(uh->us, "%s: %s\r\n", blobmsg_name(cur), (char *) blobmsg_data(cur));
 
-	if (uh->req_type == REQ_POST || uh->req_type == REQ_PUT)
+	if (uclient_request_supports_body(uh->req_type))
 		ustream_printf(uh->us, "Transfer-Encoding: chunked\r\n");
 
 	uclient_http_add_auth_header(uh);
@@ -992,7 +1004,7 @@ uclient_http_request_done(struct uclient *cl)
 		return -1;
 
 	uclient_http_send_headers(uh);
-	if (uh->req_type == REQ_POST || uh->req_type == REQ_PUT)
+	if (uclient_request_supports_body(uh->req_type))
 		ustream_printf(uh->us, "0\r\n\r\n");
 	uh->state = HTTP_STATE_REQUEST_DONE;
 
-- 
1.8.4.5




More information about the Lede-dev mailing list