Compression

Module <cweb/compress.h> — compression and minify

Compression (Brotli, Gzip) aligned with the Accept-Encoding header, plus minify for text-based assets.

Enumeration CompressionType

  • COMP_NONE, COMP_BR, COMP_GZIP

Compression

int cweb_brotli(const char *input, size_t input_len, char **output, size_t *output_len)

  • Purpose: Compresses data with Brotli.
  • Parameters:
    • input / input_len — input buffer and length.
    • output — output pointer; after call points to newly allocated buffer on success.
    • output_len — written output length.
  • Return: 0 on success, non-zero on error.
  • Memory: on success free *output with free.

int cweb_gzip(const char *input, size_t input_len, char **output, size_t *output_len)

  • Purpose: Compresses data with Gzip (analogous to cweb_brotli).

CompressionType cweb_pick_compression(const char *accept_enc)

  • Purpose: Chooses a strategy from the Accept-Encoding header value (q= quality values are considered).
  • Parameters: accept_enc — raw header string or NULLCOMP_NONE.
  • Return: Preferred CompressionType.

void cweb_auto_compress(Request *req, Response *res)

  • Purpose: Decides from request/response (content type, size, Accept-Encoding) whether to compress and, if so, sets Content-Encoding and adjusts the body.
  • Parameters: current request and response (body replaced/adjusted on success).
  • Notes: Call after building the response body, before serialize/send.

double cweb_extract_q(const char *token)

  • Purpose: Helper to parse q= quality values inside encoding tokens.
  • Parameters: token — single encoding substring.
  • Return: Quality value as double.

Minify

int cweb_minify_asset(const char *input, size_t input_len, const char *content_type, char **output, size_t *output_len)

  • Purpose: Shrinks HTML/CSS/JS content depending on MIME type (whitespace/comments per implementation).
  • Parameters:
    • input / input_len — source text.
    • content_type — e.g. text/html, text/css, application/javascript.
    • output / output_len — output buffer and length (output newly allocated on success).
  • Return: 0 on success, otherwise error code.
  • Memory: free *output on success.

See also