From 5e9c98d67f62c9890c4206d5f79d5df14a6a1c52 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 19 Dec 2020 17:13:03 +0100 Subject: [PATCH] Added HEAD method --- src/client.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/client.c b/src/client.c index b58de8f..f8d3266 100644 --- a/src/client.c +++ b/src/client.c @@ -164,8 +164,14 @@ int client_request_handler(sock *client, int req_num) { goto respond; } - if ((int) uri.is_static && uri.filename != NULL) { + if (uri.is_static) { uri_init_cache(&uri); + http_add_header_field(&res.hdr, "Allow", "GET, HEAD"); + http_add_header_field(&res.hdr, "Accept-Ranges", "bytes"); + if (strncmp(req.method, "GET", 3) != 0 && strncmp(req.method, "HEAD", 4) != 0) { + res.status = http_get_status(405); + goto respond; + } } respond: @@ -176,6 +182,9 @@ int client_request_handler(sock *client, int req_num) { } else { http_add_header_field(&res.hdr, "Connection", "close"); } + if (http_get_header_field(&res.hdr, "Accept-Ranges", HTTP_PRESERVE_UPPER) == NULL) { + http_add_header_field(&res.hdr, "Accept-Ranges", "none"); + } unsigned long len = 0; if (res.status->code >= 400 && res.status->code < 600) { http_error_msg *http_msg = http_get_error_msg(res.status->code); @@ -193,15 +202,17 @@ int client_request_handler(sock *client, int req_num) { } http_send_response(client, &res); - if (res.status->code >= 400 && res.status->code < 600) { - int snd_len = 0; - while (snd_len < len) { - if (client->enc) { - ret = SSL_write(client->ssl, msg_buf, (int) (len - snd_len)); - } else { - ret = send(client->socket, msg_buf, len - snd_len, 0); + if (strncmp(req.method, "HEAD", 4) != 0) { + if (res.status->code >= 400 && res.status->code < 600) { + int snd_len = 0; + while (snd_len < len) { + if (client->enc) { + ret = SSL_write(client->ssl, msg_buf, (int) (len - snd_len)); + } else { + ret = send(client->socket, msg_buf, len - snd_len, 0); + } + snd_len += ret; } - snd_len += ret; } }