1
2 /*
3 * Copyright (C) NGINX, Inc.
4 */
5
6 #ifndef _NXT_TSTR_H_INCLUDED_
7 #define _NXT_TSTR_H_INCLUDED_
8
9
10 #include <nxt_js.h>
11
12 typedef struct nxt_tstr_s nxt_tstr_t;
13 typedef struct nxt_tstr_query_s nxt_tstr_query_t;
14
15
16 struct nxt_tstr_state_s {
17 nxt_mp_t *pool;
18 nxt_array_t *var_refs;
19 #if (NXT_HAVE_NJS)
20 nxt_js_conf_t *jcf;
21 #endif
22 uint8_t test; /* 1 bit */
23 };
24
25
26 typedef struct {
27 nxt_var_cache_t var;
28 #if (NXT_HAVE_NJS)
29 nxt_js_cache_t js;
30 #endif
31 } nxt_tstr_cache_t;
32
33
34 typedef enum {
35 NXT_TSTR_STRZ = 1 << 0,
36 NXT_TSTR_LOGGING = 1 << 1,
37 } nxt_tstr_flags_t;
38
39
40 nxt_tstr_state_t *nxt_tstr_state_new(nxt_mp_t *mp, nxt_bool_t test);
41 nxt_tstr_t *nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str,
42 nxt_tstr_flags_t flags);
43 nxt_int_t nxt_tstr_test(nxt_tstr_state_t *state, nxt_str_t *str, u_char *error);
44 nxt_int_t nxt_tstr_state_done(nxt_tstr_state_t *state, u_char *error);
45 void nxt_tstr_state_release(nxt_tstr_state_t *state);
46
47 nxt_bool_t nxt_tstr_is_const(nxt_tstr_t *tstr);
48 void nxt_tstr_str(nxt_tstr_t *tstr, nxt_str_t *str);
49
50 nxt_int_t nxt_tstr_query_init(nxt_tstr_query_t **query_p,
51 nxt_tstr_state_t *state, nxt_tstr_cache_t *cache, void *ctx,
52 nxt_mp_t *mp);
53 void nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
54 nxt_str_t *val);
55 nxt_bool_t nxt_tstr_query_failed(nxt_tstr_query_t *query);
56 void nxt_tstr_query_resolve(nxt_task_t *task, nxt_tstr_query_t *query,
57 void *data, nxt_work_handler_t ready, nxt_work_handler_t error);
58 void nxt_tstr_query_handle(nxt_task_t *task, nxt_tstr_query_t *query,
59 nxt_bool_t failed);
60 void nxt_tstr_query_release(nxt_tstr_query_t *query);
61
62
63 nxt_inline nxt_bool_t
nxt_is_tstr(nxt_str_t * str)64 nxt_is_tstr(nxt_str_t *str)
65 {
66 u_char *p;
67
68 p = memchr(str->start, '`', str->length);
69 if (p != NULL) {
70 return 1;
71 }
72
73 p = memchr(str->start, '$', str->length);
74 if (p != NULL) {
75 return 1;
76 }
77
78 return 0;
79 }
80
81
82 #endif /* _NXT_TSTR_H_INCLUDED_ */
83