|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | * Copyright (C) Nginx, Inc. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef _NGX_STREAM_SCRIPT_H_INCLUDED_ | 
|  | #define _NGX_STREAM_SCRIPT_H_INCLUDED_ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  | #include <ngx_core.h> | 
|  | #include <ngx_stream.h> | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | u_char                       *ip; | 
|  | u_char                       *pos; | 
|  | ngx_stream_variable_value_t  *sp; | 
|  |  | 
|  | ngx_str_t                     buf; | 
|  | ngx_str_t                     line; | 
|  |  | 
|  | unsigned                      flushed:1; | 
|  | unsigned                      skip:1; | 
|  |  | 
|  | ngx_stream_session_t         *session; | 
|  | } ngx_stream_script_engine_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_conf_t                   *cf; | 
|  | ngx_str_t                    *source; | 
|  |  | 
|  | ngx_array_t                 **flushes; | 
|  | ngx_array_t                 **lengths; | 
|  | ngx_array_t                 **values; | 
|  |  | 
|  | ngx_uint_t                    variables; | 
|  | ngx_uint_t                    ncaptures; | 
|  | ngx_uint_t                    size; | 
|  |  | 
|  | void                         *main; | 
|  |  | 
|  | unsigned                      complete_lengths:1; | 
|  | unsigned                      complete_values:1; | 
|  | unsigned                      zero:1; | 
|  | unsigned                      conf_prefix:1; | 
|  | unsigned                      root_prefix:1; | 
|  | } ngx_stream_script_compile_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_str_t                     value; | 
|  | ngx_uint_t                   *flushes; | 
|  | void                         *lengths; | 
|  | void                         *values; | 
|  | } ngx_stream_complex_value_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_conf_t                   *cf; | 
|  | ngx_str_t                    *value; | 
|  | ngx_stream_complex_value_t   *complex_value; | 
|  |  | 
|  | unsigned                      zero:1; | 
|  | unsigned                      conf_prefix:1; | 
|  | unsigned                      root_prefix:1; | 
|  | } ngx_stream_compile_complex_value_t; | 
|  |  | 
|  |  | 
|  | typedef void (*ngx_stream_script_code_pt) (ngx_stream_script_engine_t *e); | 
|  | typedef size_t (*ngx_stream_script_len_code_pt) (ngx_stream_script_engine_t *e); | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_stream_script_code_pt     code; | 
|  | uintptr_t                     len; | 
|  | } ngx_stream_script_copy_code_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_stream_script_code_pt     code; | 
|  | uintptr_t                     index; | 
|  | } ngx_stream_script_var_code_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_stream_script_code_pt     code; | 
|  | uintptr_t                     n; | 
|  | } ngx_stream_script_copy_capture_code_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_stream_script_code_pt     code; | 
|  | uintptr_t                     conf_prefix; | 
|  | } ngx_stream_script_full_name_code_t; | 
|  |  | 
|  |  | 
|  | void ngx_stream_script_flush_complex_value(ngx_stream_session_t *s, | 
|  | ngx_stream_complex_value_t *val); | 
|  | ngx_int_t ngx_stream_complex_value(ngx_stream_session_t *s, | 
|  | ngx_stream_complex_value_t *val, ngx_str_t *value); | 
|  | ngx_int_t ngx_stream_compile_complex_value( | 
|  | ngx_stream_compile_complex_value_t *ccv); | 
|  | char *ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, | 
|  | void *conf); | 
|  |  | 
|  |  | 
|  | ngx_uint_t ngx_stream_script_variables_count(ngx_str_t *value); | 
|  | ngx_int_t ngx_stream_script_compile(ngx_stream_script_compile_t *sc); | 
|  | u_char *ngx_stream_script_run(ngx_stream_session_t *s, ngx_str_t *value, | 
|  | void *code_lengths, size_t reserved, void *code_values); | 
|  | void ngx_stream_script_flush_no_cacheable_variables(ngx_stream_session_t *s, | 
|  | ngx_array_t *indices); | 
|  |  | 
|  | void *ngx_stream_script_add_code(ngx_array_t *codes, size_t size, void *code); | 
|  |  | 
|  | size_t ngx_stream_script_copy_len_code(ngx_stream_script_engine_t *e); | 
|  | void ngx_stream_script_copy_code(ngx_stream_script_engine_t *e); | 
|  | size_t ngx_stream_script_copy_var_len_code(ngx_stream_script_engine_t *e); | 
|  | void ngx_stream_script_copy_var_code(ngx_stream_script_engine_t *e); | 
|  | size_t ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e); | 
|  | void ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e); | 
|  |  | 
|  | #endif /* _NGX_STREAM_SCRIPT_H_INCLUDED_ */ |