22#include <brotli/encode.h>
24module AP_MODULE_DECLARE_DATA brotli_module;
102 return "BrotliCompressionQuality must be between 0 and 11";
117 return "BrotliCompressionWindow must be between 10 and 24";
132 return "BrotliCompressionMaxInputBlock must be between 16 and 24";
155 return "BrotliAlterETag accepts only 'AddSuffix', 'NoChange' and 'Remove'";
227 "Error while compressing data");
248 ctx->bb->bucket_alloc);
280 "Error while compressing data");
297 ctx->bb->bucket_alloc);
347 const char *q =
NULL;
371 while (token && *token) {
372 if (
strcmp(token,
"identity") != 0 &&
373 strcmp(token,
"7bit") != 0 &&
374 strcmp(token,
"8bit") != 0 &&
375 strcmp(token,
"binary") != 0) {
404 while (*accepts ==
';') {
409 if (*accepts ==
',') {
417 while (*accepts ==
';') {
422 "token: '%s' - q: '%s'", token ? token :
"NULL", q);
426 if (!token || token[0] ==
'\0' ||
427 (q && strlen(q) >= 3 &&
strncmp(
"q=0.000", q, strlen(q)) == 0)) {
465 if (
len > 2 && etag[
len - 1] ==
'"') {
480 f->c->bucket_alloc,
r->
pool);
515 if (
ctx->total_in > 0) {
580 "Set a note to report on compression ratio"),
583 "Compression quality between 0 and 11 (higher quality means "
584 "slower compression)"),
587 "Sliding window size between 10 and 24 (larger windows can "
588 "improve compression, but require more memory)"),
591 "Maximum input block size between 16 and 24 (larger block "
592 "sizes require more memory)"),
595 "Set how mod_brotli should modify ETag response headers: "
596 "'AddSuffix' (default), 'NoChange', 'Remove'"),
const char apr_size_t len
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
#define ap_get_module_config(v, m)
#define AP_DECLARE_MODULE(foo)
#define AP_INIT_TAKE12(directive, func, mconfig, where, help)
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
ap_filter_rec_t * ap_register_output_filter(const char *name, ap_out_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype)
void ap_remove_output_filter(ap_filter_t *f)
#define APR_BUCKET_IS_FLUSH(e)
#define APR_BUCKET_REMOVE(e)
#define APR_BUCKET_IS_METADATA(e)
#define APR_BRIGADE_INSERT_TAIL(b, e)
#define APR_BRIGADE_EMPTY(b)
#define apr_bucket_delete(e)
#define APR_BUCKET_IS_EOS(e)
apr_brigade_flush void * ctx
apr_size_t void(* free_func)(void *data)
#define APR_BRIGADE_FIRST(b)
#define apr_bucket_read(e, str, len, block)
#define HTTP_NOT_MODIFIED
#define STANDARD20_MODULE_STUFF
int ap_cstr_casecmp(const char *s1, const char *s2)
char * ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white)
const char int apr_pool_t * pool
#define apr_pcalloc(p, size)
static apr_status_t cleanup_ctx(void *data)
static void * create_server_config(apr_pool_t *p, server_rec *s)
static const char * set_compression_lgblock(cmd_parms *cmd, void *dummy, const char *arg)
static brotli_ctx_t * create_ctx(int quality, int lgwin, int lgblock, apr_bucket_alloc_t *alloc, apr_pool_t *pool)
static void register_hooks(apr_pool_t *p)
static apr_status_t compress_filter(ap_filter_t *f, apr_bucket_brigade *bb)
static const char * set_filter_note(cmd_parms *cmd, void *dummy, const char *arg1, const char *arg2)
static const char * get_content_encoding(request_rec *r)
static const char * set_compression_quality(cmd_parms *cmd, void *dummy, const char *arg)
static const char * set_compression_lgwin(cmd_parms *cmd, void *dummy, const char *arg)
static apr_status_t process_chunk(brotli_ctx_t *ctx, const void *data, apr_size_t len, ap_filter_t *f)
static const command_rec cmds[]
static const char * set_etag_mode(cmd_parms *cmd, void *dummy, const char *arg)
static void * alloc_func(void *opaque, size_t size)
The representation of a filter chain.
BrotliEncoderState * state
const char * note_input_name
const char * note_ratio_name
const char * note_output_name
A structure that represents the current request.
apr_table_t * err_headers_out
apr_table_t * subprocess_env
const char * content_encoding
apr_table_t * headers_out
A structure to store information for each virtual server.
struct ap_conf_vector_t * module_config
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray