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 */
37 ngx_http_request_t *request;
38 } ngx_http_script_engine_t;
45 ngx_array_t **flushes;
46 ngx_array_t **lengths;
51 ngx_uint_t captures_mask;
56 unsigned compile_args:1;
57 unsigned complete_lengths:1;
58 unsigned complete_values:1;
59 unsigned dup_capture:1;
62 } ngx_http_script_compile_t;
65 typedef void (*ngx_http_script_code_pt) (ngx_http_script_engine_t *e);
66 typedef size_t (*ngx_http_script_len_code_pt) (ngx_http_script_engine_t *e);
70 ngx_http_script_code_pt code;
72 } ngx_http_script_copy_code_t;
76 ngx_http_script_code_pt code;
78 } ngx_http_script_var_code_t;
82 ngx_http_script_code_pt code;
83 ngx_http_set_variable_pt handler;
85 } ngx_http_script_var_handler_code_t;
89 ngx_http_script_code_pt code;
91 } ngx_http_script_copy_capture_code_t;
97 ngx_http_script_code_pt code;
106 uintptr_t negative_test:1;
110 /* add the r->args to the new arguments */
111 uintptr_t add_args:1;
113 uintptr_t redirect:1;
114 uintptr_t break_cycle:1;
117 } ngx_http_script_regex_code_t;
121 ngx_http_script_code_pt code;
126 /* add the r->args to the new arguments */
127 uintptr_t add_args:1;
129 uintptr_t redirect:1;
130 } ngx_http_script_regex_end_code_t;
136 ngx_http_script_code_pt code;
139 } ngx_http_script_return_code_t;
143 ngx_http_script_file_plain = 0,
144 ngx_http_script_file_not_plain,
145 ngx_http_script_file_dir,
146 ngx_http_script_file_not_dir,
147 ngx_http_script_file_exists,
148 ngx_http_script_file_not_exists,
149 ngx_http_script_file_exec,
150 ngx_http_script_file_not_exec
151 } ngx_http_script_file_op_e;
155 ngx_http_script_code_pt code;
157 } ngx_http_script_file_code_t;
161 ngx_http_script_code_pt code;
164 } ngx_http_script_if_code_t;
168 ngx_http_script_code_pt code;
169 ngx_array_t *lengths;
170 } ngx_http_script_complex_value_code_t;
174 ngx_http_script_code_pt code;
178 } ngx_http_script_value_code_t;
181 ngx_uint_t ngx_http_script_variables_count(ngx_str_t *value);
182 ngx_int_t ngx_http_script_compile(ngx_http_script_compile_t *sc);
183 u_char *ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
184 void *code_lengths, size_t reserved, void *code_values);
185 void ngx_http_script_flush_no_cacheable_variables(ngx_http_request_t *r,
186 ngx_array_t *indices);
188 void *ngx_http_script_start_code(ngx_pool_t *pool, ngx_array_t **codes,
190 void *ngx_http_script_add_code(ngx_array_t *codes, size_t size, void *code);
192 size_t ngx_http_script_copy_len_code(ngx_http_script_engine_t *e);
193 void ngx_http_script_copy_code(ngx_http_script_engine_t *e);
194 size_t ngx_http_script_copy_var_len_code(ngx_http_script_engine_t *e);
195 void ngx_http_script_copy_var_code(ngx_http_script_engine_t *e);
196 size_t ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e);
197 void ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e);
198 size_t ngx_http_script_mark_args_code(ngx_http_script_engine_t *e);
199 void ngx_http_script_start_args_code(ngx_http_script_engine_t *e);
201 void ngx_http_script_regex_start_code(ngx_http_script_engine_t *e);
202 void ngx_http_script_regex_end_code(ngx_http_script_engine_t *e);
204 void ngx_http_script_return_code(ngx_http_script_engine_t *e);
205 void ngx_http_script_break_code(ngx_http_script_engine_t *e);
206 void ngx_http_script_if_code(ngx_http_script_engine_t *e);
207 void ngx_http_script_equal_code(ngx_http_script_engine_t *e);
208 void ngx_http_script_not_equal_code(ngx_http_script_engine_t *e);
209 void ngx_http_script_file_code(ngx_http_script_engine_t *e);
210 void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e);
211 void ngx_http_script_value_code(ngx_http_script_engine_t *e);
212 void ngx_http_script_set_var_code(ngx_http_script_engine_t *e);
213 void ngx_http_script_var_set_handler_code(ngx_http_script_engine_t *e);
214 void ngx_http_script_var_code(ngx_http_script_engine_t *e);
215 void ngx_http_script_nop_code(ngx_http_script_engine_t *e);
218 #endif /* _NGX_HTTP_SCRIPT_H_INCLUDED_ */