blob: df487e48ea7be33877576d18f6df11fb3fdd94e0 [file] [log] [blame]
Igor Sysoev8184d1b2005-03-04 14:06:57 +00001
2/*
3 * Copyright (C) Igor Sysoev
4 */
5
6
7#ifndef _NGX_HTTP_VARIABLES_H_INCLUDED_
8#define _NGX_HTTP_VARIABLES_H_INCLUDED_
9
10
11#include <ngx_config.h>
12#include <ngx_core.h>
13#include <ngx_event.h>
14#include <ngx_http.h>
15
16
Igor Sysoev899b44e2005-05-12 14:58:06 +000017typedef struct {
Igor Sysoev09c684b2005-11-09 17:25:55 +000018 unsigned len:29;
19
20 unsigned valid:1;
21 unsigned no_cachable:1;
22 unsigned not_found:1;
23
24 u_char *data;
Igor Sysoev899b44e2005-05-12 14:58:06 +000025} ngx_http_variable_value_t;
Igor Sysoev8184d1b2005-03-04 14:06:57 +000026
Igor Sysoev09c684b2005-11-09 17:25:55 +000027#define ngx_http_variable(v) { sizeof(v) - 1, 1, 0, 0, (u_char *) v }
28
Igor Sysoev8184d1b2005-03-04 14:06:57 +000029typedef struct ngx_http_variable_s ngx_http_variable_t;
30
Igor Sysoev7bdb7202006-04-19 15:30:56 +000031typedef void (*ngx_http_set_variable_pt) (ngx_http_request_t *r,
32 ngx_http_variable_value_t *v, uintptr_t data);
Igor Sysoev09c684b2005-11-09 17:25:55 +000033typedef ngx_int_t (*ngx_http_get_variable_pt) (ngx_http_request_t *r,
34 ngx_http_variable_value_t *v, uintptr_t data);
Igor Sysoev8184d1b2005-03-04 14:06:57 +000035
36
Igor Sysoev899b44e2005-05-12 14:58:06 +000037#define NGX_HTTP_VAR_CHANGABLE 1
38#define NGX_HTTP_VAR_NOCACHABLE 2
Igor Sysoev403d2442005-05-26 18:12:40 +000039#define NGX_HTTP_VAR_INDEXED 4
Igor Sysoevd3283ff2005-12-05 13:18:09 +000040#define NGX_HTTP_VAR_NOHASH 8
Igor Sysoev899b44e2005-05-12 14:58:06 +000041
42
Igor Sysoev8184d1b2005-03-04 14:06:57 +000043struct ngx_http_variable_s {
Igor Sysoev09c684b2005-11-09 17:25:55 +000044 ngx_str_t name; /* must be first to build the hash */
Igor Sysoev7bdb7202006-04-19 15:30:56 +000045 ngx_http_set_variable_pt set_handler;
46 ngx_http_get_variable_pt get_handler;
Igor Sysoev09c684b2005-11-09 17:25:55 +000047 uintptr_t data;
48 ngx_uint_t flags;
49 ngx_uint_t index;
Igor Sysoev8184d1b2005-03-04 14:06:57 +000050};
51
52
Igor Sysoevc1571722005-03-19 12:38:37 +000053ngx_http_variable_t *ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name,
Igor Sysoev899b44e2005-05-12 14:58:06 +000054 ngx_uint_t flags);
55ngx_int_t ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name);
Igor Sysoev8184d1b2005-03-04 14:06:57 +000056ngx_http_variable_value_t *ngx_http_get_indexed_variable(ngx_http_request_t *r,
57 ngx_uint_t index);
Igor Sysoev09c684b2005-11-09 17:25:55 +000058ngx_http_variable_value_t *ngx_http_get_flushed_variable(ngx_http_request_t *r,
59 ngx_uint_t index);
60
Igor Sysoev8184d1b2005-03-04 14:06:57 +000061ngx_http_variable_value_t *ngx_http_get_variable(ngx_http_request_t *r,
Igor Sysoevcdf609a2006-04-17 19:55:41 +000062 ngx_str_t *name, ngx_uint_t key, ngx_uint_t nowarn);
Igor Sysoev899b44e2005-05-12 14:58:06 +000063
Igor Sysoev27233612007-04-10 07:08:06 +000064ngx_int_t ngx_http_variable_unknown_header(ngx_http_variable_value_t *v,
65 ngx_str_t *var, ngx_list_part_t *part, size_t prefix);
66
67
Igor Sysoev09c684b2005-11-09 17:25:55 +000068#define ngx_http_clear_variable(r, index) r->variables0[index].text.data = NULL;
69
70
Igor Sysoev899b44e2005-05-12 14:58:06 +000071ngx_int_t ngx_http_variables_add_core_vars(ngx_conf_t *cf);
72ngx_int_t ngx_http_variables_init_vars(ngx_conf_t *cf);
Igor Sysoev8184d1b2005-03-04 14:06:57 +000073
74
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +000075extern ngx_http_variable_value_t ngx_http_variable_null_value;
76extern ngx_http_variable_value_t ngx_http_variable_true_value;
77
78
Igor Sysoev8184d1b2005-03-04 14:06:57 +000079#endif /* _NGX_HTTP_VARIABLES_H_INCLUDED_ */