1 //AUTOGENERATED, do not edit! see nchan_commands.rb
2 static ngx_conf_post_t nchan_redis_namespace__post_handler = {
3   ngx_conf_process_redis_namespace_slot
4 };
5 
6 static ngx_command_t  nchan_commands[] = {
7     { ngx_string("nchan_channel_id"),
8     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
9     nchan_set_pubsub_channel_id,
10     NGX_HTTP_LOC_CONF_OFFSET,
11     0,
12     NULL } ,
13   { ngx_string("nchan_pubsub_channel_id"), //alt for nchan_channel_id
14     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
15     nchan_set_pubsub_channel_id,
16     NGX_HTTP_LOC_CONF_OFFSET,
17     0,
18     NULL } ,
19 
20   { ngx_string("nchan_publisher_channel_id"),
21     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
22     nchan_set_pub_channel_id,
23     NGX_HTTP_LOC_CONF_OFFSET,
24     0,
25     NULL } ,
26   { ngx_string("nchan_pub_channel_id"), //alt for nchan_publisher_channel_id
27     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
28     nchan_set_pub_channel_id,
29     NGX_HTTP_LOC_CONF_OFFSET,
30     0,
31     NULL } ,
32 
33   { ngx_string("nchan_publisher_upstream_request"),
34     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
35     ngx_http_set_complex_value_slot,
36     NGX_HTTP_LOC_CONF_OFFSET,
37     offsetof(nchan_loc_conf_t, publisher_upstream_request_url),
38     NULL } ,
39 
40   { ngx_string("nchan_deflate_message_for_websocket"),
41     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
42     nchan_set_message_compression_slot,
43     NGX_HTTP_LOC_CONF_OFFSET,
44     0,
45     NULL } ,
46 
47   { ngx_string("nchan_channel_id_split_delimiter"),
48     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
49     ngx_conf_set_str_slot,
50     NGX_HTTP_LOC_CONF_OFFSET,
51     offsetof(nchan_loc_conf_t, channel_id_split_delimiter),
52     NULL } ,
53 
54   { ngx_string("nchan_subscriber_channel_id"),
55     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
56     nchan_set_sub_channel_id,
57     NGX_HTTP_LOC_CONF_OFFSET,
58     0,
59     NULL } ,
60   { ngx_string("nchan_sub_channel_id"), //alt for nchan_subscriber_channel_id
61     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
62     nchan_set_sub_channel_id,
63     NGX_HTTP_LOC_CONF_OFFSET,
64     0,
65     NULL } ,
66 
67   { ngx_string("nchan_pubsub"),
68     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6,
69     nchan_pubsub_directive,
70     NGX_HTTP_LOC_CONF_OFFSET,
71     0,
72     NULL } ,
73   { ngx_string("nchan_pubsub_location"), //alt for nchan_pubsub
74     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6,
75     nchan_pubsub_directive,
76     NGX_HTTP_LOC_CONF_OFFSET,
77     0,
78     NULL } ,
79 
80   { ngx_string("nchan_subscriber_info"),
81     NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
82     nchan_subscriber_info_directive,
83     NGX_HTTP_LOC_CONF_OFFSET,
84     0,
85     NULL } ,
86 
87   { ngx_string("nchan_subscriber_info_string"),
88     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
89     ngx_http_set_complex_value_slot,
90     NGX_HTTP_LOC_CONF_OFFSET,
91     offsetof(nchan_loc_conf_t, subscriber_info_string),
92     NULL } ,
93 
94   { ngx_string("nchan_longpoll_multipart_response"),
95     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
96     nchan_set_longpoll_multipart,
97     NGX_HTTP_LOC_CONF_OFFSET,
98     offsetof(nchan_loc_conf_t, longpoll_multimsg),
99     NULL } ,
100 
101   { ngx_string("nchan_eventsource_event"),
102     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
103     ngx_conf_set_str_slot,
104     NGX_HTTP_LOC_CONF_OFFSET,
105     offsetof(nchan_loc_conf_t, eventsource_event),
106     NULL } ,
107 
108   { ngx_string("nchan_eventsource_ping_comment"),
109     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
110     ngx_conf_set_str_slot_no_newlines,
111     NGX_HTTP_LOC_CONF_OFFSET,
112     offsetof(nchan_loc_conf_t, eventsource_ping.comment),
113     NULL } ,
114 
115   { ngx_string("nchan_eventsource_ping_event"),
116     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
117     ngx_conf_set_str_slot_no_newlines,
118     NGX_HTTP_LOC_CONF_OFFSET,
119     offsetof(nchan_loc_conf_t, eventsource_ping.event),
120     NULL } ,
121 
122   { ngx_string("nchan_eventsource_ping_data"),
123     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
124     ngx_conf_set_str_slot_no_newlines,
125     NGX_HTTP_LOC_CONF_OFFSET,
126     offsetof(nchan_loc_conf_t, eventsource_ping.data),
127     NULL } ,
128 
129   { ngx_string("nchan_eventsource_ping_interval"),
130     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
131     ngx_conf_set_sec_slot,
132     NGX_HTTP_LOC_CONF_OFFSET,
133     offsetof(nchan_loc_conf_t, eventsource_ping.interval),
134     NULL } ,
135 
136   { ngx_string("nchan_subscriber"),
137     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5,
138     nchan_subscriber_directive,
139     NGX_HTTP_LOC_CONF_OFFSET,
140     0,
141     NULL } ,
142   { ngx_string("push_subscriber"), //legacy for nchan_subscriber
143     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5,
144     nchan_subscriber_directive,
145     NGX_HTTP_LOC_CONF_OFFSET,
146     0,
147     NULL } ,
148   { ngx_string("nchan_subscriber_location"), //alt for nchan_subscriber
149     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5,
150     nchan_subscriber_directive,
151     NGX_HTTP_LOC_CONF_OFFSET,
152     0,
153     NULL } ,
154 
155   { ngx_string("nchan_subscriber_compound_etag_message_id"),
156     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
157     ngx_conf_set_flag_slot,
158     NGX_HTTP_LOC_CONF_OFFSET,
159     offsetof(nchan_loc_conf_t, msg_in_etag_only),
160     NULL } ,
161 
162   { ngx_string("nchan_subscriber_message_id_custom_etag_header"),
163     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
164     ngx_conf_set_str_slot,
165     NGX_HTTP_LOC_CONF_OFFSET,
166     offsetof(nchan_loc_conf_t, custom_msgtag_header),
167     NULL } ,
168 
169   { ngx_string("nchan_subscriber_last_message_id"),
170     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5,
171     nchan_subscriber_last_message_id,
172     NGX_HTTP_LOC_CONF_OFFSET,
173     0,
174     NULL } ,
175 
176   { ngx_string("nchan_subscriber_http_raw_stream_separator"),
177     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
178     nchan_set_raw_subscriber_separator,
179     NGX_HTTP_LOC_CONF_OFFSET,
180     offsetof(nchan_loc_conf_t, subscriber_http_raw_stream_separator),
181     NULL } ,
182 
183   { ngx_string("nchan_subscriber_first_message"),
184     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
185     nchan_subscriber_first_message_directive,
186     NGX_HTTP_LOC_CONF_OFFSET,
187     0,
188     NULL } ,
189 
190   { ngx_string("nchan_websocket_ping_interval"),
191     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
192     ngx_conf_set_sec_slot,
193     NGX_HTTP_LOC_CONF_OFFSET,
194     offsetof(nchan_loc_conf_t, websocket_ping_interval),
195     NULL } ,
196 
197   { ngx_string("nchan_websocket_client_heartbeat"),
198     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE2,
199     nchan_websocket_heartbeat_directive,
200     NGX_HTTP_LOC_CONF_OFFSET,
201     offsetof(nchan_loc_conf_t, websocket_heartbeat),
202     NULL } ,
203 
204   { ngx_string("nchan_publisher"),
205     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2,
206     nchan_publisher_directive,
207     NGX_HTTP_LOC_CONF_OFFSET,
208     0,
209     NULL } ,
210   { ngx_string("push_publisher"), //legacy for nchan_publisher
211     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2,
212     nchan_publisher_directive,
213     NGX_HTTP_LOC_CONF_OFFSET,
214     0,
215     NULL } ,
216   { ngx_string("nchan_publisher_location"), //alt for nchan_publisher
217     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2,
218     nchan_publisher_directive,
219     NGX_HTTP_LOC_CONF_OFFSET,
220     0,
221     NULL } ,
222 
223   { ngx_string("nchan_subscriber_timeout"),
224     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
225     ngx_conf_set_sec_slot,
226     NGX_HTTP_LOC_CONF_OFFSET,
227     offsetof(nchan_loc_conf_t, subscriber_timeout),
228     NULL } ,
229   { ngx_string("push_subscriber_timeout"), //legacy for nchan_subscriber_timeout
230     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
231     ngx_conf_set_sec_slot,
232     NGX_HTTP_LOC_CONF_OFFSET,
233     offsetof(nchan_loc_conf_t, subscriber_timeout),
234     NULL } ,
235 
236   { ngx_string("nchan_authorize_request"),
237     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
238     ngx_http_set_complex_value_slot,
239     NGX_HTTP_LOC_CONF_OFFSET,
240     offsetof(nchan_loc_conf_t, authorize_request_url),
241     NULL } ,
242 
243   { ngx_string("nchan_subscribe_request"),
244     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
245     ngx_http_set_complex_value_slot,
246     NGX_HTTP_LOC_CONF_OFFSET,
247     offsetof(nchan_loc_conf_t, subscribe_request_url),
248     NULL } ,
249 
250   { ngx_string("nchan_unsubscribe_request"),
251     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
252     ngx_http_set_unsubscribe_request_url,
253     NGX_HTTP_LOC_CONF_OFFSET,
254     offsetof(nchan_loc_conf_t, unsubscribe_request_url),
255     NULL } ,
256 
257   { ngx_string("nchan_message_temp_path"),
258     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
259     ngx_conf_set_path_slot,
260     NGX_HTTP_MAIN_CONF_OFFSET,
261     offsetof(nchan_main_conf_t, message_temp_path),
262     NULL } ,
263 
264   { ngx_string("nchan_store_messages"),
265     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
266     nchan_store_messages_directive,
267     NGX_HTTP_LOC_CONF_OFFSET,
268     0,
269     NULL } ,
270   { ngx_string("push_store_messages"), //legacy for nchan_store_messages
271     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
272     nchan_store_messages_directive,
273     NGX_HTTP_LOC_CONF_OFFSET,
274     0,
275     NULL } ,
276 
277   { ngx_string("nchan_shared_memory_size"),
278     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
279     nchan_conf_set_size_slot,
280     NGX_HTTP_MAIN_CONF_OFFSET,
281     offsetof(nchan_main_conf_t, shm_size),
282     NULL } ,
283   { ngx_string("push_max_reserved_memory"), //legacy for nchan_shared_memory_size
284     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
285     nchan_conf_set_size_slot,
286     NGX_HTTP_MAIN_CONF_OFFSET,
287     offsetof(nchan_main_conf_t, shm_size),
288     NULL } ,
289   { ngx_string("nchan_max_reserved_memory"), //legacy for nchan_shared_memory_size
290     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
291     nchan_conf_set_size_slot,
292     NGX_HTTP_MAIN_CONF_OFFSET,
293     offsetof(nchan_main_conf_t, shm_size),
294     NULL } ,
295 
296   { ngx_string("nchan_permessage_deflate_compression_level"),
297     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
298     nchan_conf_deflate_compression_level_directive,
299     NGX_HTTP_MAIN_CONF_OFFSET,
300     0,
301     NULL } ,
302 
303   { ngx_string("nchan_permessage_deflate_compression_strategy"),
304     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
305     nchan_conf_deflate_compression_strategy_directive,
306     NGX_HTTP_MAIN_CONF_OFFSET,
307     0,
308     NULL } ,
309 
310   { ngx_string("nchan_permessage_deflate_compression_window"),
311     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
312     nchan_conf_deflate_compression_window_directive,
313     NGX_HTTP_MAIN_CONF_OFFSET,
314     0,
315     NULL } ,
316 
317   { ngx_string("nchan_permessage_deflate_compression_memlevel"),
318     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
319     nchan_conf_deflate_compression_memlevel_directive,
320     NGX_HTTP_MAIN_CONF_OFFSET,
321     0,
322     NULL } ,
323 
324   { ngx_string("nchan_redis_url"),
325     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
326     ngx_conf_set_redis_url,
327     NGX_HTTP_LOC_CONF_OFFSET,
328     offsetof(nchan_loc_conf_t, redis.url),
329     NULL } ,
330 
331   { ngx_string("nchan_redis_pass"),
332     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
333     ngx_conf_set_redis_upstream_pass,
334     NGX_HTTP_LOC_CONF_OFFSET,
335     offsetof(nchan_loc_conf_t, redis),
336     NULL } ,
337 
338   { ngx_string("nchan_redis_pass_inheritable"),
339     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
340     ngx_conf_set_flag_slot,
341     NGX_HTTP_LOC_CONF_OFFSET,
342     offsetof(nchan_loc_conf_t, redis.upstream_inheritable),
343     NULL } ,
344 
345   { ngx_string("nchan_redis_publish_msgpacked_max_size"),
346     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
347     ngx_conf_set_size_slot,
348     NGX_HTTP_MAIN_CONF_OFFSET,
349     offsetof(nchan_main_conf_t, redis_publish_message_msgkey_size),
350     NULL } ,
351 
352   { ngx_string("nchan_redis_discovered_ip_range_blacklist"),
353     NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3|NGX_CONF_TAKE4|NGX_CONF_TAKE5|NGX_CONF_TAKE6|NGX_CONF_TAKE7,
354     ngx_conf_set_redis_ip_blacklist,
355     NGX_HTTP_SRV_CONF_OFFSET,
356     0,
357     NULL } ,
358 
359   { ngx_string("nchan_redis_server"),
360     NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
361     ngx_conf_upstream_redis_server,
362     NGX_HTTP_LOC_CONF_OFFSET,
363     0,
364     NULL } ,
365 
366   { ngx_string("nchan_redis_storage_mode"),
367     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_UPS_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
368     ngx_conf_set_redis_storage_mode_slot,
369     NGX_HTTP_LOC_CONF_OFFSET,
370     offsetof(nchan_loc_conf_t, redis.storage_mode),
371     NULL } ,
372 
373   { ngx_string("nchan_redis_nostore_fastpublish"),
374     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
375     ngx_conf_set_flag_slot,
376     NGX_HTTP_LOC_CONF_OFFSET,
377     offsetof(nchan_loc_conf_t, redis.nostore_fastpublish),
378     NULL } ,
379 
380   { ngx_string("nchan_use_redis"),
381     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
382     ngx_conf_enable_redis,
383     NGX_HTTP_LOC_CONF_OFFSET,
384     offsetof(nchan_loc_conf_t, redis.url_enabled),
385     NULL } ,
386 
387   { ngx_string("nchan_redis_ping_interval"),
388     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_UPS_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
389     ngx_conf_set_sec_slot,
390     NGX_HTTP_LOC_CONF_OFFSET,
391     offsetof(nchan_loc_conf_t, redis.ping_interval),
392     NULL } ,
393 
394   { ngx_string("nchan_redis_cluster_check_interval"),
395     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_UPS_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
396     ngx_conf_set_sec_slot,
397     NGX_HTTP_LOC_CONF_OFFSET,
398     offsetof(nchan_loc_conf_t, redis.cluster_check_interval),
399     NULL } ,
400 
401   { ngx_string("nchan_redis_wait_after_connecting"),
402     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
403     nchan_ignore_obsolete_setting,
404     NGX_HTTP_LOC_CONF_OFFSET,
405     0,
406     NULL } ,
407 
408   { ngx_string("nchan_redis_connect_timeout"),
409     NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
410     ngx_conf_set_msec_slot,
411     NGX_HTTP_SRV_CONF_OFFSET,
412     offsetof(nchan_srv_conf_t, redis.connect_timeout),
413     NULL } ,
414 
415   { ngx_string("nchan_redis_subscribe_weights"),
416     NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1|NGX_CONF_TAKE2,
417     ngx_conf_set_redis_subscribe_weights,
418     NGX_HTTP_SRV_CONF_OFFSET,
419     0,
420     NULL } ,
421 
422   { ngx_string("nchan_redis_optimize_target"),
423     NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
424     ngx_conf_set_redis_optimize_target,
425     NGX_HTTP_SRV_CONF_OFFSET,
426     0,
427     NULL } ,
428 
429   { ngx_string("nchan_redis_namespace"),
430     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_UPS_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
431     ngx_conf_set_str_slot,
432     NGX_HTTP_LOC_CONF_OFFSET,
433     offsetof(nchan_loc_conf_t, redis.namespace),
434     &nchan_redis_namespace__post_handler } ,
435 
436   { ngx_string("nchan_redis_fakesub_timer_interval"),
437     NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
438     ngx_conf_set_msec_slot,
439     NGX_HTTP_MAIN_CONF_OFFSET,
440     offsetof(nchan_main_conf_t, redis_fakesub_timer_interval),
441     NULL } ,
442 
443   { ngx_string("nchan_redis_idle_channel_cache_timeout"),
444     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
445     ngx_conf_set_sec_slot,
446     NGX_HTTP_LOC_CONF_OFFSET,
447     offsetof(nchan_loc_conf_t, redis_idle_channel_cache_timeout),
448     NULL } ,
449 
450   { ngx_string("nchan_message_timeout"),
451     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
452     nchan_set_message_timeout,
453     NGX_HTTP_LOC_CONF_OFFSET,
454     offsetof(nchan_loc_conf_t, message_timeout),
455     NULL } ,
456   { ngx_string("push_message_timeout"), //legacy for nchan_message_timeout
457     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
458     nchan_set_message_timeout,
459     NGX_HTTP_LOC_CONF_OFFSET,
460     offsetof(nchan_loc_conf_t, message_timeout),
461     NULL } ,
462 
463   { ngx_string("nchan_message_buffer_length"),
464     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
465     nchan_set_message_buffer_length,
466     NGX_HTTP_LOC_CONF_OFFSET,
467     offsetof(nchan_loc_conf_t, max_messages),
468     NULL } ,
469   { ngx_string("push_max_message_buffer_length"), //legacy for nchan_message_buffer_length
470     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
471     nchan_set_message_buffer_length,
472     NGX_HTTP_LOC_CONF_OFFSET,
473     offsetof(nchan_loc_conf_t, max_messages),
474     NULL } ,
475   { ngx_string("push_message_buffer_length"), //legacy for nchan_message_buffer_length
476     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
477     nchan_set_message_buffer_length,
478     NGX_HTTP_LOC_CONF_OFFSET,
479     offsetof(nchan_loc_conf_t, max_messages),
480     NULL } ,
481   { ngx_string("nchan_message_max_buffer_length"), //alt for nchan_message_buffer_length
482     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
483     nchan_set_message_buffer_length,
484     NGX_HTTP_LOC_CONF_OFFSET,
485     offsetof(nchan_loc_conf_t, max_messages),
486     NULL } ,
487 
488   { ngx_string("nchan_subscribe_existing_channels_only"),
489     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
490     ngx_conf_set_flag_slot,
491     NGX_HTTP_LOC_CONF_OFFSET,
492     offsetof(nchan_loc_conf_t, subscribe_only_existing_channel),
493     NULL } ,
494   { ngx_string("push_authorized_channels_only"), //legacy for nchan_subscribe_existing_channels_only
495     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
496     ngx_conf_set_flag_slot,
497     NGX_HTTP_LOC_CONF_OFFSET,
498     offsetof(nchan_loc_conf_t, subscribe_only_existing_channel),
499     NULL } ,
500 
501   { ngx_string("nchan_access_control_allow_origin"),
502     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
503     ngx_http_set_complex_value_slot,
504     NGX_HTTP_LOC_CONF_OFFSET,
505     offsetof(nchan_loc_conf_t, allow_origin),
506     NULL } ,
507 
508   { ngx_string("nchan_access_control_allow_credentials"),
509     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
510     ngx_conf_set_flag_slot,
511     NGX_HTTP_LOC_CONF_OFFSET,
512     offsetof(nchan_loc_conf_t, allow_credentials),
513     NULL } ,
514 
515   { ngx_string("nchan_channel_group"),
516     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
517     ngx_http_set_complex_value_slot,
518     NGX_HTTP_LOC_CONF_OFFSET,
519     offsetof(nchan_loc_conf_t, channel_group),
520     NULL } ,
521   { ngx_string("push_channel_group"), //legacy for nchan_channel_group
522     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
523     ngx_http_set_complex_value_slot,
524     NGX_HTTP_LOC_CONF_OFFSET,
525     offsetof(nchan_loc_conf_t, channel_group),
526     NULL } ,
527 
528   { ngx_string("nchan_channel_group_accounting"),
529     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
530     ngx_conf_set_flag_slot,
531     NGX_HTTP_LOC_CONF_OFFSET,
532     offsetof(nchan_loc_conf_t, group.enable_accounting),
533     NULL } ,
534 
535   { ngx_string("nchan_group_location"),
536     NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3,
537     nchan_group_directive,
538     NGX_HTTP_LOC_CONF_OFFSET,
539     0,
540     NULL } ,
541 
542   { ngx_string("nchan_group_max_channels"),
543     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
544     ngx_http_set_complex_value_slot,
545     NGX_HTTP_LOC_CONF_OFFSET,
546     offsetof(nchan_loc_conf_t, group.max_channels),
547     NULL } ,
548 
549   { ngx_string("nchan_group_max_messages"),
550     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
551     ngx_http_set_complex_value_slot,
552     NGX_HTTP_LOC_CONF_OFFSET,
553     offsetof(nchan_loc_conf_t, group.max_messages),
554     NULL } ,
555 
556   { ngx_string("nchan_group_max_messages_memory"),
557     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
558     ngx_http_set_complex_value_slot,
559     NGX_HTTP_LOC_CONF_OFFSET,
560     offsetof(nchan_loc_conf_t, group.max_messages_shm_bytes),
561     NULL } ,
562 
563   { ngx_string("nchan_group_max_messages_disk"),
564     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
565     ngx_http_set_complex_value_slot,
566     NGX_HTTP_LOC_CONF_OFFSET,
567     offsetof(nchan_loc_conf_t, group.max_messages_file_bytes),
568     NULL } ,
569 
570   { ngx_string("nchan_group_max_subscribers"),
571     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
572     ngx_http_set_complex_value_slot,
573     NGX_HTTP_LOC_CONF_OFFSET,
574     offsetof(nchan_loc_conf_t, group.max_subscribers),
575     NULL } ,
576 
577   { ngx_string("nchan_channel_events_channel_id"),
578     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
579     nchan_set_channel_events_channel_id,
580     NGX_HTTP_LOC_CONF_OFFSET,
581     0,
582     NULL } ,
583 
584   { ngx_string("nchan_stub_status"),
585     NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
586     nchan_stub_status_directive,
587     NGX_HTTP_LOC_CONF_OFFSET,
588     0,
589     NULL } ,
590 
591   { ngx_string("nchan_channel_event_string"),
592     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
593     ngx_http_set_complex_value_slot,
594     NGX_HTTP_LOC_CONF_OFFSET,
595     offsetof(nchan_loc_conf_t, channel_event_string),
596     NULL } ,
597 
598   { ngx_string("nchan_max_channel_id_length"),
599     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
600     ngx_conf_set_num_slot,
601     NGX_HTTP_LOC_CONF_OFFSET,
602     offsetof(nchan_loc_conf_t, max_channel_id_length),
603     NULL } ,
604   { ngx_string("push_max_channel_id_length"), //legacy for nchan_max_channel_id_length
605     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
606     ngx_conf_set_num_slot,
607     NGX_HTTP_LOC_CONF_OFFSET,
608     offsetof(nchan_loc_conf_t, max_channel_id_length),
609     NULL } ,
610 
611   { ngx_string("nchan_max_channel_subscribers"),
612     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
613     ngx_conf_set_num_slot,
614     NGX_HTTP_LOC_CONF_OFFSET,
615     offsetof(nchan_loc_conf_t, max_channel_subscribers),
616     NULL } ,
617   { ngx_string("push_max_channel_subscribers"), //legacy for nchan_max_channel_subscribers
618     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
619     ngx_conf_set_num_slot,
620     NGX_HTTP_LOC_CONF_OFFSET,
621     offsetof(nchan_loc_conf_t, max_channel_subscribers),
622     NULL } ,
623 
624   { ngx_string("nchan_channel_timeout"),
625     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
626     ngx_conf_set_sec_slot,
627     NGX_HTTP_LOC_CONF_OFFSET,
628     offsetof(nchan_loc_conf_t, channel_timeout),
629     NULL } ,
630   { ngx_string("push_channel_timeout"), //legacy for nchan_channel_timeout
631     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
632     ngx_conf_set_sec_slot,
633     NGX_HTTP_LOC_CONF_OFFSET,
634     offsetof(nchan_loc_conf_t, channel_timeout),
635     NULL } ,
636 
637   { ngx_string("nchan_storage_engine"),
638     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
639     nchan_set_storage_engine,
640     NGX_HTTP_LOC_CONF_OFFSET,
641     offsetof(nchan_loc_conf_t, storage_engine),
642     NULL } ,
643 
644   { ngx_string("nchan_benchmark"),
645     NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
646     nchan_benchmark_directive,
647     NGX_HTTP_LOC_CONF_OFFSET,
648     0,
649     NULL } ,
650 
651   { ngx_string("nchan_benchmark_time"),
652     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
653     ngx_conf_set_sec_slot,
654     NGX_HTTP_LOC_CONF_OFFSET,
655     offsetof(nchan_loc_conf_t, benchmark.time),
656     NULL } ,
657 
658   { ngx_string("nchan_benchmark_messages_per_channel_per_minute"),
659     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
660     ngx_conf_set_num_slot,
661     NGX_HTTP_LOC_CONF_OFFSET,
662     offsetof(nchan_loc_conf_t, benchmark.msgs_per_minute),
663     NULL } ,
664 
665   { ngx_string("nchan_benchmark_message_padding_bytes"),
666     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
667     ngx_conf_set_num_slot,
668     NGX_HTTP_LOC_CONF_OFFSET,
669     offsetof(nchan_loc_conf_t, benchmark.msg_padding),
670     NULL } ,
671 
672   { ngx_string("nchan_benchmark_channels"),
673     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
674     ngx_conf_set_num_slot,
675     NGX_HTTP_LOC_CONF_OFFSET,
676     offsetof(nchan_loc_conf_t, benchmark.channels),
677     NULL } ,
678 
679   { ngx_string("nchan_benchmark_subscribers_per_channel"),
680     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
681     ngx_conf_set_num_slot,
682     NGX_HTTP_LOC_CONF_OFFSET,
683     offsetof(nchan_loc_conf_t, benchmark.subscribers_per_channel),
684     NULL } ,
685 
686   { ngx_string("nchan_benchmark_subscriber_distribution"),
687     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
688     nchan_benchmark_subscriber_distribution_directive,
689     NGX_HTTP_LOC_CONF_OFFSET,
690     offsetof(nchan_loc_conf_t, benchmark.subscriber_distribution),
691     NULL } ,
692 
693   { ngx_string("nchan_benchmark_publisher_distribution"),
694     NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
695     nchan_benchmark_publisher_distribution_directive,
696     NGX_HTTP_LOC_CONF_OFFSET,
697     offsetof(nchan_loc_conf_t, benchmark.publisher_distribution),
698     NULL } ,
699 
700   { ngx_string("push_min_message_buffer_length"),
701     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
702     nchan_ignore_obsolete_setting,
703     NGX_HTTP_LOC_CONF_OFFSET,
704     0,
705     NULL } ,
706 
707   { ngx_string("push_subscriber_concurrency"),
708     NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
709     nchan_ignore_subscriber_concurrency,
710     NGX_HTTP_LOC_CONF_OFFSET,
711     0,
712     NULL } ,
713 
714 
715   ngx_null_command
716 };
717