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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }