annotate src/stream/ngx_stream.h @ 6684:9cac11efb205

Stream: realip module.
author Dmitry Volyntsev <xeioex@nginx.com>
date Thu, 01 Sep 2016 14:45:33 +0300
parents 7357abd1fa8c
children 56fc55e32f23
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
1
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
2 /*
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
3 * Copyright (C) Roman Arutyunyan
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
4 * Copyright (C) Nginx, Inc.
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
5 */
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
6
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
7
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
8 #ifndef _NGX_STREAM_H_INCLUDED_
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
9 #define _NGX_STREAM_H_INCLUDED_
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
10
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
11
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
12 #include <ngx_config.h>
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
13 #include <ngx_core.h>
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
14
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
15 #if (NGX_STREAM_SSL)
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
16 #include <ngx_stream_ssl_module.h>
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
17 #endif
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
18
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
19
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
20 typedef struct ngx_stream_session_s ngx_stream_session_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
21
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
22
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
23 #include <ngx_stream_variables.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
24 #include <ngx_stream_script.h>
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
25 #include <ngx_stream_upstream.h>
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
26 #include <ngx_stream_upstream_round_robin.h>
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
27
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
28
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
29 #define NGX_STREAM_OK 200
6680
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
30 #define NGX_STREAM_BAD_REQUEST 400
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
31 #define NGX_STREAM_FORBIDDEN 403
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
32 #define NGX_STREAM_INTERNAL_SERVER_ERROR 500
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
33 #define NGX_STREAM_BAD_GATEWAY 502
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
34 #define NGX_STREAM_SERVICE_UNAVAILABLE 503
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
35
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
36
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
37 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
38 void **main_conf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
39 void **srv_conf;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
40 } ngx_stream_conf_ctx_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
41
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
42
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
43 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
44 ngx_sockaddr_t sockaddr;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
45 socklen_t socklen;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
46
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
47 /* server ctx */
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
48 ngx_stream_conf_ctx_t *ctx;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
49
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
50 unsigned bind:1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
51 unsigned wildcard:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
52 #if (NGX_STREAM_SSL)
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
53 unsigned ssl:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
54 #endif
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
55 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
56 unsigned ipv6only:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
57 #endif
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6129
diff changeset
58 #if (NGX_HAVE_REUSEPORT)
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
59 unsigned reuseport:1;
6153
4f6efabcb09b The "reuseport" option of the "listen" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6129
diff changeset
60 #endif
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
61 unsigned so_keepalive:2;
6680
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
62 unsigned proxy_protocol:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
63 #if (NGX_HAVE_KEEPALIVE_TUNABLE)
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
64 int tcp_keepidle;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
65 int tcp_keepintvl;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
66 int tcp_keepcnt;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
67 #endif
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
68 int backlog;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
69 int type;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
70 } ngx_stream_listen_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
71
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
72
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
73 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
74 ngx_stream_conf_ctx_t *ctx;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
75 ngx_str_t addr_text;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
76 #if (NGX_STREAM_SSL)
6680
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
77 unsigned ssl:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
78 #endif
6680
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
79 unsigned proxy_protocol:1;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
80 } ngx_stream_addr_conf_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
81
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
82 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
83 in_addr_t addr;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
84 ngx_stream_addr_conf_t conf;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
85 } ngx_stream_in_addr_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
86
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
87
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
88 #if (NGX_HAVE_INET6)
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
89
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
90 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
91 struct in6_addr addr6;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
92 ngx_stream_addr_conf_t conf;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
93 } ngx_stream_in6_addr_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
94
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
95 #endif
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
96
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
97
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
98 typedef struct {
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
99 /* ngx_stream_in_addr_t or ngx_stream_in6_addr_t */
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
100 void *addrs;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
101 ngx_uint_t naddrs;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
102 } ngx_stream_port_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
103
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
104
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
105 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
106 int family;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
107 int type;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
108 in_port_t port;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
109 ngx_array_t addrs; /* array of ngx_stream_conf_addr_t */
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
110 } ngx_stream_conf_port_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
111
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
112
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
113 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
114 ngx_stream_listen_t opt;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
115 } ngx_stream_conf_addr_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
116
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
117
6175
8807a2369b1a Stream: access module.
Vladimir Homutov <vl@nginx.com>
parents: 6174
diff changeset
118 typedef ngx_int_t (*ngx_stream_access_pt)(ngx_stream_session_t *s);
8807a2369b1a Stream: access module.
Vladimir Homutov <vl@nginx.com>
parents: 6174
diff changeset
119
8807a2369b1a Stream: access module.
Vladimir Homutov <vl@nginx.com>
parents: 6174
diff changeset
120
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
121 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
122 ngx_array_t servers; /* ngx_stream_core_srv_conf_t */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
123 ngx_array_t listen; /* ngx_stream_listen_t */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
124
6684
9cac11efb205 Stream: realip module.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6680
diff changeset
125 ngx_stream_access_pt realip_handler;
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
126 ngx_stream_access_pt limit_conn_handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
127 ngx_stream_access_pt access_handler;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6675
diff changeset
128 ngx_stream_access_pt access_log_handler;
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
129
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
130 ngx_hash_t variables_hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
131
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
132 ngx_array_t variables; /* ngx_stream_variable_t */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
133 ngx_uint_t ncaptures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
134
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
135 ngx_uint_t variables_hash_max_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
136 ngx_uint_t variables_hash_bucket_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
137
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
138 ngx_hash_keys_arrays_t *variables_keys;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
139 } ngx_stream_core_main_conf_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
140
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
141
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
142 typedef void (*ngx_stream_handler_pt)(ngx_stream_session_t *s);
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
143
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
144
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
145 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
146 ngx_stream_handler_pt handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
147
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
148 ngx_stream_conf_ctx_t *ctx;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
149
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
150 u_char *file_name;
6656
a2f57dfa65a9 Fixed wrong type of the "line" field.
Roman Arutyunyan <arut@nginx.com>
parents: 6618
diff changeset
151 ngx_uint_t line;
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
152
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
153 ngx_flag_t tcp_nodelay;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
154
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
155 ngx_log_t *error_log;
6618
070c31a482e6 Stream: resolver.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
156
070c31a482e6 Stream: resolver.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
157 ngx_msec_t resolver_timeout;
070c31a482e6 Stream: resolver.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
158 ngx_resolver_t *resolver;
6657
3d5202c71f94 Ensure "listen" exists in a mail or stream server (ticket #1049).
Roman Arutyunyan <arut@nginx.com>
parents: 6656
diff changeset
159
6680
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
160 ngx_msec_t proxy_protocol_timeout;
7357abd1fa8c Stream: the "proxy_protocol" parameter of the "listen" directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6679
diff changeset
161
6657
3d5202c71f94 Ensure "listen" exists in a mail or stream server (ticket #1049).
Roman Arutyunyan <arut@nginx.com>
parents: 6656
diff changeset
162 ngx_uint_t listen; /* unsigned listen:1; */
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
163 } ngx_stream_core_srv_conf_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
164
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
165
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
166 struct ngx_stream_session_s {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
167 uint32_t signature; /* "STRM" */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
168
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
169 ngx_connection_t *connection;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
170
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
171 off_t received;
6669
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6657
diff changeset
172 time_t start_sec;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6657
diff changeset
173 ngx_msec_t start_msec;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
174
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
175 ngx_log_handler_pt log_handler;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
176
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
177 void **ctx;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
178 void **main_conf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
179 void **srv_conf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
180
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
181 ngx_stream_upstream_t *upstream;
6675
ab9b4fd8c5b7 Stream: the $upstream_addr variable.
Vladimir Homutov <vl@nginx.com>
parents: 6674
diff changeset
182 ngx_array_t *upstream_states;
ab9b4fd8c5b7 Stream: the $upstream_addr variable.
Vladimir Homutov <vl@nginx.com>
parents: 6674
diff changeset
183 /* of ngx_stream_upstream_state_t */
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
184 ngx_stream_variable_value_t *variables;
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
185
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
186 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
187 ngx_uint_t ncaptures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
188 int *captures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
189 u_char *captures_data;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
190 #endif
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
191
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
192 ngx_uint_t status;
6679
40e8ce405859 Stream: postpone session initialization under accept mutex.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6678
diff changeset
193
40e8ce405859 Stream: postpone session initialization under accept mutex.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6678
diff changeset
194 #if (NGX_STREAM_SSL)
40e8ce405859 Stream: postpone session initialization under accept mutex.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6678
diff changeset
195 ngx_uint_t ssl; /* unsigned ssl:1; */
40e8ce405859 Stream: postpone session initialization under accept mutex.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6678
diff changeset
196 #endif
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
197 };
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
198
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
199
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
200 typedef struct {
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
201 ngx_int_t (*preconfiguration)(ngx_conf_t *cf);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
202 ngx_int_t (*postconfiguration)(ngx_conf_t *cf);
6174
68c106e6fa0a Stream: added postconfiguration method to stream modules.
Vladimir Homutov <vl@nginx.com>
parents: 6172
diff changeset
203
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
204 void *(*create_main_conf)(ngx_conf_t *cf);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
205 char *(*init_main_conf)(ngx_conf_t *cf, void *conf);
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
206
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
207 void *(*create_srv_conf)(ngx_conf_t *cf);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
208 char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents: 6606
diff changeset
209 void *conf);
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
210 } ngx_stream_module_t;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
211
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
212
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
213 #define NGX_STREAM_MODULE 0x4d525453 /* "STRM" */
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
214
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
215 #define NGX_STREAM_MAIN_CONF 0x02000000
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
216 #define NGX_STREAM_SRV_CONF 0x04000000
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
217 #define NGX_STREAM_UPS_CONF 0x08000000
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
218
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
219
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
220 #define NGX_STREAM_MAIN_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, main_conf)
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
221 #define NGX_STREAM_SRV_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, srv_conf)
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
222
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
223
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
224 #define ngx_stream_get_module_ctx(s, module) (s)->ctx[module.ctx_index]
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
225 #define ngx_stream_set_ctx(s, c, module) s->ctx[module.ctx_index] = c;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
226 #define ngx_stream_delete_ctx(s, module) s->ctx[module.ctx_index] = NULL;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
227
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
228
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
229 #define ngx_stream_get_module_main_conf(s, module) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
230 (s)->main_conf[module.ctx_index]
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
231 #define ngx_stream_get_module_srv_conf(s, module) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
232 (s)->srv_conf[module.ctx_index]
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
233
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
234 #define ngx_stream_conf_get_module_main_conf(cf, module) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
235 ((ngx_stream_conf_ctx_t *) cf->ctx)->main_conf[module.ctx_index]
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
236 #define ngx_stream_conf_get_module_srv_conf(cf, module) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
237 ((ngx_stream_conf_ctx_t *) cf->ctx)->srv_conf[module.ctx_index]
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
238
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
239 #define ngx_stream_cycle_get_module_main_conf(cycle, module) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
240 (cycle->conf_ctx[ngx_stream_module.index] ? \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
241 ((ngx_stream_conf_ctx_t *) cycle->conf_ctx[ngx_stream_module.index]) \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
242 ->main_conf[module.ctx_index]: \
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
243 NULL)
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
244
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
245
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
246 void ngx_stream_init_connection(ngx_connection_t *c);
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6669
diff changeset
247 void ngx_stream_finalize_session(ngx_stream_session_t *s, ngx_uint_t rc);
6115
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
248
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
249
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
250 extern ngx_module_t ngx_stream_module;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
251 extern ngx_uint_t ngx_stream_max_module;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
252 extern ngx_module_t ngx_stream_core_module;
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
253
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
254
61d7ae76647d Stream: port from NGINX+.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
255 #endif /* _NGX_STREAM_H_INCLUDED_ */