Fix buffering issues in send_headers
parent
e9e8bb8175
commit
ca7c7e9557
|
@ -1,8 +1,10 @@
|
||||||
#include "socket_server.h"
|
#include "socket_server.h"
|
||||||
|
#include "request_handling.h"
|
||||||
#include "../common/http_types.h"
|
#include "../common/http_types.h"
|
||||||
#include "../common/socket_helper.h"
|
#include "../common/socket_helper.h"
|
||||||
#include "../common/buffer_helper.h"
|
#include "../common/buffer_helper.h"
|
||||||
#include "status_codes.h"
|
#include "status_codes.h"
|
||||||
|
#include <errno.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -99,7 +101,8 @@ static int send_headers(int status_code, int client_socket, int content_length)
|
||||||
// RFC2616 states that if we don't intend to persist the connection, we must send "Connection: close"
|
// RFC2616 states that if we don't intend to persist the connection, we must send "Connection: close"
|
||||||
const char *connection_header_components[] = {HEADER_CONNECTION, ": close\r\n"};
|
const char *connection_header_components[] = {HEADER_CONNECTION, ": close\r\n"};
|
||||||
char *content_length_header_buffer = "";
|
char *content_length_header_buffer = "";
|
||||||
int header_buffer_size = get_buffer_size(connection_header_components, 2);
|
// Include space for the CRLF and null term
|
||||||
|
int header_buffer_size = get_buffer_size(connection_header_components, 2) + 3;
|
||||||
if (content_length > 0) {
|
if (content_length > 0) {
|
||||||
// Get the number of chars in the port
|
// Get the number of chars in the port
|
||||||
int content_length_length = floor(log10(content_length)) + 1;
|
int content_length_length = floor(log10(content_length)) + 1;
|
||||||
|
@ -113,8 +116,7 @@ static int send_headers(int status_code, int client_socket, int content_length)
|
||||||
free(content_length_string);
|
free(content_length_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Include space for the null term and the CRLF
|
char *header_buffer = malloc(header_buffer_size * sizeof(char));
|
||||||
char *header_buffer = malloc((header_buffer_size + 3) * sizeof(char));
|
|
||||||
sprintf(header_buffer, "%s: close\r\n%s\r\n", HEADER_CONNECTION, content_length_header_buffer);
|
sprintf(header_buffer, "%s: close\r\n%s\r\n", HEADER_CONNECTION, content_length_header_buffer);
|
||||||
if (content_length > 0) {
|
if (content_length > 0) {
|
||||||
free(content_length_header_buffer);
|
free(content_length_header_buffer);
|
||||||
|
|
Loading…
Reference in New Issue