1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) Nginx, Inc. 5 */ 6 7 8 #ifndef _NGX_STREAM_SCRIPT_H_INCLUDED_ 9 #define _NGX_STREAM_SCRIPT_H_INCLUDED_ 10 11 12 #include <ngx_config.h> 13 #include <ngx_core.h> 14 #include <ngx_stream.h> 15 16 17 typedef struct { 18 u_char *ip; 19 u_char *pos; 20 ngx_stream_variable_value_t *sp; 21 22 ngx_str_t buf; 23 ngx_str_t line; 24 25 unsigned flushed:1; 26 unsigned skip:1; 27 28 ngx_stream_session_t *session; 29 } ngx_stream_script_engine_t; 30 31 32 typedef struct { 33 ngx_conf_t *cf; 34 ngx_str_t *source; 35 36 ngx_array_t **flushes; 37 ngx_array_t **lengths; 38 ngx_array_t **values; 39 40 ngx_uint_t variables; 41 ngx_uint_t ncaptures; 42 ngx_uint_t size; 43 44 void *main; 45 46 unsigned complete_lengths:1; 47 unsigned complete_values:1; 48 unsigned zero:1; 49 unsigned conf_prefix:1; 50 unsigned root_prefix:1; 51 } ngx_stream_script_compile_t; 52 53 54 typedef struct { 55 ngx_str_t value; 56 ngx_uint_t *flushes; 57 void *lengths; 58 void *values; 59 60 union { 61 size_t size; 62 } u; 63 } ngx_stream_complex_value_t; 64 65 66 typedef struct { 67 ngx_conf_t *cf; 68 ngx_str_t *value; 69 ngx_stream_complex_value_t *complex_value; 70 71 unsigned zero:1; 72 unsigned conf_prefix:1; 73 unsigned root_prefix:1; 74 } ngx_stream_compile_complex_value_t; 75 76 77 typedef void (*ngx_stream_script_code_pt) (ngx_stream_script_engine_t *e); 78 typedef size_t (*ngx_stream_script_len_code_pt) (ngx_stream_script_engine_t *e); 79 80 81 typedef struct { 82 ngx_stream_script_code_pt code; 83 uintptr_t len; 84 } ngx_stream_script_copy_code_t; 85 86 87 typedef struct { 88 ngx_stream_script_code_pt code; 89 uintptr_t index; 90 } ngx_stream_script_var_code_t; 91 92 93 typedef struct { 94 ngx_stream_script_code_pt code; 95 uintptr_t n; 96 } ngx_stream_script_copy_capture_code_t; 97 98 99 typedef struct { 100 ngx_stream_script_code_pt code; 101 uintptr_t conf_prefix; 102 } ngx_stream_script_full_name_code_t; 103 104 105 void ngx_stream_script_flush_complex_value(ngx_stream_session_t *s, 106 ngx_stream_complex_value_t *val); 107 ngx_int_t ngx_stream_complex_value(ngx_stream_session_t *s, 108 ngx_stream_complex_value_t *val, ngx_str_t *value); 109 size_t ngx_stream_complex_value_size(ngx_stream_session_t *s, 110 ngx_stream_complex_value_t *val, size_t default_value); 111 ngx_int_t ngx_stream_compile_complex_value( 112 ngx_stream_compile_complex_value_t *ccv); 113 char *ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, 114 void *conf); 115 char *ngx_stream_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd, 116 void *conf); 117 118 119 ngx_uint_t ngx_stream_script_variables_count(ngx_str_t *value); 120 ngx_int_t ngx_stream_script_compile(ngx_stream_script_compile_t *sc); 121 u_char *ngx_stream_script_run(ngx_stream_session_t *s, ngx_str_t *value, 122 void *code_lengths, size_t reserved, void *code_values); 123 void ngx_stream_script_flush_no_cacheable_variables(ngx_stream_session_t *s, 124 ngx_array_t *indices); 125 126 void *ngx_stream_script_add_code(ngx_array_t *codes, size_t size, void *code); 127 128 size_t ngx_stream_script_copy_len_code(ngx_stream_script_engine_t *e); 129 void ngx_stream_script_copy_code(ngx_stream_script_engine_t *e); 130 size_t ngx_stream_script_copy_var_len_code(ngx_stream_script_engine_t *e); 131 void ngx_stream_script_copy_var_code(ngx_stream_script_engine_t *e); 132 size_t ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e); 133 void ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e); 134 135 #endif /* _NGX_STREAM_SCRIPT_H_INCLUDED_ */ 136