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:
0on success, non-zero on error. - Memory: on success free
*outputwithfree.
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-Encodingheader value (q=quality values are considered). - Parameters:
accept_enc— raw header string orNULL→COMP_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, setsContent-Encodingand 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:
0on success, otherwise error code. - Memory: free
*outputon success.
See also
- http.md — building responses
- fileserver.md — serving static files