I am reading data through a socket connected to a proxy, which in turn connects to a website of a choice, based on the IP and port I’ve assigned. After the successful connection, I am supposed to start sending headers to the server I’ve successfully connected to:
...
char *request_header = "HEAD / HTTP/1.0\r\n";
int response_size = 512;
char *response_header = malloc(response_size * sizeof(char));
write(proxy_fd, request_header, strlen(request_header));
read(proxy_fd, response_header, response_size);
printf("Response header:\n%s\n", response_header);
free(response_header);
...
Now, creating a statically-allocated string array is problematic, because the response header can have any size. Is there a way to dynamically allocate the string response_header
?
You must log in or register to comment.
I think a simple approach would be:
read
a chunk of the response into a char array of known size- iterate through the buffer, looking for the CRLF characters that signify the end of the header section
- copy the header into a dynamically-allocated char array
- if you didn’t get to the CRLF characters that signify the end of the header section,
read
more data from the socket into the known-size char array - if it takes multiple
read
operations to get through the header section, then eachread
you can allocate a longer header string, copy your old data to it, and then append the next chunk - when you hit the CRLF, or if
read
indicates no more data is waiting in the socket (eg connection terminated early) then you can throw a null character at the end of your string and that’s the headers
This is a somewhat naive implementation. Instead of reallocating and copying the header string array for each
read
, a linked-list data structure could hold the chunks of buffered data. Then at the end you combine them into a string that’s exactly the right size.