Mercurial > hg > nginx
comparison src/stream/ngx_stream_variables.h @ 6607:c70b7f4537e1
Stream: variables and script.
This is a port of corresponding http code with unrelated features excluded.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Mon, 04 Jul 2016 16:37:36 +0300 |
parents | |
children | d2b2ff157da5 |
comparison
equal
deleted
inserted
replaced
6606:2f41d383c9c7 | 6607:c70b7f4537e1 |
---|---|
1 | |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 * Copyright (C) Nginx, Inc. | |
5 */ | |
6 | |
7 | |
8 #ifndef _NGX_STREAM_VARIABLES_H_INCLUDED_ | |
9 #define _NGX_STREAM_VARIABLES_H_INCLUDED_ | |
10 | |
11 | |
12 #include <ngx_config.h> | |
13 #include <ngx_core.h> | |
14 #include <ngx_stream.h> | |
15 | |
16 | |
17 typedef ngx_variable_value_t ngx_stream_variable_value_t; | |
18 | |
19 #define ngx_stream_variable(v) { sizeof(v) - 1, 1, 0, 0, 0, (u_char *) v } | |
20 | |
21 typedef struct ngx_stream_variable_s ngx_stream_variable_t; | |
22 | |
23 typedef void (*ngx_stream_set_variable_pt) (ngx_stream_session_t *s, | |
24 ngx_stream_variable_value_t *v, uintptr_t data); | |
25 typedef ngx_int_t (*ngx_stream_get_variable_pt) (ngx_stream_session_t *s, | |
26 ngx_stream_variable_value_t *v, uintptr_t data); | |
27 | |
28 | |
29 #define NGX_STREAM_VAR_CHANGEABLE 1 | |
30 #define NGX_STREAM_VAR_NOCACHEABLE 2 | |
31 #define NGX_STREAM_VAR_INDEXED 4 | |
32 #define NGX_STREAM_VAR_NOHASH 8 | |
33 | |
34 | |
35 struct ngx_stream_variable_s { | |
36 ngx_str_t name; /* must be first to build the hash */ | |
37 ngx_stream_set_variable_pt set_handler; | |
38 ngx_stream_get_variable_pt get_handler; | |
39 uintptr_t data; | |
40 ngx_uint_t flags; | |
41 ngx_uint_t index; | |
42 }; | |
43 | |
44 | |
45 ngx_stream_variable_t *ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name, | |
46 ngx_uint_t flags); | |
47 ngx_int_t ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name); | |
48 ngx_stream_variable_value_t *ngx_stream_get_indexed_variable( | |
49 ngx_stream_session_t *s, ngx_uint_t index); | |
50 ngx_stream_variable_value_t *ngx_stream_get_flushed_variable( | |
51 ngx_stream_session_t *s, ngx_uint_t index); | |
52 | |
53 ngx_stream_variable_value_t *ngx_stream_get_variable(ngx_stream_session_t *s, | |
54 ngx_str_t *name, ngx_uint_t key); | |
55 | |
56 | |
57 #if (NGX_PCRE) | |
58 | |
59 typedef struct { | |
60 ngx_uint_t capture; | |
61 ngx_int_t index; | |
62 } ngx_stream_regex_variable_t; | |
63 | |
64 | |
65 typedef struct { | |
66 ngx_regex_t *regex; | |
67 ngx_uint_t ncaptures; | |
68 ngx_stream_regex_variable_t *variables; | |
69 ngx_uint_t nvariables; | |
70 ngx_str_t name; | |
71 } ngx_stream_regex_t; | |
72 | |
73 | |
74 typedef struct { | |
75 ngx_stream_regex_t *regex; | |
76 void *value; | |
77 } ngx_stream_map_regex_t; | |
78 | |
79 | |
80 ngx_stream_regex_t *ngx_stream_regex_compile(ngx_conf_t *cf, | |
81 ngx_regex_compile_t *rc); | |
82 ngx_int_t ngx_stream_regex_exec(ngx_stream_session_t *s, ngx_stream_regex_t *re, | |
83 ngx_str_t *str); | |
84 | |
85 #endif | |
86 | |
87 | |
88 typedef struct { | |
89 ngx_hash_combined_t hash; | |
90 #if (NGX_PCRE) | |
91 ngx_stream_map_regex_t *regex; | |
92 ngx_uint_t nregex; | |
93 #endif | |
94 } ngx_stream_map_t; | |
95 | |
96 | |
97 void *ngx_stream_map_find(ngx_stream_session_t *s, ngx_stream_map_t *map, | |
98 ngx_str_t *match); | |
99 | |
100 | |
101 ngx_int_t ngx_stream_variables_add_core_vars(ngx_conf_t *cf); | |
102 ngx_int_t ngx_stream_variables_init_vars(ngx_conf_t *cf); | |
103 | |
104 | |
105 extern ngx_stream_variable_value_t ngx_stream_variable_null_value; | |
106 extern ngx_stream_variable_value_t ngx_stream_variable_true_value; | |
107 | |
108 | |
109 #endif /* _NGX_STREAM_VARIABLES_H_INCLUDED_ */ |