xref: /unit/src/nxt_tstr.h (revision 2504:c559ee0041ec)
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