annotate src/http/modules/ngx_http_gzip_filter.c @ 159:981e4af2a425

nginx-0.0.1-2003-10-24-20:10:38 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 24 Oct 2003 16:10:38 +0000
parents d377ee423603
children e7e094d34162
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 #include <ngx_config.h>
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 #include <ngx_core.h>
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 #include <ngx_http.h>
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 #include <zlib.h>
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 typedef struct {
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
10 int enable;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
11 ngx_bufs_t bufs;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
12 int level;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
13 int wbits;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
14 int memlevel;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
15 int no_buffer;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 } ngx_http_gzip_conf_t;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 typedef struct {
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
20 ngx_chain_t *in;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
21 ngx_chain_t *free;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
22 ngx_chain_t *busy;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
23 ngx_chain_t *out;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
24 ngx_chain_t **last_out;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
25 ngx_hunk_t *in_hunk;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
26 ngx_hunk_t *out_hunk;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
27 int hunks;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
28
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
29 off_t length;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
30
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
31 void *preallocated;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
32 char *free_mem;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
33 int allocated;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
35 unsigned flush:4;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
36 unsigned redo:1;
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
37
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
38 u_int crc32;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
39 z_stream zstream;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
40 ngx_http_request_t *request;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 } ngx_http_gzip_ctx_t;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
44 static void *ngx_http_gzip_filter_alloc(void *opaque, u_int items,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
45 u_int size);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
46 static void ngx_http_gzip_filter_free(void *opaque, void *address);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
47
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
48 ngx_inline static int ngx_http_gzip_error(ngx_http_gzip_ctx_t *ctx);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 static int ngx_http_gzip_filter_init(ngx_cycle_t *cycle);
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
50 static void *ngx_http_gzip_create_conf(ngx_conf_t *cf);
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
51 static char *ngx_http_gzip_merge_conf(ngx_conf_t *cf,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
52 void *parent, void *child);
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
53 static char *ngx_http_gzip_set_window(ngx_conf_t *cf, void *post, void *data);
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
54 static char *ngx_http_gzip_set_hash(ngx_conf_t *cf, void *post, void *data);
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
55
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
56
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
57 static ngx_conf_num_bounds_t ngx_http_gzip_comp_level_bounds = {
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
58 ngx_conf_check_num_bounds, 1, 9
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
59 };
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
60
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
61 static ngx_conf_post_handler_pt ngx_http_gzip_set_window_p =
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
62 ngx_http_gzip_set_window;
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
63 static ngx_conf_post_handler_pt ngx_http_gzip_set_hash_p =
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
64 ngx_http_gzip_set_hash;
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
65
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
66
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
67
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
68 static ngx_command_t ngx_http_gzip_filter_commands[] = {
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
69
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
70 {ngx_string("gzip"),
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
71 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
72 ngx_conf_set_flag_slot,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
73 NGX_HTTP_LOC_CONF_OFFSET,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
74 offsetof(ngx_http_gzip_conf_t, enable),
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
75 NULL},
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
76
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
77 {ngx_string("gzip_buffers"),
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
78 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
79 ngx_conf_set_bufs_slot,
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
80 NGX_HTTP_LOC_CONF_OFFSET,
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
81 offsetof(ngx_http_gzip_conf_t, bufs),
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
82 NULL},
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
83
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
84 {ngx_string("gzip_comp_level"),
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
85 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
86 ngx_conf_set_num_slot,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
87 NGX_HTTP_LOC_CONF_OFFSET,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
88 offsetof(ngx_http_gzip_conf_t, level),
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
89 &ngx_http_gzip_comp_level_bounds},
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
90
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
91 {ngx_string("gzip_window"),
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
92 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
93 ngx_conf_set_size_slot,
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
94 NGX_HTTP_LOC_CONF_OFFSET,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
95 offsetof(ngx_http_gzip_conf_t, wbits),
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
96 &ngx_http_gzip_set_window_p},
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
97
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
98 {ngx_string("gzip_hash"),
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
99 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
100 ngx_conf_set_size_slot,
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
101 NGX_HTTP_LOC_CONF_OFFSET,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
102 offsetof(ngx_http_gzip_conf_t, memlevel),
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
103 &ngx_http_gzip_set_hash_p},
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
104
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
105 {ngx_string("gzip_no_buffer"),
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
106 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
107 ngx_conf_set_flag_slot,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
108 NGX_HTTP_LOC_CONF_OFFSET,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
109 offsetof(ngx_http_gzip_conf_t, no_buffer),
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
110 NULL},
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
111
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
112 ngx_null_command
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
113 };
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 static ngx_http_module_t ngx_http_gzip_filter_module_ctx = {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 NULL, /* create main configuration */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 NULL, /* init main configuration */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 NULL, /* create server configuration */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 NULL, /* merge server configuration */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
123 ngx_http_gzip_create_conf, /* create location configuration */
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
124 ngx_http_gzip_merge_conf, /* merge location configuration */
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 };
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 ngx_module_t ngx_http_gzip_filter_module = {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 NGX_MODULE,
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 &ngx_http_gzip_filter_module_ctx, /* module context */
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
131 ngx_http_gzip_filter_commands, /* module directives */
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 NGX_HTTP_MODULE, /* module type */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 ngx_http_gzip_filter_init, /* init module */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 NULL /* init child */
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 };
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
138 static u_char gzheader[10] = { 0x1f, 0x8b, Z_DEFLATED, 0, 0, 0, 0, 0, 0, 3 };
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
139
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
140 #if (HAVE_LITTLE_ENDIAN)
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
141
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
142 struct gztrailer {
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
143 u_int crc32;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
144 u_int zlen;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
145 };
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
146
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
147 #else /* HAVE_BIG_ENDIAN */
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
148
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
149 struct gztrailer {
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
150 u_char crc32[4];
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
151 u_char zlen[4];
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
152 };
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
153
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
154 #endif
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
155
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
157 static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
158 static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 static int ngx_http_gzip_header_filter(ngx_http_request_t *r)
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 {
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
163 ngx_http_gzip_ctx_t *ctx;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
164 ngx_http_gzip_conf_t *conf;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
165
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
166 conf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_filter_module);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
167
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
168 if (!conf->enable
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
169 || r->headers_out.status != NGX_HTTP_OK
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
170 || r->header_only
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
171 || r->main
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
172 /* TODO: conf->http_version */
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
173 || (r->headers_out.content_encoding
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
174 && r->headers_out.content_encoding->value.len)
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
175 || r->headers_in.accept_encoding == NULL
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
176 || ngx_strstr(r->headers_in.accept_encoding->value.data, "gzip") == NULL
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
177 )
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
178 {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
179 return ngx_http_next_header_filter(r);
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
180 }
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
181
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
182 /* TODO: "text/html" -> custom types */
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
183 if (r->headers_out.content_type
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
184 && ngx_strncasecmp(r->headers_out.content_type->value.data,
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
185 "text/html", 5) != 0)
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
187 return ngx_http_next_header_filter(r);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 ngx_http_create_ctx(r, ctx, ngx_http_gzip_filter_module,
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
191 sizeof(ngx_http_gzip_ctx_t), NGX_ERROR);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
192 ctx->request = r;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
194 ngx_test_null(r->headers_out.content_encoding,
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
195 ngx_push_table(r->headers_out.headers),
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
196 NGX_ERROR);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
197
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
198 r->headers_out.content_encoding->key.len = 0;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
199 r->headers_out.content_encoding->key.data = NULL;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
200 r->headers_out.content_encoding->value.len = 4;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
201 r->headers_out.content_encoding->value.data = "gzip";
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
202
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
203 ctx->length = r->headers_out.content_length_n;
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
204 r->headers_out.content_length_n = -1;
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
205 r->headers_out.content_length = NULL;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
206 r->filter |= NGX_HTTP_FILTER_NEED_IN_MEMORY;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
208 return ngx_http_next_header_filter(r);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 static int ngx_http_gzip_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 {
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
214 int rc, wbits, memlevel, zin, zout, last;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
215 struct gztrailer *trailer;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
216 ngx_hunk_t *h;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
217 ngx_chain_t *cl;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 ngx_http_gzip_ctx_t *ctx;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 ngx_http_gzip_conf_t *conf;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 ctx = ngx_http_get_module_ctx(r, ngx_http_gzip_filter_module);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 if (ctx == NULL) {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
224 return ngx_http_next_body_filter(r, in);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227 conf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_filter_module);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
229 if (ctx->preallocated == NULL) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
230 wbits = conf->wbits;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
231 memlevel = conf->memlevel;
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
232
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
233 if (ctx->length > 0) {
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
234
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
235 /* the actual zlib window size is smaller by 262 bytes */
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
236
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
237 while (ctx->length < ((1 << (wbits - 1)) - 262)) {
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
238 wbits--;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
239 memlevel--;
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
240 }
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
241 }
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
242
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
243 /*
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
244 * We preallocate a memory for zlib in one hunk (200K-400K), this
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
245 * dicreases a number of malloc() and free() calls and also probably
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
246 * dicreases a number of syscalls.
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
247 * Besides we free() this memory as soon as the gzipping will complete
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
248 * and do not wait while a whole response will be sent to a client.
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
249 *
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
250 * 8K is for zlib deflate_state (~6K).
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
251 *
157
70b36c805682 nginx-0.0.1-2003-10-23-19:54:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
252 * TODO: 64-bit, round to PAGE_SIZE, autoconf of deflate_state size
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
253 */
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
254
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
255 ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9));
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
256
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
257 ngx_test_null(ctx->preallocated, ngx_palloc(r->pool, ctx->allocated),
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
258 NGX_ERROR);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
259 ctx->free_mem = ctx->preallocated;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
260
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
261 ctx->zstream.zalloc = ngx_http_gzip_filter_alloc;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
262 ctx->zstream.zfree = ngx_http_gzip_filter_free;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
263 ctx->zstream.opaque = ctx;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
264
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
265 rc = deflateInit2(&ctx->zstream, conf->level, Z_DEFLATED,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
266 -wbits, memlevel, Z_DEFAULT_STRATEGY);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 if (rc != Z_OK) {
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
269 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 "deflateInit2() failed: %d", rc);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 return ngx_http_gzip_error(ctx);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 ngx_test_null(h, ngx_calloc_hunk(r->pool), ngx_http_gzip_error(ctx));
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 h->type = NGX_HUNK_IN_MEMORY|NGX_HUNK_MEMORY;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
277 h->pos = (char *) gzheader;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 h->last = h->pos + 10;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
280 ngx_alloc_link_and_set_hunk(cl, h, r->pool, ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
281 ctx->out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
282 ctx->last_out = &cl->next;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 ctx->crc32 = crc32(0L, Z_NULL, 0);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 ctx->flush = Z_NO_FLUSH;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 if (in) {
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
289 if (ngx_chain_add_copy(r->pool, &ctx->in, in) == NGX_ERROR) {
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
290 return ngx_http_gzip_error(ctx);
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
291 }
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
294 last = NGX_NONE;
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
295
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
296 for ( ;; ) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
297
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 for ( ;; ) {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
300 /* is there a data to gzip ? */
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
301
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
302 if (ctx->zstream.avail_in == 0
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
303 && ctx->flush == Z_NO_FLUSH
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
304 && !ctx->redo) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
305
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
306 if (ctx->in == NULL) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
307 break;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
308 }
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
309
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 ctx->in_hunk = ctx->in->hunk;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311 ctx->in = ctx->in->next;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
313 ctx->zstream.next_in = (u_char *) ctx->in_hunk->pos;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
314 ctx->zstream.avail_in = ctx->in_hunk->last - ctx->in_hunk->pos;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
315
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 if (ctx->in_hunk->type & NGX_HUNK_LAST) {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 ctx->flush = Z_FINISH;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319 } else if (ctx->in_hunk->type & NGX_HUNK_FLUSH) {
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
320 ctx->flush = Z_SYNC_FLUSH;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321 }
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
322
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
323 if (ctx->zstream.avail_in == 0) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
324 if (ctx->flush == Z_NO_FLUSH) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
325 continue;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
326 }
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
327
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
328 } else {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
329 ctx->crc32 = crc32(ctx->crc32, ctx->zstream.next_in,
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
330 ctx->zstream.avail_in);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
331 }
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
332 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
334 /* is there a space for the gzipped data ? */
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
335
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
336 if (ctx->zstream.avail_out == 0) {
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337 if (ctx->free) {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 ctx->out_hunk = ctx->free->hunk;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 ctx->free = ctx->free->next;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
341 } else if (ctx->hunks < conf->bufs.num) {
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342 ngx_test_null(ctx->out_hunk,
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
343 ngx_create_temp_hunk(r->pool, conf->bufs.size,
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 0, 0),
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 ngx_http_gzip_error(ctx));
154
eac26585476e nginx-0.0.1-2003-10-22-11:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 153
diff changeset
346 ctx->out_hunk->tag = (ngx_hunk_tag_t)
eac26585476e nginx-0.0.1-2003-10-22-11:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 153
diff changeset
347 &ngx_http_gzip_filter_module;
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
348 ctx->out_hunk->type |= NGX_HUNK_RECYCLED;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
349 ctx->hunks++;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 } else {
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
352 break;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
355 ctx->zstream.next_out = (u_char *) ctx->out_hunk->pos;
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
356 ctx->zstream.avail_out = conf->bufs.size;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
359 ngx_log_debug(r->connection->log, "deflate(): %08x %08x %d %d %d" _
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
360 ctx->zstream.next_in _ ctx->zstream.next_out _
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
361 ctx->zstream.avail_in _ ctx->zstream.avail_out _ ctx->flush);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
362
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
363 rc = deflate(&ctx->zstream, ctx->flush);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364 if (rc != Z_OK && rc != Z_STREAM_END) {
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
365 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366 "deflate() failed: %d, %d", ctx->flush, rc);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367 return ngx_http_gzip_error(ctx);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
370 ngx_log_debug(r->connection->log, "DEFLATE(): %08x %08x %d %d %d" _
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
371 ctx->zstream.next_in _ ctx->zstream.next_out _
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
372 ctx->zstream.avail_in _ ctx->zstream.avail_out _ rc);
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
373
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
374 ctx->in_hunk->pos = (char *) ctx->zstream.next_in;
159
981e4af2a425 nginx-0.0.1-2003-10-24-20:10:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 158
diff changeset
375 ctx->out_hunk->last = (char *) ctx->zstream.next_out;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
377 if (ctx->zstream.avail_out == 0) {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
378 ngx_alloc_link_and_set_hunk(cl, ctx->out_hunk, r->pool,
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
379 ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
380 *ctx->last_out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
381 ctx->last_out = &cl->next;
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
382 ctx->redo = 1;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 } else {
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
385 ctx->redo = 0;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 if (ctx->flush == Z_SYNC_FLUSH) {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 ctx->out_hunk->type |= NGX_HUNK_FLUSH;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 ctx->flush = Z_NO_FLUSH;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
390
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
391 ngx_alloc_link_and_set_hunk(cl, ctx->out_hunk, r->pool,
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
392 ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
393 *ctx->last_out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
394 ctx->last_out = &cl->next;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
395
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 break;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 } else if (ctx->flush == Z_FINISH) {
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
399
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
400 /* rc == Z_STREAM_END */
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
401
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
402 zin = ctx->zstream.total_in;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
403 zout = 10 + ctx->zstream.total_out + 8;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
404
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
405 rc = deflateEnd(&ctx->zstream);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
406 if (rc != Z_OK) {
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
407 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
408 "deflateEnd() failed: %d", rc);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
409 return ngx_http_gzip_error(ctx);
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
410 }
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
411
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
412 ngx_pfree(r->pool, ctx->preallocated);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
413
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
414 ctx->flush = Z_NO_FLUSH;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
415
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
416 ngx_alloc_link_and_set_hunk(cl, ctx->out_hunk, r->pool,
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
417 ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
418 *ctx->last_out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
419 ctx->last_out = &cl->next;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
420
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
421 if (ctx->zstream.avail_out >= 8) {
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
422 trailer = (struct gztrailer *) ctx->out_hunk->last;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
423 ctx->out_hunk->type |= NGX_HUNK_LAST;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
424 ctx->out_hunk->last += 8;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
425
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
426 } else {
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
427 ngx_test_null(h,
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
428 ngx_create_temp_hunk(r->pool, 8, 0, 0),
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
429 ngx_http_gzip_error(ctx));
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
430
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
431 h->type |= NGX_HUNK_LAST;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
432
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
433 ngx_alloc_link_and_set_hunk(cl, h, r->pool,
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
434 ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
435 *ctx->last_out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
436 ctx->last_out = &cl->next;
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
437 trailer = (struct gztrailer *) h->pos;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
438 h->last += 8;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
439 }
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
440
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
441 #if (HAVE_LITTLE_ENDIAN)
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
442 trailer->crc32 = ctx->crc32;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
443 trailer->zlen = zin;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
444 #else
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
445 /* STUB */
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
446 #endif
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
447
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
448 ctx->zstream.avail_in = 0;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
449 ctx->zstream.avail_out = 0;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
450
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
451 ngx_http_delete_ctx(r, ngx_http_gzip_filter_module);
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 135
diff changeset
452
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
453 break;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
455 } else if (conf->no_buffer && ctx->in == NULL) {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
456 ngx_alloc_link_and_set_hunk(cl, ctx->out_hunk, r->pool,
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
457 ngx_http_gzip_error(ctx));
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
458 *ctx->last_out = cl;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
459 ctx->last_out = &cl->next;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
460
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461 break;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
464 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
465
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
466 if (ctx->out == NULL && last != NGX_NONE) {
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
467 return last;
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
468 }
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
469
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
470 last = ngx_http_next_body_filter(r, ctx->out);
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
471
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
472 if (last == NGX_ERROR) {
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
473 return ngx_http_gzip_error(ctx);
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
474 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
475
154
eac26585476e nginx-0.0.1-2003-10-22-11:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 153
diff changeset
476 ngx_chain_update_chains(&ctx->free, &ctx->busy, &ctx->out,
eac26585476e nginx-0.0.1-2003-10-22-11:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 153
diff changeset
477 (ngx_hunk_tag_t) &ngx_http_gzip_filter_module);
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
478 ctx->last_out = &ctx->out;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
483 static void *ngx_http_gzip_filter_alloc(void *opaque, u_int items, u_int size)
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
484 {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
485 ngx_http_gzip_ctx_t *ctx = opaque;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
486
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
487 int alloc;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
488 void *p;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
489
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
490
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
491 alloc = items * size;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
492 if (alloc % 512 != 0) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
493
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
494 /* we allocate 8K for zlib deflate_state (~6K) */
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
495 /* TODO: PAGE_SIZE */
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
496
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
497 alloc = (alloc + 4095) & ~4095;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
498 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
499
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
500 if (alloc <= ctx->allocated) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
501 p = ctx->free_mem;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
502 ctx->free_mem += alloc;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
503 ctx->allocated -= alloc;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
504
159
981e4af2a425 nginx-0.0.1-2003-10-24-20:10:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 158
diff changeset
505 #if 1
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
506 ngx_log_debug(ctx->request->connection->log, "ALLOC: %d:%d:%d:%08X" _
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
507 items _ size _ alloc _ p);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
508 #endif
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
509
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
510 return p;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
511 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
512
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
513 ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0,
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
514 "gzip filter failed to use preallocated memory: %d of %d",
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
515 items * size, ctx->allocated);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
516
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
517 p = ngx_palloc(ctx->request->pool, items * size);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
518
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
519 return p;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
520 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
521
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
522
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
523 static void ngx_http_gzip_filter_free(void *opaque, void *address)
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
524 {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
525 ngx_http_gzip_ctx_t *ctx = opaque;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
526
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
527 #if 0
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
528 ngx_log_debug(ctx->request->connection->log, "FREE: %08X" _ address);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
529 #endif
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
530 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
531
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
532
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
533 ngx_inline static int ngx_http_gzip_error(ngx_http_gzip_ctx_t *ctx)
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
534 {
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
535 deflateEnd(&ctx->zstream);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
536
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
537 ngx_pfree(ctx->request->pool, ctx->preallocated);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538
135
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
539 ctx->zstream.avail_in = 0;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
540 ctx->zstream.avail_out = 0;
e29909bd9b8a nginx-0.0.1-2003-09-28-23:29:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 134
diff changeset
541
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
542 return NGX_ERROR;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543 }
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
546 static int ngx_http_gzip_filter_init(ngx_cycle_t *cycle)
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
547 {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
548 ngx_http_next_header_filter = ngx_http_top_header_filter;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
549 ngx_http_top_header_filter = ngx_http_gzip_header_filter;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
550
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 154
diff changeset
551 ngx_http_next_body_filter = ngx_http_top_body_filter;
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
552 ngx_http_top_body_filter = ngx_http_gzip_body_filter;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
553
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
554 return NGX_OK;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
555 }
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
556
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
557
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
558 static void *ngx_http_gzip_create_conf(ngx_conf_t *cf)
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
559 {
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
560 ngx_http_gzip_conf_t *conf;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
561
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
562 ngx_test_null(conf,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
563 ngx_pcalloc(cf->pool, sizeof(ngx_http_gzip_conf_t)),
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
564 NGX_CONF_ERROR);
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
565
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
566 conf->enable = NGX_CONF_UNSET;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
567 /* conf->bufs.num = 0; */
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
568 conf->no_buffer = NGX_CONF_UNSET;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
569 conf->level = NGX_CONF_UNSET;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
570 conf->wbits = NGX_CONF_UNSET;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
571 conf->memlevel = NGX_CONF_UNSET;
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
572
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
573 return conf;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
574 }
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
575
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
576
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
577 static char *ngx_http_gzip_merge_conf(ngx_conf_t *cf,
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
578 void *parent, void *child)
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
579 {
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
580 ngx_http_gzip_conf_t *prev = parent;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
581 ngx_http_gzip_conf_t *conf = child;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
582
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
583 ngx_conf_merge_value(conf->enable, prev->enable, 0);
141
656d468f4ead nginx-0.0.1-2003-10-08-19:32:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 136
diff changeset
584 ngx_conf_merge_bufs_value(conf->bufs, prev->bufs, 4,
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
585 /* STUB: PAGE_SIZE */ 4096);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
586 ngx_conf_merge_value(conf->level, prev->level, 1);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
587 ngx_conf_merge_value(conf->wbits, prev->wbits, MAX_WBITS);
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
588 ngx_conf_merge_value(conf->memlevel, prev->memlevel, MAX_MEM_LEVEL - 1);
134
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
589 ngx_conf_merge_value(conf->no_buffer, prev->no_buffer, 0);
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
590
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
591 return NGX_CONF_OK;
d57c6835225c nginx-0.0.1-2003-09-26-09:45:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
592 }
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
593
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
594
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
595 static char *ngx_http_gzip_set_window(ngx_conf_t *cf, void *post, void *data)
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
596 {
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
597 int *np = data;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
598
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
599 int wbits, wsize;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
600
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
601
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
602 ngx_conf_log_error(NGX_LOG_INFO, cf, 0, "WBITS: %d", *np);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
603
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
604 wbits = 15;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
605 for (wsize = 32 * 1024; wsize > 256; wsize >>= 1) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
606
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
607 if (wsize == *np) {
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
608 *np = wbits;
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
609 ngx_conf_log_error(NGX_LOG_INFO, cf, 0, "WBITS: %d", *np);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
610 return NULL;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
611 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
612
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
613 wbits--;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
614 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
615
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
616 return "must be 512, 1k, 2k, 4k, 8k, 16k, or 32k";
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
617 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
618
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
619
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
620 static char *ngx_http_gzip_set_hash(ngx_conf_t *cf, void *post, void *data)
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
621 {
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
622 int *np = data;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
623
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
624 int memlevel, hsize;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
625
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
626
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
627 ngx_conf_log_error(NGX_LOG_INFO, cf, 0, "MEMLEVEL: %d", *np);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
628
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
629 memlevel = 9;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
630 for (hsize = 128 * 1024; hsize > 256; hsize >>= 1) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
631
158
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
632 if (hsize == *np) {
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
633 *np = memlevel;
d377ee423603 nginx-0.0.1-2003-10-24-10:53:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 157
diff changeset
634 ngx_conf_log_error(NGX_LOG_INFO, cf, 0, "MEMLEVEL: %d", *np);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
635 return NULL;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
636 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
637
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
638 memlevel--;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
639 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
640
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
641 return "must be 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, or 128k";
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
642 }