4

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?

top 1 comments
sorted by: hot top controversial new old
[-] OneCardboardBox@lemmy.sdf.org 3 points 1 week ago* (last edited 1 week ago)

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 each read 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.

this post was submitted on 08 Oct 2024
4 points (100.0% liked)

The C Programming Language

632 readers
5 users here now

Everything related to the C programming language.

founded 5 years ago
MODERATORS