Line | Count | Source |
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_NEWLINE = 1 << 2, |
38 | | } nxt_tstr_flags_t; |
39 | | |
40 | | |
41 | | typedef struct { |
42 | | nxt_tstr_t *expr; |
43 | | uint8_t negate; /* 1 bit */ |
44 | | } nxt_tstr_cond_t; |
45 | | |
46 | | |
47 | | nxt_tstr_state_t *nxt_tstr_state_new(nxt_mp_t *mp, nxt_bool_t test); |
48 | | nxt_tstr_t *nxt_tstr_compile(nxt_tstr_state_t *state, const nxt_str_t *str, |
49 | | nxt_tstr_flags_t flags); |
50 | | nxt_int_t nxt_tstr_test(nxt_tstr_state_t *state, nxt_str_t *str, u_char *error); |
51 | | nxt_int_t nxt_tstr_state_done(nxt_tstr_state_t *state, u_char *error); |
52 | | void nxt_tstr_state_release(nxt_tstr_state_t *state); |
53 | | nxt_int_t nxt_tstr_cond_compile(nxt_tstr_state_t *state, nxt_str_t *str, |
54 | | nxt_tstr_cond_t *cond); |
55 | | |
56 | | nxt_bool_t nxt_tstr_is_const(nxt_tstr_t *tstr); |
57 | | void nxt_tstr_str(nxt_tstr_t *tstr, nxt_str_t *str); |
58 | | |
59 | | nxt_int_t nxt_tstr_query_init(nxt_tstr_query_t **query_p, |
60 | | nxt_tstr_state_t *state, nxt_tstr_cache_t *cache, void *ctx, |
61 | | nxt_mp_t *mp); |
62 | | nxt_int_t nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, |
63 | | nxt_tstr_t *tstr, nxt_str_t *val); |
64 | | void nxt_tstr_query_release(nxt_tstr_query_t *query); |
65 | | |
66 | | |
67 | | #define nxt_tstr_is_js(str) \ |
68 | 0 | nxt_strchr_start(str, '`') |
69 | | |
70 | | |
71 | | nxt_inline nxt_bool_t |
72 | | nxt_is_tstr(nxt_str_t *str) |
73 | 0 | { |
74 | 0 | u_char *p; |
75 | |
|
76 | 0 | p = memchr(str->start, '`', str->length); |
77 | 0 | if (p != NULL) { |
78 | 0 | return 1; |
79 | 0 | } |
80 | | |
81 | 0 | p = memchr(str->start, '$', str->length); |
82 | 0 | if (p != NULL) { |
83 | 0 | return 1; |
84 | 0 | } |
85 | | |
86 | 0 | return 0; |
87 | 0 | } Unexecuted instantiation: nxt_http_controller_fuzz.c:nxt_is_tstr Unexecuted instantiation: nxt_lib.c:nxt_is_tstr Unexecuted instantiation: nxt_errno.c:nxt_is_tstr Unexecuted instantiation: nxt_malloc.c:nxt_is_tstr Unexecuted instantiation: nxt_file.c:nxt_is_tstr Unexecuted instantiation: nxt_mem_map.c:nxt_is_tstr Unexecuted instantiation: nxt_process.c:nxt_is_tstr Unexecuted instantiation: nxt_process_title.c:nxt_is_tstr Unexecuted instantiation: nxt_port_socket.c:nxt_is_tstr Unexecuted instantiation: nxt_port_memory.c:nxt_is_tstr Unexecuted instantiation: nxt_port_rpc.c:nxt_is_tstr Unexecuted instantiation: nxt_port.c:nxt_is_tstr Unexecuted instantiation: nxt_random.c:nxt_is_tstr Unexecuted instantiation: nxt_mp.c:nxt_is_tstr Unexecuted instantiation: nxt_string.c:nxt_is_tstr Unexecuted instantiation: nxt_parse.c:nxt_is_tstr Unexecuted instantiation: nxt_sprintf.c:nxt_is_tstr Unexecuted instantiation: nxt_log.c:nxt_is_tstr Unexecuted instantiation: nxt_murmur_hash.c:nxt_is_tstr Unexecuted instantiation: nxt_lvlhsh.c:nxt_is_tstr Unexecuted instantiation: nxt_buf.c:nxt_is_tstr Unexecuted instantiation: nxt_sendbuf.c:nxt_is_tstr Unexecuted instantiation: nxt_thread.c:nxt_is_tstr Unexecuted instantiation: nxt_thread_mutex.c:nxt_is_tstr Unexecuted instantiation: nxt_spinlock.c:nxt_is_tstr Unexecuted instantiation: nxt_thread_time.c:nxt_is_tstr Unexecuted instantiation: nxt_work_queue.c:nxt_is_tstr Unexecuted instantiation: nxt_service.c:nxt_is_tstr Unexecuted instantiation: nxt_log_moderation.c:nxt_is_tstr Unexecuted instantiation: nxt_event_engine.c:nxt_is_tstr Unexecuted instantiation: nxt_timer.c:nxt_is_tstr Unexecuted instantiation: nxt_conn.c:nxt_is_tstr Unexecuted instantiation: nxt_conn_connect.c:nxt_is_tstr Unexecuted instantiation: nxt_conn_accept.c:nxt_is_tstr Unexecuted instantiation: nxt_conn_read.c:nxt_is_tstr Unexecuted instantiation: nxt_conn_write.c:nxt_is_tstr Unexecuted instantiation: nxt_conn_close.c:nxt_is_tstr Unexecuted instantiation: nxt_sockaddr.c:nxt_is_tstr Unexecuted instantiation: nxt_listen_socket.c:nxt_is_tstr Unexecuted instantiation: nxt_http_parse.c:nxt_is_tstr Unexecuted instantiation: nxt_runtime.c:nxt_is_tstr Unexecuted instantiation: nxt_conf.c:nxt_is_tstr Unexecuted instantiation: nxt_conf_validation.c:nxt_is_tstr Unexecuted instantiation: nxt_main_process.c:nxt_is_tstr Unexecuted instantiation: nxt_signal_handlers.c:nxt_is_tstr Unexecuted instantiation: nxt_router.c:nxt_is_tstr Unexecuted instantiation: nxt_router_access_log.c:nxt_is_tstr Unexecuted instantiation: nxt_h1proto.c:nxt_is_tstr Unexecuted instantiation: nxt_status.c:nxt_is_tstr Unexecuted instantiation: nxt_http_request.c:nxt_is_tstr Unexecuted instantiation: nxt_http_response.c:nxt_is_tstr Unexecuted instantiation: nxt_http_error.c:nxt_is_tstr Unexecuted instantiation: nxt_http_route.c:nxt_is_tstr Unexecuted instantiation: nxt_http_route_addr.c:nxt_is_tstr Unexecuted instantiation: nxt_http_rewrite.c:nxt_is_tstr Unexecuted instantiation: nxt_http_set_headers.c:nxt_is_tstr Unexecuted instantiation: nxt_http_return.c:nxt_is_tstr Unexecuted instantiation: nxt_http_static.c:nxt_is_tstr Unexecuted instantiation: nxt_http_proxy.c:nxt_is_tstr Unexecuted instantiation: nxt_http_chunk_parse.c:nxt_is_tstr Unexecuted instantiation: nxt_http_variables.c:nxt_is_tstr Unexecuted instantiation: nxt_application.c:nxt_is_tstr Unexecuted instantiation: nxt_external.c:nxt_is_tstr Unexecuted instantiation: nxt_port_hash.c:nxt_is_tstr Unexecuted instantiation: nxt_websocket_accept.c:nxt_is_tstr Unexecuted instantiation: nxt_http_websocket.c:nxt_is_tstr Unexecuted instantiation: nxt_h1proto_websocket.c:nxt_is_tstr Unexecuted instantiation: nxt_fs.c:nxt_is_tstr Unexecuted instantiation: nxt_http_compression.c:nxt_is_tstr Unexecuted instantiation: nxt_epoll_engine.c:nxt_is_tstr Unexecuted instantiation: nxt_poll_engine.c:nxt_is_tstr Unexecuted instantiation: nxt_select_engine.c:nxt_is_tstr Unexecuted instantiation: nxt_linux_sendfile.c:nxt_is_tstr Unexecuted instantiation: nxt_clone.c:nxt_is_tstr Unexecuted instantiation: nxt_gmtime.c:nxt_is_tstr Unexecuted instantiation: nxt_time.c:nxt_is_tstr Unexecuted instantiation: nxt_socket.c:nxt_is_tstr Unexecuted instantiation: nxt_socketpair.c:nxt_is_tstr Unexecuted instantiation: nxt_socket_msg.c:nxt_is_tstr Unexecuted instantiation: nxt_credential.c:nxt_is_tstr Unexecuted instantiation: nxt_isolation.c:nxt_is_tstr Unexecuted instantiation: nxt_signal.c:nxt_is_tstr Unexecuted instantiation: nxt_rbtree.c:nxt_is_tstr Unexecuted instantiation: nxt_utf8.c:nxt_is_tstr Unexecuted instantiation: nxt_var.c:nxt_is_tstr Unexecuted instantiation: nxt_tstr.c:nxt_is_tstr Unexecuted instantiation: nxt_file_name.c:nxt_is_tstr Unexecuted instantiation: nxt_djb_hash.c:nxt_is_tstr Unexecuted instantiation: nxt_array.c:nxt_is_tstr Unexecuted instantiation: nxt_list.c:nxt_is_tstr Unexecuted instantiation: nxt_recvbuf.c:nxt_is_tstr Unexecuted instantiation: nxt_thread_pool.c:nxt_is_tstr Unexecuted instantiation: nxt_upstream.c:nxt_is_tstr Unexecuted instantiation: nxt_upstream_round_robin.c:nxt_is_tstr Unexecuted instantiation: nxt_capability.c:nxt_is_tstr Unexecuted instantiation: nxt_sha1.c:nxt_is_tstr Unexecuted instantiation: nxt_websocket.c:nxt_is_tstr Unexecuted instantiation: nxt_fs_mount.c:nxt_is_tstr Unexecuted instantiation: nxt_semaphore.c:nxt_is_tstr |
88 | | |
89 | | |
90 | | #endif /* _NXT_TSTR_H_INCLUDED_ */ |