Mercurial > hg > ngx_http_bytes_filter_module
annotate ngx_http_bytes_filter_module.c @ 0:8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Bytes module designed to return only specific range of file as requested in
arguments. It's intended to replace flv module as more generic alternative.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 26 Jun 2008 04:49:22 +0400 |
parents | |
children | 6b995d5251ec |
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 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 ngx_flag_t enable; |
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 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 off_t start; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 off_t end; |
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 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 off_t offset; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 ngx_array_t ranges; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 } ngx_http_bytes_ctx_t; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 |
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 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
|
29 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
|
30 void *child); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 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
|
32 |
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 static ngx_command_t ngx_http_bytes_commands[] = { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 { ngx_string("bytes"), |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 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
|
38 ngx_conf_set_flag_slot, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 NGX_HTTP_LOC_CONF_OFFSET, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 offsetof(ngx_http_bytes_conf_t, enable), |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 NULL }, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 ngx_null_command |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 }; |
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 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
|
48 NULL, /* preconfiguration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 ngx_http_bytes_init, /* postconfiguration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 NULL, /* create main configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 NULL, /* init main configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 NULL, /* create server configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 NULL, /* merge server configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 ngx_http_bytes_create_conf, /* create location configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 ngx_http_bytes_merge_conf /* merge location configuration */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 }; |
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 ngx_module_t ngx_http_bytes_filter_module = { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 NGX_MODULE_V1, |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 &ngx_http_bytes_module_ctx, /* module context */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 ngx_http_bytes_commands, /* module directives */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 NGX_HTTP_MODULE, /* module type */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 NULL, /* init master */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 NULL, /* init module */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 NULL, /* init process */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 NULL, /* init thread */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 NULL, /* exit thread */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 NULL, /* exit process */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 NULL, /* exit master */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 NGX_MODULE_V1_PADDING |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 }; |
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 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
|
79 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
|
80 |
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 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 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
|
84 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 u_char *p; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 ngx_http_bytes_conf_t *conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 ngx_http_bytes_ctx_t *ctx; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 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
|
90 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 if (!conf->enable || r->args.len == 0) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 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
|
96 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 if (p == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 } |
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 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
|
102 "bytes header filter: r %p", r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 p += sizeof("bytes=") - 1; |
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 /* create context */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 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
|
109 if (ctx == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 return NGX_ERROR; |
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 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
|
114 == NGX_ERROR) |
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 return NGX_ERROR; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 } |
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 /* |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 * 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
|
121 * but no whitespaces permitted |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 #if 0 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 for ( ;; ) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 start = 0; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 end = 0; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 suffix = 0; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 if (*p != '-') { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 if (*p < '0' || *p > '9') { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 break; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 while (*p >= '0' && *p <= '9') { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 start = start * 10 + *p++ - '0'; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 if (*p != '-') { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 break; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 if (*p == ',' || *p == '\0') { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 /* no last-byte-pos, assume end of file */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 end = len - 1; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 } else { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 suffix = 1; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 p++; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 #endif |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 /* ... */ |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 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
|
158 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 return ngx_http_next_header_filter(r); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 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
|
165 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 ngx_http_bytes_ctx_t *ctx; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 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
|
169 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 if (ctx == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 return ngx_http_next_body_filter(r, in); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 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
|
175 "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
|
176 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 return ngx_http_next_body_filter(r, in); |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 static void * |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 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
|
183 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 ngx_http_bytes_conf_t *conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 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
|
187 if (conf == NULL) { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 return NGX_CONF_ERROR; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 conf->enable = NGX_CONF_UNSET; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 return conf; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 static char * |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 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
|
199 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 ngx_http_bytes_conf_t *prev = parent; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 ngx_http_bytes_conf_t *conf = child; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 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
|
204 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 return NGX_CONF_OK; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 } |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 static ngx_int_t |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 ngx_http_bytes_init(ngx_conf_t *cf) |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 { |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 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
|
213 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
|
214 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 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
|
216 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
|
217 |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 return NGX_OK; |
8aec31ab4d52
Bytes filter module skeleton, currently does nothing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 } |