annotate src/stream/ngx_stream_variables.h @ 6694:ea9dfe2f62e7

Stream: preread phase. In this phase, head of a stream is read and analysed before proceeding to the content phase. Amount of data read is controlled by the module implementing the phase, but not more than defined by the "preread_buffer_size" directive. The time spent on processing preread is controlled by the "preread_timeout" directive. The typical preread phase module will parse the beginning of a stream and set variable that may be used by the content phase, for example to make routing decision.
author Vladimir Homutov <vl@nginx.com>
date Thu, 15 Sep 2016 14:56:02 +0300
parents c70b7f4537e1
children d2b2ff157da5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 * Copyright (C) Nginx, Inc.
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5 */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #ifndef _NGX_STREAM_VARIABLES_H_INCLUDED_
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 #define _NGX_STREAM_VARIABLES_H_INCLUDED_
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12 #include <ngx_config.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13 #include <ngx_core.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14 #include <ngx_stream.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17 typedef ngx_variable_value_t ngx_stream_variable_value_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19 #define ngx_stream_variable(v) { sizeof(v) - 1, 1, 0, 0, 0, (u_char *) v }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
21 typedef struct ngx_stream_variable_s ngx_stream_variable_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23 typedef void (*ngx_stream_set_variable_pt) (ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 ngx_stream_variable_value_t *v, uintptr_t data);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 typedef ngx_int_t (*ngx_stream_get_variable_pt) (ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 ngx_stream_variable_value_t *v, uintptr_t data);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 #define NGX_STREAM_VAR_CHANGEABLE 1
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 #define NGX_STREAM_VAR_NOCACHEABLE 2
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 #define NGX_STREAM_VAR_INDEXED 4
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 #define NGX_STREAM_VAR_NOHASH 8
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35 struct ngx_stream_variable_s {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36 ngx_str_t name; /* must be first to build the hash */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 ngx_stream_set_variable_pt set_handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38 ngx_stream_get_variable_pt get_handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39 uintptr_t data;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40 ngx_uint_t flags;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41 ngx_uint_t index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42 };
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
44
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
45 ngx_stream_variable_t *ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46 ngx_uint_t flags);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47 ngx_int_t ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
48 ngx_stream_variable_value_t *ngx_stream_get_indexed_variable(
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
49 ngx_stream_session_t *s, ngx_uint_t index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50 ngx_stream_variable_value_t *ngx_stream_get_flushed_variable(
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51 ngx_stream_session_t *s, ngx_uint_t index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 ngx_stream_variable_value_t *ngx_stream_get_variable(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54 ngx_str_t *name, ngx_uint_t key);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
55
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
56
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
57 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
58
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
59 typedef struct {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60 ngx_uint_t capture;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61 ngx_int_t index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62 } ngx_stream_regex_variable_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
64
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65 typedef struct {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 ngx_regex_t *regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 ngx_uint_t ncaptures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 ngx_stream_regex_variable_t *variables;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69 ngx_uint_t nvariables;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70 ngx_str_t name;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
71 } ngx_stream_regex_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74 typedef struct {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
75 ngx_stream_regex_t *regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
76 void *value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
77 } ngx_stream_map_regex_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
78
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
79
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
80 ngx_stream_regex_t *ngx_stream_regex_compile(ngx_conf_t *cf,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81 ngx_regex_compile_t *rc);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 ngx_int_t ngx_stream_regex_exec(ngx_stream_session_t *s, ngx_stream_regex_t *re,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
83 ngx_str_t *str);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
84
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
86
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
87
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88 typedef struct {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89 ngx_hash_combined_t hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91 ngx_stream_map_regex_t *regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 ngx_uint_t nregex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 } ngx_stream_map_t;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 void *ngx_stream_map_find(ngx_stream_session_t *s, ngx_stream_map_t *map,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98 ngx_str_t *match);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101 ngx_int_t ngx_stream_variables_add_core_vars(ngx_conf_t *cf);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102 ngx_int_t ngx_stream_variables_init_vars(ngx_conf_t *cf);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 extern ngx_stream_variable_value_t ngx_stream_variable_null_value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 extern ngx_stream_variable_value_t ngx_stream_variable_true_value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109 #endif /* _NGX_STREAM_VARIABLES_H_INCLUDED_ */