3 * Copyright (C) Igor Sysoev
7 #ifndef _NGX_HTTP_SCRIPT_H_INCLUDED_
8 #define _NGX_HTTP_SCRIPT_H_INCLUDED_
11 #include <ngx_config.h>
19 ngx_http_variable_value_t *sp;
24 /* the start of the rewritten arguments */
34 ngx_http_request_t *request;
35 } ngx_http_script_engine_t;
42 ngx_array_t **flushes;
43 ngx_array_t **lengths;
48 ngx_uint_t captures_mask;
53 unsigned compile_args:1;
54 unsigned complete_lengths:1;
55 unsigned complete_values:1;
56 unsigned dup_capture:1;
59 } ngx_http_script_compile_t;
62 typedef void (*ngx_http_script_code_pt) (ngx_http_script_engine_t *e);
63 typedef size_t (*ngx_http_script_len_code_pt) (ngx_http_script_engine_t *e);
67 ngx_http_script_code_pt code;
69 } ngx_http_script_copy_code_t;
73 ngx_http_script_code_pt code;
75 } ngx_http_script_var_code_t;
79 ngx_http_script_code_pt code;
80 ngx_http_set_variable_pt handler;
82 } ngx_http_script_var_handler_code_t;
86 ngx_http_script_code_pt code;
88 } ngx_http_script_copy_capture_code_t;
94 ngx_http_script_code_pt code;
103 uintptr_t negative_test:1;
107 /* add the r->args to the new arguments */
108 uintptr_t add_args:1;
110 uintptr_t redirect:1;
111 uintptr_t break_cycle:1;
114 } ngx_http_script_regex_code_t;
118 ngx_http_script_code_pt code;
123 /* add the r->args to the new arguments */
124 uintptr_t add_args:1;
126 uintptr_t redirect:1;
127 } ngx_http_script_regex_end_code_t;
133 ngx_http_script_code_pt code;
136 } ngx_http_script_return_code_t;
140 ngx_http_script_file_plain = 0,
141 ngx_http_script_file_not_plain,
142 ngx_http_script_file_dir,
143 ngx_http_script_file_not_dir,
144 ngx_http_script_file_exists,
145 ngx_http_script_file_not_exists,
146 ngx_http_script_file_exec,
147 ngx_http_script_file_not_exec
148 } ngx_http_script_file_op_e;
152 ngx_http_script_code_pt code;
154 } ngx_http_script_file_code_t;
158 ngx_http_script_code_pt code;
161 } ngx_http_script_if_code_t;
165 ngx_http_script_code_pt code;
166 ngx_array_t *lengths;
167 } ngx_http_script_complex_value_code_t;
171 ngx_http_script_code_pt code;
175 } ngx_http_script_value_code_t;
178 ngx_uint_t ngx_http_script_variables_count(ngx_str_t *value);
179 ngx_int_t ngx_http_script_compile(ngx_http_script_compile_t *sc);
180 u_char *ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
181 void *code_lengths, size_t reserved, void *code_values);
182 void ngx_http_script_flush_no_cacheable_variables(ngx_http_request_t *r,
183 ngx_array_t *indices);
185 void *ngx_http_script_start_code(ngx_pool_t *pool, ngx_array_t **codes,
187 void *ngx_http_script_add_code(ngx_array_t *codes, size_t size, void *code);
189 size_t ngx_http_script_copy_len_code(ngx_http_script_engine_t *e);
190 void ngx_http_script_copy_code(ngx_http_script_engine_t *e);
191 size_t ngx_http_script_copy_var_len_code(ngx_http_script_engine_t *e);
192 void ngx_http_script_copy_var_code(ngx_http_script_engine_t *e);
193 size_t ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e);
194 void ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e);
195 size_t ngx_http_script_mark_args_code(ngx_http_script_engine_t *e);
196 void ngx_http_script_start_args_code(ngx_http_script_engine_t *e);
198 void ngx_http_script_regex_start_code(ngx_http_script_engine_t *e);
199 void ngx_http_script_regex_end_code(ngx_http_script_engine_t *e);
201 void ngx_http_script_return_code(ngx_http_script_engine_t *e);
202 void ngx_http_script_break_code(ngx_http_script_engine_t *e);
203 void ngx_http_script_if_code(ngx_http_script_engine_t *e);
204 void ngx_http_script_equal_code(ngx_http_script_engine_t *e);
205 void ngx_http_script_not_equal_code(ngx_http_script_engine_t *e);
206 void ngx_http_script_file_code(ngx_http_script_engine_t *e);
207 void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e);
208 void ngx_http_script_value_code(ngx_http_script_engine_t *e);
209 void ngx_http_script_set_var_code(ngx_http_script_engine_t *e);
210 void ngx_http_script_var_set_handler_code(ngx_http_script_engine_t *e);
211 void ngx_http_script_var_code(ngx_http_script_engine_t *e);
212 void ngx_http_script_nop_code(ngx_http_script_engine_t *e);
215 #endif /* _NGX_HTTP_SCRIPT_H_INCLUDED_ */