aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/beaker_globals.h2
-rw-r--r--src/http.c11
-rw-r--r--src/server.c2
3 files changed, 11 insertions, 4 deletions
diff --git a/src/beaker_globals.h b/src/beaker_globals.h
index 96d4dcf..e01704c 100644
--- a/src/beaker_globals.h
+++ b/src/beaker_globals.h
@@ -49,6 +49,8 @@ void beaker_log_request(const char *remote_addr, const char *method,
const char *path, int status, size_t response_size,
double duration_ms);
+void beaker_clear_response_cookies(void);
+
BeakerRequestReadResult beaker_read_request_headers(int socket, char *buffer,
size_t buffer_size,
size_t *bytes_read);
diff --git a/src/http.c b/src/http.c
index 1312d4d..bfd6f9b 100644
--- a/src/http.c
+++ b/src/http.c
@@ -58,6 +58,11 @@ static void build_cookie_headers(char *cookie_headers_buffer,
}
}
+void beaker_clear_response_cookies(void) {
+ memset(cookies_to_set, 0, sizeof(cookies_to_set));
+ cookies_to_set_count = 0;
+}
+
void send_status(const char *status_line) {
if (current_client_socket == -1) {
beaker_log("ERROR",
@@ -97,6 +102,7 @@ void send_response(const char *html) {
char cookie_headers[BUFFER_SIZE];
build_cookie_headers(cookie_headers, sizeof(cookie_headers));
+ beaker_clear_response_cookies();
snprintf(http_response_header, sizeof(http_response_header),
"HTTP/1.1 200 OK\r\n"
@@ -119,8 +125,6 @@ void send_response(const char *html) {
"send_response: Failed to send HTML body.\n");
return;
}
-
- cookies_to_set_count = 0;
}
void send_redirect(const char *location) {
@@ -137,6 +141,7 @@ void send_redirect(const char *location) {
char cookie_headers[BUFFER_SIZE];
build_cookie_headers(cookie_headers, sizeof(cookie_headers));
+ beaker_clear_response_cookies();
snprintf(http_response_header, sizeof(http_response_header),
"HTTP/1.1 302 Found\r\n"
@@ -152,8 +157,6 @@ void send_redirect(const char *location) {
"send_redirect: Failed to send redirect header.\n");
return;
}
-
- cookies_to_set_count = 0;
}
void set_cookie(const char *name, const char *value, const char *expires,
diff --git a/src/server.c b/src/server.c
index 5ac20a0..7d5eb8f 100644
--- a/src/server.c
+++ b/src/server.c
@@ -200,6 +200,7 @@ static void finish_client_connection(int socket, char *requested_path,
beaker_log_request(current_request_info.remote_addr, method, path,
current_response_status, current_response_size,
duration_ms);
+ beaker_clear_response_cookies();
free(requested_path);
close(socket);
current_client_socket = -1;
@@ -214,6 +215,7 @@ void handle_client_connection(int new_socket) {
struct timespec started_at;
clock_gettime(CLOCK_MONOTONIC, &started_at);
+ beaker_clear_response_cookies();
current_response_status = 0;
current_response_size = 0;
beaker_reset_write_deadline();