1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) Nginx, Inc. 5 */ 6 7 8 #ifndef _NGX_HTTP_VARIABLES_H_INCLUDED_ 9 #define _NGX_HTTP_VARIABLES_H_INCLUDED_ 10 11 12 #include <ngx_config.h> 13 #include <ngx_core.h> 14 #include <ngx_http.h> 15 16 17 typedef ngx_variable_value_t ngx_http_variable_value_t; 18 19 #define ngx_http_variable(v) { sizeof(v) - 1, 1, 0, 0, 0, (u_char *) v } 20 21 typedef struct ngx_http_variable_s ngx_http_variable_t; 22 23 typedef void (*ngx_http_set_variable_pt) (ngx_http_request_t *r, 24 ngx_http_variable_value_t *v, uintptr_t data); 25 typedef ngx_int_t (*ngx_http_get_variable_pt) (ngx_http_request_t *r, 26 ngx_http_variable_value_t *v, uintptr_t data); 27 28 29 #define NGX_HTTP_VAR_CHANGEABLE 1 30 #define NGX_HTTP_VAR_NOCACHEABLE 2 31 #define NGX_HTTP_VAR_INDEXED 4 32 #define NGX_HTTP_VAR_NOHASH 8 33 #define NGX_HTTP_VAR_WEAK 16 34 #define NGX_HTTP_VAR_PREFIX 32 35 36 37 struct ngx_http_variable_s { 38 ngx_str_t name; /* must be first to build the hash */ 39 ngx_http_set_variable_pt set_handler; 40 ngx_http_get_variable_pt get_handler; 41 uintptr_t data; 42 ngx_uint_t flags; 43 ngx_uint_t index; 44 }; 45 46 #define ngx_http_null_variable { ngx_null_string, NULL, NULL, 0, 0, 0 } 47 48 49 ngx_http_variable_t *ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name, 50 ngx_uint_t flags); 51 ngx_int_t ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name); 52 ngx_http_variable_value_t *ngx_http_get_indexed_variable(ngx_http_request_t *r, 53 ngx_uint_t index); 54 ngx_http_variable_value_t *ngx_http_get_flushed_variable(ngx_http_request_t *r, 55 ngx_uint_t index); 56 57 ngx_http_variable_value_t *ngx_http_get_variable(ngx_http_request_t *r, 58 ngx_str_t *name, ngx_uint_t key); 59 60 ngx_int_t ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, 61 ngx_str_t *var, ngx_list_part_t *part, size_t prefix); 62 63 64 #if (NGX_PCRE) 65 66 typedef struct { 67 ngx_uint_t capture; 68 ngx_int_t index; 69 } ngx_http_regex_variable_t; 70 71 72 typedef struct { 73 ngx_regex_t *regex; 74 ngx_uint_t ncaptures; 75 ngx_http_regex_variable_t *variables; 76 ngx_uint_t nvariables; 77 ngx_str_t name; 78 } ngx_http_regex_t; 79 80 81 typedef struct { 82 ngx_http_regex_t *regex; 83 void *value; 84 } ngx_http_map_regex_t; 85 86 87 ngx_http_regex_t *ngx_http_regex_compile(ngx_conf_t *cf, 88 ngx_regex_compile_t *rc); 89 ngx_int_t ngx_http_regex_exec(ngx_http_request_t *r, ngx_http_regex_t *re, 90 ngx_str_t *s); 91 92 #endif 93 94 95 typedef struct { 96 ngx_hash_combined_t hash; 97 #if (NGX_PCRE) 98 ngx_http_map_regex_t *regex; 99 ngx_uint_t nregex; 100 #endif 101 } ngx_http_map_t; 102 103 104 void *ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, 105 ngx_str_t *match); 106 107 108 ngx_int_t ngx_http_variables_add_core_vars(ngx_conf_t *cf); 109 ngx_int_t ngx_http_variables_init_vars(ngx_conf_t *cf); 110 111 112 extern ngx_http_variable_value_t ngx_http_variable_null_value; 113 extern ngx_http_variable_value_t ngx_http_variable_true_value; 114 115 116 #endif /* _NGX_HTTP_VARIABLES_H_INCLUDED_ */ 117