Mercurial > hg > ngx_http_bytes_filter_module
annotate ngx_http_bytes_filter_module.c @ 22:801de8ae9c0b default tip
Fix comment spelling.
Found by gcc7 (-Wimplicit-fallthrough).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 26 Apr 2017 19:40:45 +0300 |
parents | 180d415c0e59 |
children |
rev | line source |
---|---|
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 /* |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 * Copyright (C) Maxim Dounin |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 #include <ngx_config.h> |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 #include <ngx_core.h> |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 #include <ngx_http.h> |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 typedef struct { |
4 | 12 ngx_flag_t enable; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 } ngx_http_bytes_conf_t; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 typedef struct { |
4 | 17 off_t start; |
18 off_t end; | |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 } ngx_http_bytes_t; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 typedef struct { |
4 | 23 off_t offset; |
24 ngx_array_t ranges; | |
25 ngx_http_bytes_t *range; | |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 } ngx_http_bytes_ctx_t; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 static void *ngx_http_bytes_create_conf(ngx_conf_t *cf); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 static char *ngx_http_bytes_merge_conf(ngx_conf_t *cf, void *parent, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 void *child); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 static ngx_int_t ngx_http_bytes_init(ngx_conf_t *cf); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 static ngx_command_t ngx_http_bytes_commands[] = { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 { ngx_string("bytes"), |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 ngx_conf_set_flag_slot, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 NGX_HTTP_LOC_CONF_OFFSET, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 offsetof(ngx_http_bytes_conf_t, enable), |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 NULL }, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 ngx_null_command |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 }; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 static ngx_http_module_t ngx_http_bytes_module_ctx = { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 NULL, /* preconfiguration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 ngx_http_bytes_init, /* postconfiguration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 NULL, /* create main configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 NULL, /* init main configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 NULL, /* create server configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 NULL, /* merge server configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 ngx_http_bytes_create_conf, /* create location configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 ngx_http_bytes_merge_conf /* merge location configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 }; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 ngx_module_t ngx_http_bytes_filter_module = { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 NGX_MODULE_V1, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 &ngx_http_bytes_module_ctx, /* module context */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 ngx_http_bytes_commands, /* module directives */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 NGX_HTTP_MODULE, /* module type */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 NULL, /* init master */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 NULL, /* init module */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 NULL, /* init process */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 NULL, /* init thread */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 NULL, /* exit thread */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 NULL, /* exit process */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 NULL, /* exit master */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 NGX_MODULE_V1_PADDING |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 }; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 static ngx_http_output_header_filter_pt ngx_http_next_header_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 static ngx_http_output_body_filter_pt ngx_http_next_body_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 ngx_http_bytes_header_filter(ngx_http_request_t *r) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 { |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
86 u_char *p, *last; |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
87 off_t start, end, len; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
88 ngx_uint_t suffix, bad; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
89 ngx_http_bytes_t *range; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 ngx_http_bytes_conf_t *conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 ngx_http_bytes_ctx_t *ctx; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
92 enum { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
93 sw_start = 0, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
94 sw_first_byte_pos, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
95 sw_first_byte_pos_n, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
96 sw_last_byte_pos, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
97 sw_last_byte_pos_n, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
98 sw_done |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
99 } state = 0; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 conf = ngx_http_get_module_loc_conf(r, ngx_http_bytes_filter_module); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 if (!conf->enable || r->args.len == 0) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 p = (u_char *) ngx_strnstr(r->args.data, "bytes=", r->args.len); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 if (p == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 "bytes header filter: r %p", r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 p += sizeof("bytes=") - 1; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
117 last = r->args.data + r->args.len; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 /* create context */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_bytes_ctx_t)); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 if (ctx == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 return NGX_ERROR; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 if (ngx_array_init(&ctx->ranges, r->pool, 1, sizeof(ngx_http_bytes_t)) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 == NGX_ERROR) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 return NGX_ERROR; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 /* |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 * bytes= contain ranges compatible with RFC 2616, "14.35.1 Byte Ranges", |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 * but no whitespaces permitted |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
137 bad = 0; |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
138 len = 0; |
7 | 139 suffix = 0; |
140 start = 0; | |
141 end = 0; | |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
142 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
143 while (p < last) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
144 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
145 switch (state) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
146 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
147 case sw_start: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
148 case sw_first_byte_pos: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
149 if (*p == '-') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
150 p++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
151 suffix = 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
152 state = sw_last_byte_pos; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
153 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
154 } |
13
b85e679606f4
Fix first-byte-pos parsing in non-first range.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
155 start = 0; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
156 state = sw_first_byte_pos_n; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
157 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
158 /* fall through */ |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
159 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
160 case sw_first_byte_pos_n: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
161 if (*p == '-') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
162 p++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
163 state = sw_last_byte_pos; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
164 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
165 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
166 if (*p < '0' || *p > '9') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
167 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
168 "bytes header filter: unexpected char '%c'" |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
169 " (expected first-byte-pos)", *p); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
170 bad = 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
171 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
172 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
173 start = start * 10 + *p - '0'; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
174 p++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
175 break; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
177 case sw_last_byte_pos: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
178 if (*p == ',' || *p == '&' || *p == ';') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
179 /* no last byte pos, assume end of file */ |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
180 end = r->headers_out.content_length_n - 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
181 state = sw_done; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
182 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
183 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
184 end = 0; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
185 state = sw_last_byte_pos_n; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
186 |
22 | 187 /* fall through */ |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
188 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
189 case sw_last_byte_pos_n: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
190 if (*p == ',' || *p == '&' || *p == ';') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
191 state = sw_done; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
192 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
193 } |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 if (*p < '0' || *p > '9') { |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
195 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
196 "bytes header filter: unexpected char '%c'" |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
197 " (expected last-byte-pos)", *p); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
198 bad = 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
199 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
200 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
201 end = end * 10 + *p - '0'; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
202 p++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
203 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
204 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
205 case sw_done: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
206 range = ngx_array_push(&ctx->ranges); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
207 if (range == NULL) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
208 return NGX_ERROR; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
209 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
210 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
211 if (suffix) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
212 start = r->headers_out.content_length_n - end; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
213 end = r->headers_out.content_length_n - 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
214 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
215 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
216 /* note: range->end isn't inclusive, while last-byte-pos is */ |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
217 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
218 range->start = start; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
219 range->end = end + 1; |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
220 len += range->end - range->start; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
221 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
222 if (*p == ',') { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
223 p++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
224 state = sw_first_byte_pos; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 break; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
228 goto done; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
230 } |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
231 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
232 if (bad) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
233 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
234 "bytes header filter: invalid range specification"); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
235 return ngx_http_next_header_filter(r); |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
237 } |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
238 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
239 switch (state) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
240 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
241 case sw_last_byte_pos: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
242 end = r->headers_out.content_length_n - 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
243 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
244 /* fall through */ |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
245 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
246 case sw_last_byte_pos_n: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
247 range = ngx_array_push(&ctx->ranges); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
248 if (range == NULL) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
249 return NGX_ERROR; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
250 } |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
251 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
252 if (suffix) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
253 start = r->headers_out.content_length_n - end; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
254 end = r->headers_out.content_length_n - 1; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
255 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
256 |
12
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
257 if (start > end) { |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
258 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
259 "bytes header filter: invalid range specification"); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
260 return ngx_http_next_header_filter(r); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
261 } |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
262 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
263 range->start = start; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
264 range->end = end + 1; |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
265 len += range->end - range->start; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
266 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
267 break; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
268 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
269 default: |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
270 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
12
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
271 "bytes header filter: invalid range specification"); |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
272 return ngx_http_next_header_filter(r); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
273 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
274 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
275 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
276 done: |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
277 r->headers_out.content_length_n = len; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
278 |
9
4206defe5590
Clear Content-Length header if it's here.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
279 if (r->headers_out.content_length) { |
4206defe5590
Clear Content-Length header if it's here.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
280 r->headers_out.content_length->hash = 0; |
4206defe5590
Clear Content-Length header if it's here.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
281 r->headers_out.content_length = NULL; |
4206defe5590
Clear Content-Length header if it's here.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
282 } |
4206defe5590
Clear Content-Length header if it's here.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
283 |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
284 ngx_http_set_ctx(r, ctx, ngx_http_bytes_filter_module); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
285 |
10 | 286 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
287 "bytes header filter: new length %O", |
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
288 r->headers_out.content_length_n); |
13a2fbcc8bc4
Change Content-Length to match total requested length.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
289 |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
290 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
291 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
292 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
293 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
294 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
295 ngx_http_bytes_body_filter(ngx_http_request_t *r, ngx_chain_t *in) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
296 { |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
297 off_t size; |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
298 ngx_uint_t i; |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
299 ngx_chain_t **ll, *cl, *dcl, *out; |
4 | 300 ngx_buf_t *buf, *b; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
301 ngx_http_bytes_ctx_t *ctx; |
4 | 302 ngx_http_bytes_t *range, *last; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
303 |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
304 if (in == NULL) { |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
305 return ngx_http_next_body_filter(r, in); |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
306 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
307 |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
308 ctx = ngx_http_get_module_ctx(r, ngx_http_bytes_filter_module); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
309 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
310 if (ctx == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
311 return ngx_http_next_body_filter(r, in); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
312 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
313 |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
314 buf = in->buf; |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
315 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
316 if (ngx_buf_special(buf)) { |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
317 return ngx_http_next_body_filter(r, in); |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
318 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
319 |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
320 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
321 "bytes body filter: r %p, in %p", r, in); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
322 |
1
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
323 range = ctx->ranges.elts; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
324 |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
325 for (i = 0; i < ctx->ranges.nelts; i++) { |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
326 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
327 "bytes body filter: %O-%O", range->start, range->end); |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
328 range++; |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
329 } |
6b995d5251ec
Implement bytes= argument parsing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
330 |
4 | 331 range = ctx->range; |
332 | |
333 if (range == NULL) { | |
334 range = ctx->range = ctx->ranges.elts; | |
335 } | |
336 | |
337 last = ctx->ranges.elts; | |
338 last += ctx->ranges.nelts; | |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
339 |
8
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
340 /* optimized version for last range and last buffer */ |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
341 |
8
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
342 if (range == last - 1 && buf->last_buf) { |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
343 |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
344 size = ngx_buf_size(buf); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
345 |
12
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
346 if (range->start > ctx->offset + size || range->end < ctx->offset) { |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
347 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
348 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
349 "bytes body filter: last buffer ignored"); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
350 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
351 buf->pos = buf->last; |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
352 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
353 cl = ngx_alloc_chain_link(r->pool); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
354 if (cl == NULL) { |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
355 return NGX_ERROR; |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
356 } |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
357 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
358 b = ngx_calloc_buf(r->pool); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
359 if (b == NULL) { |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
360 return NGX_ERROR; |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
361 } |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
362 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
363 b->last_buf = 1; |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
364 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
365 cl->buf = b; |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
366 cl->next = NULL; |
19
57365655ee44
Whitespace cleanup, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
18
diff
changeset
|
367 |
12
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
368 return ngx_http_next_body_filter(r, cl); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
369 } |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
370 |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
371 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
372 "bytes body filter: last buffer, %d", size); |
48cdd1bfa48e
Correctly handle last ignored buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
11
diff
changeset
|
373 |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
374 if (buf->in_file) { |
8
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
375 if (range->start > ctx->offset) { |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
376 buf->file_pos += range->start - ctx->offset; |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
377 } |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
378 if (range->end < ctx->offset + size) { |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
379 buf->file_last -= ctx->offset + size - range->end; |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
380 } |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
381 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
382 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
383 if (ngx_buf_in_memory(buf)) { |
8
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
384 if (range->start > ctx->offset) { |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
385 buf->pos += (size_t) (range->start - ctx->offset); |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
386 } |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
387 if (range->end < ctx->offset + size) { |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
388 buf->last -= (size_t) (ctx->offset + size - range->end); |
60d65f2acaed
Optimized version for last range and last buffer.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
389 } |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
390 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
391 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
392 return ngx_http_next_body_filter(r, in); |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
393 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
394 |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
395 out = NULL; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
396 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
397 for (ll = &out, cl = in; cl; cl = cl->next, ctx->offset += size) { |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
398 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
399 buf = cl->buf; |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
400 size = ngx_buf_size(buf); |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
401 |
17
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
402 ngx_log_debug5(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
403 "bytes body filter: b %O, l %d, offset %O, range %O-%O", |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
404 size, buf->last_buf, ctx->offset, |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
405 range->start, range->end); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
406 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
407 if (ngx_buf_special(buf)) { |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
408 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
409 "bytes body filter: special buffer"); |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
410 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
411 /* pass out anyway */ |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
412 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
413 dcl = ngx_alloc_chain_link(r->pool); |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
414 if (dcl == NULL) { |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
415 return NGX_ERROR; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
416 } |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
417 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
418 *ll = dcl; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
419 dcl->buf = buf; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
420 dcl->next = NULL; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
421 ll = &dcl->next; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
422 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
423 continue; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
424 } |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
425 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
426 if (range->start > ctx->offset + size || range->end < ctx->offset) { |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
427 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
428 "bytes body filter: fully ignored buffer"); |
17
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
429 |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
430 buf->pos = buf->last; |
17
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
431 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
432 if (!buf->last_buf) { |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
433 continue; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
434 } |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
435 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
436 /* for last buffer, make sure we pass out empty one */ |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
437 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
438 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
439 "bytes body filter: last buffer ignored"); |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
440 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
441 dcl = ngx_alloc_chain_link(r->pool); |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
442 if (dcl == NULL) { |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
443 return NGX_ERROR; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
444 } |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
445 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
446 b = ngx_calloc_buf(r->pool); |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
447 if (b == NULL) { |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
448 return NGX_ERROR; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
449 } |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
450 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
451 b->last_buf = 1; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
452 |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
453 *ll = dcl; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
454 dcl->buf = b; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
455 dcl->next = NULL; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
456 ll = &dcl->next; |
314242bda1c1
Correctly handle last ignored buffer again.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
457 |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
458 continue; |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
459 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
460 |
4 | 461 next: |
11
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
462 /* we should either free or reuse original buffer */ |
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
463 |
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
464 if (range == last - 1 || range[1].start > ctx->offset + size) { |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
465 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
466 "bytes body filter: reusing original buffer"); |
11
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
467 b = buf; |
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
468 goto fixup; |
47a21c299f11
Fix work with multiple buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
10
diff
changeset
|
469 } |
4 | 470 |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
471 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
472 "bytes body filter: creating new buffer"); |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
473 |
4 | 474 b = ngx_calloc_buf(r->pool); |
475 if (b == NULL) { | |
476 return NGX_ERROR; | |
477 } | |
478 | |
479 b->in_file = buf->in_file; | |
480 b->temporary = buf->temporary; | |
481 b->memory = buf->memory; | |
482 b->mmap = buf->mmap; | |
483 b->file = buf->file; | |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
484 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
485 if (buf->in_file) { |
4 | 486 b->file_pos = buf->file_pos; |
487 b->file_last = buf->file_last; | |
488 } | |
489 | |
490 if (ngx_buf_in_memory(buf)) { | |
491 b->pos = buf->pos; | |
492 b->last = buf->last; | |
493 } | |
494 | |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
495 if (buf->last_buf && range == last - 1) { |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
496 b->last_buf = 1; |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
497 } |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
498 |
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
499 fixup: |
4 | 500 dcl = ngx_alloc_chain_link(r->pool); |
501 if (dcl == NULL) { | |
502 return NGX_ERROR; | |
503 } | |
504 | |
505 *ll = dcl; | |
506 dcl->buf = b; | |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
507 dcl->next = NULL; |
4 | 508 ll = &dcl->next; |
509 | |
510 if (b->in_file) { | |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
511 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
512 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
513 "bytes body filter: in file, %O-%O", |
4 | 514 b->file_pos, b->file_last); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
515 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
516 if (range->start > ctx->offset) { |
4 | 517 b->file_pos += range->start - ctx->offset; |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
518 } |
5
be5e612dd602
More readable calculations, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
519 if (range->end < ctx->offset + size) { |
be5e612dd602
More readable calculations, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
520 b->file_last -= ctx->offset + size - range->end; |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
521 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
522 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
523 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
524 "bytes body filter: in file fixed, %O-%O", |
4 | 525 b->file_pos, b->file_last); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
526 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
527 |
4 | 528 if (ngx_buf_in_memory(b)) { |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
529 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
530 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
531 "bytes body filter: in memory, %p-%p", |
4 | 532 b->pos, b->last); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
533 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
534 if (range->start > ctx->offset) { |
4 | 535 b->pos += (size_t) (range->start - ctx->offset); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
536 } |
5
be5e612dd602
More readable calculations, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
537 if (range->end < ctx->offset + size) { |
be5e612dd602
More readable calculations, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
538 b->last -= (size_t) (ctx->offset + size - range->end); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
539 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
540 |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
541 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
542 "bytes body filter: in memory fixed, %p-%p", |
4 | 543 b->pos, b->last); |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
544 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
545 |
21
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
546 if (range->end < ctx->offset + size |
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
547 && range < last - 1) |
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
548 { |
4 | 549 range++; |
21
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
550 ctx->range = range; |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
551 |
21
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
552 if (range->start > ctx->offset + size) { |
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
553 continue; |
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
554 } |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
555 |
21
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
556 /* next range in same buffer */ |
180d415c0e59
Avoid switching to a range past the last one.
Maxim Dounin <mdounin@mdounin.ru>
parents:
19
diff
changeset
|
557 goto next; |
4 | 558 } |
3
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
559 } |
3e8648918913
Body filter buffers fixup, currently limited to one range only.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
560 |
14
2a8b38acb895
Don't modify chain links passed to us, it's unsafe.
Maxim Dounin <mdounin@mdounin.ru>
parents:
13
diff
changeset
|
561 return ngx_http_next_body_filter(r, out); |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
562 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
563 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
564 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
565 static void * |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
566 ngx_http_bytes_create_conf(ngx_conf_t *cf) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
567 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
568 ngx_http_bytes_conf_t *conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
569 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
570 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_bytes_conf_t)); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
571 if (conf == NULL) { |
18
c3bd9d8ab52a
Fix create_conf to return NULL on errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
17
diff
changeset
|
572 return NULL; |
0
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
573 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
574 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
575 conf->enable = NGX_CONF_UNSET; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
576 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
577 return conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
578 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
579 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
580 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
581 static char * |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
582 ngx_http_bytes_merge_conf(ngx_conf_t *cf, void *parent, void *child) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
583 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
584 ngx_http_bytes_conf_t *prev = parent; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
585 ngx_http_bytes_conf_t *conf = child; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
586 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
587 ngx_conf_merge_value(conf->enable, prev->enable, 0); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
588 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
589 return NGX_CONF_OK; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
590 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
591 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
592 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
593 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
594 ngx_http_bytes_init(ngx_conf_t *cf) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
595 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
596 ngx_http_next_header_filter = ngx_http_top_header_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
597 ngx_http_top_header_filter = ngx_http_bytes_header_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
598 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
599 ngx_http_next_body_filter = ngx_http_top_body_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
600 ngx_http_top_body_filter = ngx_http_bytes_body_filter; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
601 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
602 return NGX_OK; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
603 } |