xref: /unit/src/nxt_var.h (revision 2656:daa9a3de84b4)
1 
2 /*
3  * Copyright (C) NGINX, Inc.
4  */
5 
6 #ifndef _NXT_VAR_H_INCLUDED_
7 #define _NXT_VAR_H_INCLUDED_
8 
9 
10 typedef struct nxt_var_s        nxt_var_t;
11 typedef struct nxt_var_query_s  nxt_var_query_t;
12 
13 
14 typedef nxt_int_t (*nxt_var_handler_t)(nxt_task_t *task,
15                                        nxt_str_t *str,
16                                        void *ctx, void *data);
17 
18 typedef int64_t (*nxt_var_field_hash_t)(nxt_mp_t *mp, nxt_str_t *str);
19 
20 typedef struct {
21     nxt_str_t               name;
22     nxt_var_handler_t       handler;
23     uint8_t                 cacheable;  /* 1 bit */
24 } nxt_var_decl_t;
25 
26 
27 typedef struct {
28     nxt_str_t               *name;
29     nxt_var_handler_t       handler;
30     void                    *data;
31     uint32_t                index;
32     uint8_t                 cacheable;  /* 1 bit */
33 } nxt_var_ref_t;
34 
35 
36 typedef struct {
37     nxt_str_t               name;
38     uint16_t                hash;
39 } nxt_var_field_t;
40 
41 
42 typedef struct {
43     nxt_mp_t                *pool;
44     nxt_lvlhsh_t            hash;
45     nxt_str_t               *spare;
46 } nxt_var_cache_t;
47 
48 
49 nxt_int_t nxt_var_register(nxt_var_decl_t *decl, size_t n);
50 nxt_int_t nxt_var_index_init(void);
51 
52 nxt_var_field_t *nxt_var_field_get(nxt_array_t *fields, uint16_t index);
53 nxt_var_field_t *nxt_var_field_new(nxt_mp_t *mp, nxt_str_t *name,
54     uint32_t hash);
55 
56 nxt_var_t *nxt_var_compile(nxt_tstr_state_t *state, nxt_str_t *str);
57 nxt_int_t nxt_var_test(nxt_tstr_state_t *state, nxt_str_t *str, u_char *error);
58 
59 nxt_int_t nxt_var_interpreter(nxt_task_t *task, nxt_tstr_state_t *state,
60     nxt_var_cache_t *cache, nxt_var_t *var, nxt_str_t *str, void *ctx,
61     nxt_bool_t logging);
62 nxt_str_t *nxt_var_get(nxt_task_t *task, nxt_tstr_state_t *state,
63     nxt_var_cache_t *cache, nxt_str_t *name, void *ctx);
64 
65 nxt_int_t nxt_http_unknown_var_ref(nxt_mp_t *mp, nxt_var_ref_t *ref,
66     nxt_str_t *name);
67 
68 
69 #endif /* _NXT_VAR_H_INCLUDED_ */
70