Apache HTTPD
Classes | Macros | Typedefs | Functions | Variables
mod_deflate.c File Reference
#include "httpd.h"
#include "http_config.h"
#include "http_log.h"
#include "http_core.h"
#include "apr_lib.h"
#include "apr_strings.h"
#include "apr_general.h"
#include "util_filter.h"
#include "apr_buckets.h"
#include "http_protocol.h"
#include "http_request.h"
#include "http_ssl.h"
#include "apr_want.h"
#include "zlib.h"

Go to the source code of this file.

Classes

struct  deflate_filter_config_t
 
struct  deflate_dirconf_t
 
struct  deflate_ctx_t
 

Macros

#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
 
#define HEAD_CRC   0x02 /* bit 1 set: header CRC present */
 
#define EXTRA_FIELD   0x04 /* bit 2 set: extra field present */
 
#define ORIG_NAME   0x08 /* bit 3 set: original file name present */
 
#define COMMENT   0x10 /* bit 4 set: file comment present */
 
#define RESERVED   0xE0 /* bits 5..7: reserved */
 
#define APR_WANT_STRFUNC
 
#define AP_INFLATE_RATIO_LIMIT   200
 
#define AP_INFLATE_RATIO_BURST   3
 
#define AP_DEFLATE_ETAG_ADDSUFFIX   0
 
#define AP_DEFLATE_ETAG_NOCHANGE   1
 
#define AP_DEFLATE_ETAG_REMOVE   2
 
#define DEFAULT_COMPRESSION   Z_DEFAULT_COMPRESSION
 
#define DEFAULT_WINDOWSIZE   -15
 
#define DEFAULT_MEMLEVEL   9
 
#define DEFAULT_BUFFERSIZE   8096
 
#define VALIDATION_SIZE   8
 
#define NO_UPDATE_CRC   0
 
#define UPDATE_CRC   1
 
#define PROTO_FLAGS   AP_FILTER_PROTO_CHANGE|AP_FILTER_PROTO_CHANGE_LENGTH
 

Typedefs

typedef struct deflate_filter_config_t deflate_filter_config
 
typedef struct deflate_dirconf_t deflate_dirconf_t
 
typedef struct deflate_ctx_t deflate_ctx
 

Functions

static int check_gzip (request_rec *r, apr_table_t *hdrs1, apr_table_t *hdrs2)
 
static void putLong (unsigned char *string, unsigned long x)
 
static unsigned long getLong (unsigned char *string)
 
static void * create_deflate_server_config (apr_pool_t *p, server_rec *s)
 
static void * create_deflate_dirconf (apr_pool_t *p, char *dummy)
 
static const chardeflate_set_window_size (cmd_parms *cmd, void *dummy, const char *arg)
 
static const chardeflate_set_buffer_size (cmd_parms *cmd, void *dummy, const char *arg)
 
static const chardeflate_set_note (cmd_parms *cmd, void *dummy, const char *arg1, const char *arg2)
 
static const chardeflate_set_memlevel (cmd_parms *cmd, void *dummy, const char *arg)
 
static const chardeflate_set_etag (cmd_parms *cmd, void *dummy, const char *arg)
 
static const chardeflate_set_compressionlevel (cmd_parms *cmd, void *dummy, const char *arg)
 
static const chardeflate_set_inflate_limit (cmd_parms *cmd, void *dirconf, const char *arg)
 
static const chardeflate_set_inflate_ratio_limit (cmd_parms *cmd, void *dirconf, const char *arg)
 
static const chardeflate_set_inflate_ratio_burst (cmd_parms *cmd, void *dirconf, const char *arg)
 
static void consume_buffer (deflate_ctx *ctx, deflate_filter_config *c, int len, int crc, apr_bucket_brigade *bb)
 
static int flush_libz_buffer (deflate_ctx *ctx, deflate_filter_config *c, int(*libz_func)(z_streamp, int), int flush, int crc)
 
static apr_status_t deflate_ctx_cleanup (void *data)
 
static void deflate_check_etag (request_rec *r, const char *transform, int etag_opt)
 
static int check_ratio (request_rec *r, deflate_ctx *ctx, const deflate_dirconf_t *dc)
 
static int have_ssl_compression (request_rec *r)
 
static apr_status_t deflate_out_filter (ap_filter_t *f, apr_bucket_brigade *bb)
 
static apr_status_t consume_zlib_flags (deflate_ctx *ctx, const char **data, apr_size_t *len)
 
static apr_status_t deflate_in_filter (ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
 
static apr_status_t inflate_out_filter (ap_filter_t *f, apr_bucket_brigade *bb)
 
static int mod_deflate_post_config (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 
static void register_hooks (apr_pool_t *p)
 

Variables

static const char deflateFilterName [] = "DEFLATE"
 
static const char gzip_header [10]
 
static const char deflate_magic [2] = { '\037', '\213' }
 
static const command_rec deflate_filter_cmds []
 
static int *const aplog_module_index = &( deflate_module.module_index)
 

Macro Definition Documentation

◆ AP_DEFLATE_ETAG_ADDSUFFIX

#define AP_DEFLATE_ETAG_ADDSUFFIX   0

Definition at line 60 of file mod_deflate.c.

◆ AP_DEFLATE_ETAG_NOCHANGE

#define AP_DEFLATE_ETAG_NOCHANGE   1

Definition at line 61 of file mod_deflate.c.

◆ AP_DEFLATE_ETAG_REMOVE

#define AP_DEFLATE_ETAG_REMOVE   2

Definition at line 62 of file mod_deflate.c.

◆ AP_INFLATE_RATIO_BURST

#define AP_INFLATE_RATIO_BURST   3

Definition at line 58 of file mod_deflate.c.

◆ AP_INFLATE_RATIO_LIMIT

#define AP_INFLATE_RATIO_LIMIT   200

Definition at line 57 of file mod_deflate.c.

◆ APR_WANT_STRFUNC

#define APR_WANT_STRFUNC

Definition at line 49 of file mod_deflate.c.

◆ ASCII_FLAG

#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */

Definition at line 29 of file mod_deflate.c.

◆ COMMENT

#define COMMENT   0x10 /* bit 4 set: file comment present */

Definition at line 33 of file mod_deflate.c.

◆ DEFAULT_BUFFERSIZE

#define DEFAULT_BUFFERSIZE   8096

Definition at line 101 of file mod_deflate.c.

◆ DEFAULT_COMPRESSION

#define DEFAULT_COMPRESSION   Z_DEFAULT_COMPRESSION

Definition at line 98 of file mod_deflate.c.

◆ DEFAULT_MEMLEVEL

#define DEFAULT_MEMLEVEL   9

Definition at line 100 of file mod_deflate.c.

◆ DEFAULT_WINDOWSIZE

#define DEFAULT_WINDOWSIZE   -15

Definition at line 99 of file mod_deflate.c.

◆ EXTRA_FIELD

#define EXTRA_FIELD   0x04 /* bit 2 set: extra field present */

Definition at line 31 of file mod_deflate.c.

◆ HEAD_CRC

#define HEAD_CRC   0x02 /* bit 1 set: header CRC present */

Definition at line 30 of file mod_deflate.c.

◆ NO_UPDATE_CRC

#define NO_UPDATE_CRC   0

Definition at line 415 of file mod_deflate.c.

◆ ORIG_NAME

#define ORIG_NAME   0x08 /* bit 3 set: original file name present */

Definition at line 32 of file mod_deflate.c.

◆ PROTO_FLAGS

Definition at line 1908 of file mod_deflate.c.

◆ RESERVED

#define RESERVED   0xE0 /* bits 5..7: reserved */

Definition at line 34 of file mod_deflate.c.

◆ UPDATE_CRC

#define UPDATE_CRC   1

Definition at line 417 of file mod_deflate.c.

◆ VALIDATION_SIZE

#define VALIDATION_SIZE   8

Definition at line 413 of file mod_deflate.c.

Typedef Documentation

◆ deflate_ctx

◆ deflate_dirconf_t

◆ deflate_filter_config

Function Documentation

◆ check_gzip()

static int check_gzip ( request_rec r,
apr_table_t hdrs1,
apr_table_t hdrs2 
)
static

Definition at line 107 of file mod_deflate.c.

◆ check_ratio()

static int check_ratio ( request_rec r,
deflate_ctx ctx,
const deflate_dirconf_t dc 
)
static

Definition at line 536 of file mod_deflate.c.

◆ consume_buffer()

static void consume_buffer ( deflate_ctx ctx,
deflate_filter_config c,
int  len,
int  crc,
apr_bucket_brigade bb 
)
static

Definition at line 419 of file mod_deflate.c.

◆ consume_zlib_flags()

static apr_status_t consume_zlib_flags ( deflate_ctx ctx,
const char **  data,
apr_size_t len 
)
static

Definition at line 1047 of file mod_deflate.c.

◆ create_deflate_dirconf()

static void * create_deflate_dirconf ( apr_pool_t p,
char dummy 
)
static

Definition at line 221 of file mod_deflate.c.

◆ create_deflate_server_config()

static void * create_deflate_server_config ( apr_pool_t p,
server_rec s 
)
static

Definition at line 209 of file mod_deflate.c.

◆ deflate_check_etag()

static void deflate_check_etag ( request_rec r,
const char transform,
int  etag_opt 
)
static

Definition at line 500 of file mod_deflate.c.

◆ deflate_ctx_cleanup()

static apr_status_t deflate_ctx_cleanup ( void *  data)
static

Definition at line 485 of file mod_deflate.c.

◆ deflate_in_filter()

static apr_status_t deflate_in_filter ( ap_filter_t f,
apr_bucket_brigade bb,
ap_input_mode_t  mode,
apr_read_type_e  block,
apr_off_t  readbytes 
)
static

Definition at line 1138 of file mod_deflate.c.

◆ deflate_out_filter()

static apr_status_t deflate_out_filter ( ap_filter_t f,
apr_bucket_brigade bb 
)
static

Definition at line 561 of file mod_deflate.c.

◆ deflate_set_buffer_size()

static const char * deflate_set_buffer_size ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 246 of file mod_deflate.c.

◆ deflate_set_compressionlevel()

static const char * deflate_set_compressionlevel ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 326 of file mod_deflate.c.

◆ deflate_set_etag()

static const char * deflate_set_etag ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 303 of file mod_deflate.c.

◆ deflate_set_inflate_limit()

static const char * deflate_set_inflate_limit ( cmd_parms cmd,
void *  dirconf,
const char arg 
)
static

Definition at line 344 of file mod_deflate.c.

◆ deflate_set_inflate_ratio_burst()

static const char * deflate_set_inflate_ratio_burst ( cmd_parms cmd,
void *  dirconf,
const char arg 
)
static

Definition at line 376 of file mod_deflate.c.

◆ deflate_set_inflate_ratio_limit()

static const char * deflate_set_inflate_ratio_limit ( cmd_parms cmd,
void *  dirconf,
const char arg 
)
static

Definition at line 360 of file mod_deflate.c.

◆ deflate_set_memlevel()

static const char * deflate_set_memlevel ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 286 of file mod_deflate.c.

◆ deflate_set_note()

static const char * deflate_set_note ( cmd_parms cmd,
void *  dummy,
const char arg1,
const char arg2 
)
static

Definition at line 261 of file mod_deflate.c.

◆ deflate_set_window_size()

static const char * deflate_set_window_size ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 229 of file mod_deflate.c.

◆ flush_libz_buffer()

static int flush_libz_buffer ( deflate_ctx ctx,
deflate_filter_config c,
int(*)(z_streamp, int libz_func,
int  flush,
int  crc 
)
static

Definition at line 441 of file mod_deflate.c.

◆ getLong()

static unsigned long getLong ( unsigned char string)
static

Definition at line 201 of file mod_deflate.c.

◆ have_ssl_compression()

static int have_ssl_compression ( request_rec r)
static

Definition at line 551 of file mod_deflate.c.

◆ inflate_out_filter()

static apr_status_t inflate_out_filter ( ap_filter_t f,
apr_bucket_brigade bb 
)
static

Definition at line 1542 of file mod_deflate.c.

◆ mod_deflate_post_config()

static int mod_deflate_post_config ( apr_pool_t pconf,
apr_pool_t plog,
apr_pool_t ptemp,
server_rec s 
)
static

< Module has handled this stage.

Definition at line 1901 of file mod_deflate.c.

◆ putLong()

static void putLong ( unsigned char string,
unsigned long  x 
)
static

Definition at line 191 of file mod_deflate.c.

◆ register_hooks()

static void register_hooks ( apr_pool_t p)
static

Definition at line 1909 of file mod_deflate.c.

Variable Documentation

◆ aplog_module_index

int* const aplog_module_index = &( deflate_module.module_index)
static

Definition at line 1945 of file mod_deflate.c.

◆ deflate_filter_cmds

const command_rec deflate_filter_cmds[]
static
Initial value:
= {
{ "DeflateFilterNote" , deflate_set_note , NULL , 128 , TAKE12, "Set a note to report on compression ratio" },
{ "DeflateWindowSize" , deflate_set_window_size , NULL , 128 , TAKE1, "Set the Deflate window size (1-15)" },
{ "DeflateBufferSize" , deflate_set_buffer_size , NULL , 128 , TAKE1, "Set the Deflate Buffer Size" },
{ "DeflateMemLevel" , deflate_set_memlevel , NULL , 128 , TAKE1, "Set the Deflate Memory Level (1-9)" },
{ "DeflateCompressionLevel" , deflate_set_compressionlevel , NULL , 128 , TAKE1, "Set the Deflate Compression Level (1-9)" },
{ "DeflateInflateLimitRequestBody" , deflate_set_inflate_limit , NULL , ( 1 | 2 | 4 | 8 | 16 ) , TAKE1, "Set a limit on size of inflated input" },
{ "DeflateInflateRatioLimit" , deflate_set_inflate_ratio_limit , NULL , ( 1 | 2 | 4 | 8 | 16 ) , TAKE1, "Set the inflate ratio limit above which inflation is " "aborted (default: " "200" ")" },
{ "DeflateInflateRatioBurst" , deflate_set_inflate_ratio_burst , NULL , ( 1 | 2 | 4 | 8 | 16 ) , TAKE1, "Set the maximum number of following inflate ratios above limit " "(default: " "3" ")" },
{ "DeflateAlterEtag" , deflate_set_etag , NULL , 128 , TAKE1, "Set how mod_deflate should modify ETAG response headers: 'AddSuffix' (default), 'NoChange' (2.2.x behavior), 'Remove'" },
{NULL}
}
@ TAKE12
Definition http_config.h:61
@ TAKE1
Definition http_config.h:51
static const char * deflate_set_inflate_ratio_limit(cmd_parms *cmd, void *dirconf, const char *arg)
static const char * deflate_set_compressionlevel(cmd_parms *cmd, void *dummy, const char *arg)
static const char * deflate_set_etag(cmd_parms *cmd, void *dummy, const char *arg)
static const char * deflate_set_memlevel(cmd_parms *cmd, void *dummy, const char *arg)
static const char * deflate_set_window_size(cmd_parms *cmd, void *dummy, const char *arg)
static const char * deflate_set_inflate_ratio_burst(cmd_parms *cmd, void *dirconf, const char *arg)
static const char * deflate_set_buffer_size(cmd_parms *cmd, void *dummy, const char *arg)
static const char * deflate_set_note(cmd_parms *cmd, void *dummy, const char *arg1, const char *arg2)
static const char * deflate_set_inflate_limit(cmd_parms *cmd, void *dirconf, const char *arg)
return NULL
Definition mod_so.c:359

Definition at line 1920 of file mod_deflate.c.

◆ deflate_magic

const char deflate_magic[2] = { '\037', '\213' }
static

Definition at line 95 of file mod_deflate.c.

◆ deflateFilterName

const char deflateFilterName[] = "DEFLATE"
static

Definition at line 54 of file mod_deflate.c.

◆ gzip_header

const char gzip_header[10]
static
Initial value:
=
{ '\037', '\213', Z_DEFLATED, 0,
0, 0, 0, 0,
0, 0x03
}
apr_size_t size

Definition at line 88 of file mod_deflate.c.