summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.c8
-rw-r--r--uhttpd.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/client.c b/client.c
index 3dc40e8..c5b82d2 100644
--- a/client.c
+++ b/client.c
@@ -141,6 +141,7 @@ static int client_parse_request(struct client *cl, char *data)
if (!type || !path || !version)
return CLIENT_STATE_DONE;
+ memset(&cl->request, 0, sizeof(cl->request));
req->url = path;
req->method = find_idx(http_methods, ARRAY_SIZE(http_methods), type);
if (req->method < 0)
@@ -191,6 +192,9 @@ static void client_header_complete(struct client *cl)
if (!rfc1918_filter_check(cl))
return;
+ if (cl->request.expect_cont)
+ ustream_printf(cl->us, "HTTP/1.1 100 Continue\r\n\r\n");
+
uh_handle_request(cl);
}
@@ -216,6 +220,10 @@ static void client_parse_header(struct client *cl, char *data)
if (isupper(*name))
*name = tolower(*name);
+ if (!strcasecmp(data, "Expect") &&
+ !strcasecmp(val, "100-continue"))
+ cl->request.expect_cont = true;
+
blobmsg_add_string(&cl->hdr, data, val);
cl->state = CLIENT_STATE_HEADER;
diff --git a/uhttpd.h b/uhttpd.h
index f47c743..4c09c12 100644
--- a/uhttpd.h
+++ b/uhttpd.h
@@ -78,6 +78,7 @@ enum http_version {
struct http_request {
enum http_method method;
enum http_version version;
+ bool expect_cont;
int redirect_status;
const char *url;
const struct auth_realm *realm;