|
|
|
@ -25,7 +25,7 @@
|
|
|
|
|
* deflate.debug <boolean>
|
|
|
|
|
*
|
|
|
|
|
* Actions:
|
|
|
|
|
* deflate [ "encodings": "deflate,gzip,bzip2", "blocksize": 4096, "output-buffer": 4096 ];
|
|
|
|
|
* deflate [ "encodings": "deflate,gzip,bzip2", "blocksize": 4096, "output-buffer": 4096, "compression-level": 1 ];
|
|
|
|
|
* - options are all optional, default values shown in line above :)
|
|
|
|
|
*
|
|
|
|
|
* Example config:
|
|
|
|
@ -33,6 +33,7 @@
|
|
|
|
|
*
|
|
|
|
|
* Author:
|
|
|
|
|
* Copyright (c) 2009 Stefan Bühler
|
|
|
|
|
* Copyright (c) 2010 Thomas Porzelt
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <lighttpd/base.h>
|
|
|
|
@ -78,7 +79,7 @@ typedef struct deflate_config deflate_config;
|
|
|
|
|
struct deflate_config {
|
|
|
|
|
liPlugin *p;
|
|
|
|
|
guint allowed_encodings;
|
|
|
|
|
guint blocksize, output_buffer;
|
|
|
|
|
guint blocksize, output_buffer, compression_level;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**********************************************************************************/
|
|
|
|
@ -125,7 +126,7 @@ static void deflate_context_zlib_free(deflate_context_zlib *ctx) {
|
|
|
|
|
static deflate_context_zlib* deflate_context_zlib_create(liVRequest *vr, deflate_config *conf, gboolean is_gzip) {
|
|
|
|
|
deflate_context_zlib *ctx = g_slice_new0(deflate_context_zlib);
|
|
|
|
|
z_stream *z = &ctx->z;
|
|
|
|
|
guint compression_level = Z_DEFAULT_COMPRESSION;
|
|
|
|
|
guint compression_level = conf->compression_level;
|
|
|
|
|
guint window_size = -MAX_WBITS; /* supress zlib-header */
|
|
|
|
|
guint mem_level = 8;
|
|
|
|
|
|
|
|
|
@ -342,7 +343,7 @@ static void deflate_context_bzip2_free(deflate_context_bzip2 *ctx) {
|
|
|
|
|
static deflate_context_bzip2* deflate_context_bzip2_create(liVRequest *vr, deflate_config *conf) {
|
|
|
|
|
deflate_context_bzip2 *ctx = g_slice_new0(deflate_context_bzip2);
|
|
|
|
|
bz_stream *bz = &ctx->bz;
|
|
|
|
|
guint compression_level = 9;
|
|
|
|
|
guint compression_level = conf->compression_level;
|
|
|
|
|
|
|
|
|
|
ctx->conf = *conf;
|
|
|
|
|
|
|
|
|
@ -663,7 +664,8 @@ static void deflate_free(liServer *srv, gpointer param) {
|
|
|
|
|
static const GString
|
|
|
|
|
don_encodings = { CONST_STR_LEN("encodings"), 0 },
|
|
|
|
|
don_blocksize = { CONST_STR_LEN("blocksize"), 0 },
|
|
|
|
|
don_outputbuffer = { CONST_STR_LEN("output-buffer"), 0 }
|
|
|
|
|
don_outputbuffer = { CONST_STR_LEN("output-buffer"), 0 },
|
|
|
|
|
don_compression_level = { CONST_STR_LEN("compression-level"), 0 }
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
static liAction* deflate_create(liServer *srv, liWorker *wrk, liPlugin* p, liValue *val, gpointer userdata) {
|
|
|
|
@ -680,6 +682,7 @@ static liAction* deflate_create(liServer *srv, liWorker *wrk, liPlugin* p, liVal
|
|
|
|
|
conf->allowed_encodings = encoding_available_mask;
|
|
|
|
|
conf->blocksize = 16*1024;
|
|
|
|
|
conf->output_buffer = 4*1024;
|
|
|
|
|
conf->compression_level = 1;
|
|
|
|
|
|
|
|
|
|
if (val) {
|
|
|
|
|
GHashTable *ht = val->data.hash;
|
|
|
|
@ -709,6 +712,12 @@ static liAction* deflate_create(liServer *srv, liWorker *wrk, liPlugin* p, liVal
|
|
|
|
|
goto option_failed;
|
|
|
|
|
}
|
|
|
|
|
conf->output_buffer = value->data.number;
|
|
|
|
|
} else if (g_string_equal(key, &don_compression_level)) {
|
|
|
|
|
if (value->type != LI_VALUE_NUMBER || value->data.number <= 0 || value->data.number > 9) {
|
|
|
|
|
ERROR(srv, "deflate option '%s' expects an integer between 1 and 9 as parameter", don_compression_level.str);
|
|
|
|
|
goto option_failed;
|
|
|
|
|
}
|
|
|
|
|
conf->compression_level = value->data.number;
|
|
|
|
|
} else {
|
|
|
|
|
ERROR(srv, "unknown option for deflate '%s'", key->str);
|
|
|
|
|
goto option_failed;
|
|
|
|
|