Examples

Serialization

#include <flashhttp/serialization.h>

#define STR_LEN(s)  (sizeof(s) - 1)
#define ARR_SIZE(a) (sizeof(a) / sizeof(a[0]))

/*...*/

const http_header_t headers[] = {
    { .key = "Host",                      .value = "example.com",                       STR_LEN("Host"), STR_LEN("example.com") },
    { .key = "User-Agent",                .value = "Mozilla/5.0",                       STR_LEN("User-Agent"), STR_LEN("Mozilla/5.0") },
    { .key = "Accept",                    .value = "text/html",                         STR_LEN("Accept"), STR_LEN("text/html") },
    { .key = "Accept-Language",           .value = "en-US",                             STR_LEN("Accept-Language"), STR_LEN("en-US") },
    { .key = "Accept-Encoding",           .value = "gzip, deflate, br",                 STR_LEN("Accept-Encoding"), STR_LEN("gzip, deflate, br") },
    { .key = "DNT",                       .value = "1",                                STR_LEN("DNT"), STR_LEN("1") },
    { .key = "Connection",                .value = "keep-alive",                        STR_LEN("Connection"), STR_LEN("keep-alive") },
    { .key = "Referer",                   .value = "https://example.com/previous-page", STR_LEN("Referer"), STR_LEN("https://example.com/previous-page") },
    { .key = "Upgrade-Insecure-Requests", .value = "1",                                 STR_LEN("Upgrade-Insecure-Requests"), STR_LEN("1") },
    { .key = "Sec-Fetch-Dest",            .value = "document",                          STR_LEN("Sec-Fetch-Dest"), STR_LEN("document") },
    { .key = "Sec-Fetch-Mode",            .value = "navigate",                          STR_LEN("Sec-Fetch-Mode"), STR_LEN("navigate") },
    { .key = "Sec-Fetch-Site",            .value = "same-origin",                       STR_LEN("Sec-Fetch-Site"), STR_LEN("same-origin") },
    { .key = "Sec-Fetch-User",            .value = "?1",                                STR_LEN("Sec-Fetch-User"), STR_LEN("?1") }
  };
const char body[] = "This is the body of the request";
const http_request_t request = {
  .method = HTTP_GET,
  .path = "/example/path/resource",
  .path_len = STR_LEN("/example/path/resource"),
  .version = HTTP_1_1,
  .headers = headers,
  .headers_count = ARR_SIZE(headers),
  .body = body,
  .body_len = STR_LEN(body)
};

{
  char serialized_request[4096];
  const uint16_t request_len = http1_serialize(buffer, &request);
  write(sockfd, raw_serialized_data, data_len);
}

{
  http1_serialize_write(sockfd, &request);
}

/*...*/

Deserialization

#include <flashhttp/deserialization.h>

/*...*/

char response_buffer[4096] = {0};
const uint32_t len = read(sockfd, buffer, sizeof(buffer));

http_header_t headers[HEADER_MAP_CAPACITY(7)] = {0};
http_response_t response = { .headers = headers, .headers_count = ARR_SIZE(headers) };
const uint32_t len = http1_deserialize(buffer, sizeof(buffer), &response);

/*...*/