xref: /unit/src/nxt_http_variables.c (revision 2124:6e74a08303ad)
1 
2 /*
3  * Copyright (C) NGINX, Inc.
4  */
5 
6 #include <nxt_router.h>
7 #include <nxt_http.h>
8 
9 
10 static nxt_int_t nxt_http_var_method(nxt_task_t *task, nxt_str_t *str,
11     void *ctx);
12 static nxt_int_t nxt_http_var_request_uri(nxt_task_t *task, nxt_str_t *str,
13     void *ctx);
14 static nxt_int_t nxt_http_var_uri(nxt_task_t *task, nxt_str_t *str, void *ctx);
15 static nxt_int_t nxt_http_var_host(nxt_task_t *task, nxt_str_t *str, void *ctx);
16 
17 
18 static nxt_var_decl_t  nxt_http_vars[] = {
19     { nxt_string("method"),
20       &nxt_http_var_method,
21       0 },
22 
23     { nxt_string("request_uri"),
24       &nxt_http_var_request_uri,
25       0 },
26 
27     { nxt_string("uri"),
28       &nxt_http_var_uri,
29       0 },
30 
31     { nxt_string("host"),
32       &nxt_http_var_host,
33       0 },
34 };
35 
36 
37 nxt_int_t
nxt_http_register_variables(void)38 nxt_http_register_variables(void)
39 {
40     return nxt_var_register(nxt_http_vars, nxt_nitems(nxt_http_vars));
41 }
42 
43 
44 static nxt_int_t
nxt_http_var_method(nxt_task_t * task,nxt_str_t * str,void * ctx)45 nxt_http_var_method(nxt_task_t *task, nxt_str_t *str, void *ctx)
46 {
47     nxt_http_request_t  *r;
48 
49     r = ctx;
50 
51     *str = *r->method;
52 
53     return NXT_OK;
54 }
55 
56 
57 static nxt_int_t
nxt_http_var_request_uri(nxt_task_t * task,nxt_str_t * str,void * ctx)58 nxt_http_var_request_uri(nxt_task_t *task, nxt_str_t *str, void *ctx)
59 {
60     nxt_http_request_t  *r;
61 
62     r = ctx;
63 
64     *str = r->target;
65 
66     return NXT_OK;
67 }
68 
69 
70 static nxt_int_t
nxt_http_var_uri(nxt_task_t * task,nxt_str_t * str,void * ctx)71 nxt_http_var_uri(nxt_task_t *task, nxt_str_t *str, void *ctx)
72 {
73     nxt_http_request_t  *r;
74 
75     r = ctx;
76 
77     *str = *r->path;
78 
79     return NXT_OK;
80 }
81 
82 
83 static nxt_int_t
nxt_http_var_host(nxt_task_t * task,nxt_str_t * str,void * ctx)84 nxt_http_var_host(nxt_task_t *task, nxt_str_t *str, void *ctx)
85 {
86     nxt_http_request_t  *r;
87 
88     r = ctx;
89 
90     *str = r->host;
91 
92     return NXT_OK;
93 }
94