3 #ifndef NETDATA_WEB_CLIENT_H 4 #define NETDATA_WEB_CLIENT_H 1 6 #ifdef NETDATA_WITH_ZLIB 7 extern int web_enable_gzip,
12 extern int respect_web_browser_do_not_track_policy;
13 extern char *web_x_frame_options;
15 typedef enum web_client_mode {
16 WEB_CLIENT_MODE_NORMAL = 0,
17 WEB_CLIENT_MODE_FILECOPY = 1,
18 WEB_CLIENT_MODE_OPTIONS = 2,
19 WEB_CLIENT_MODE_STREAM = 3
22 typedef enum web_client_flags {
23 WEB_CLIENT_FLAG_DEAD = 1 << 1,
25 WEB_CLIENT_FLAG_KEEPALIVE = 1 << 2,
27 WEB_CLIENT_FLAG_WAIT_RECEIVE = 1 << 3,
28 WEB_CLIENT_FLAG_WAIT_SEND = 1 << 4,
30 WEB_CLIENT_FLAG_DO_NOT_TRACK = 1 << 5,
31 WEB_CLIENT_FLAG_TRACKING_REQUIRED = 1 << 6,
33 WEB_CLIENT_FLAG_TCP_CLIENT = 1 << 7,
34 WEB_CLIENT_FLAG_UNIX_CLIENT = 1 << 8,
36 WEB_CLIENT_FLAG_DONT_CLOSE_SOCKET = 1 << 9,
44 #define web_client_flag_check(w, flag) ((w)->flags & (flag)) 45 #define web_client_flag_set(w, flag) (w)->flags |= flag 46 #define web_client_flag_clear(w, flag) (w)->flags &= ~flag 49 #define WEB_CLIENT_IS_DEAD(w) web_client_flag_set(w, WEB_CLIENT_FLAG_DEAD) 50 #define web_client_check_dead(w) web_client_flag_check(w, WEB_CLIENT_FLAG_DEAD) 52 #define web_client_has_keepalive(w) web_client_flag_check(w, WEB_CLIENT_FLAG_KEEPALIVE) 53 #define web_client_enable_keepalive(w) web_client_flag_set(w, WEB_CLIENT_FLAG_KEEPALIVE) 54 #define web_client_disable_keepalive(w) web_client_flag_clear(w, WEB_CLIENT_FLAG_KEEPALIVE) 56 #define web_client_has_donottrack(w) web_client_flag_check(w, WEB_CLIENT_FLAG_DO_NOT_TRACK) 57 #define web_client_enable_donottrack(w) web_client_flag_set(w, WEB_CLIENT_FLAG_DO_NOT_TRACK) 58 #define web_client_disable_donottrack(w) web_client_flag_clear(w, WEB_CLIENT_FLAG_DO_NOT_TRACK) 60 #define web_client_has_tracking_required(w) web_client_flag_check(w, WEB_CLIENT_FLAG_TRACKING_REQUIRED) 61 #define web_client_enable_tracking_required(w) web_client_flag_set(w, WEB_CLIENT_FLAG_TRACKING_REQUIRED) 62 #define web_client_disable_tracking_required(w) web_client_flag_clear(w, WEB_CLIENT_FLAG_TRACKING_REQUIRED) 64 #define web_client_has_wait_receive(w) web_client_flag_check(w, WEB_CLIENT_FLAG_WAIT_RECEIVE) 65 #define web_client_enable_wait_receive(w) web_client_flag_set(w, WEB_CLIENT_FLAG_WAIT_RECEIVE) 66 #define web_client_disable_wait_receive(w) web_client_flag_clear(w, WEB_CLIENT_FLAG_WAIT_RECEIVE) 68 #define web_client_has_wait_send(w) web_client_flag_check(w, WEB_CLIENT_FLAG_WAIT_SEND) 69 #define web_client_enable_wait_send(w) web_client_flag_set(w, WEB_CLIENT_FLAG_WAIT_SEND) 70 #define web_client_disable_wait_send(w) web_client_flag_clear(w, WEB_CLIENT_FLAG_WAIT_SEND) 72 #define web_client_set_tcp(w) web_client_flag_set(w, WEB_CLIENT_FLAG_TCP_CLIENT) 73 #define web_client_set_unix(w) web_client_flag_set(w, WEB_CLIENT_FLAG_UNIX_CLIENT) 74 #define web_client_check_unix(w) web_client_flag_check(w, WEB_CLIENT_FLAG_UNIX_CLIENT) 75 #define web_client_check_tcp(w) web_client_flag_check(w, WEB_CLIENT_FLAG_TCP_CLIENT) 77 #define web_client_is_corkable(w) web_client_flag_check(w, WEB_CLIENT_FLAG_TCP_CLIENT) 79 #define NETDATA_WEB_REQUEST_URL_SIZE 8192 80 #define NETDATA_WEB_RESPONSE_ZLIB_CHUNK_SIZE 16384 81 #define NETDATA_WEB_RESPONSE_HEADER_SIZE 4096 82 #define NETDATA_WEB_REQUEST_COOKIE_SIZE 1024 83 #define NETDATA_WEB_REQUEST_ORIGIN_HEADER_SIZE 1024 84 #define NETDATA_WEB_RESPONSE_INITIAL_SIZE 16384 85 #define NETDATA_WEB_REQUEST_RECEIVE_SIZE 16384 86 #define NETDATA_WEB_REQUEST_MAX_SIZE 16384 99 #ifdef NETDATA_WITH_ZLIB 101 Bytef zbuffer[NETDATA_WEB_RESPONSE_ZLIB_CHUNK_SIZE];
104 unsigned int zinitialized:1;
109 typedef enum web_client_acl {
110 WEB_CLIENT_ACL_NONE = 0,
111 WEB_CLIENT_ACL_NOCHECK = 0,
112 WEB_CLIENT_ACL_DASHBOARD = 1 << 0,
113 WEB_CLIENT_ACL_REGISTRY = 1 << 1,
114 WEB_CLIENT_ACL_BADGE = 1 << 2
117 #define web_client_can_access_dashboard(w) ((w)->acl & WEB_CLIENT_ACL_DASHBOARD) 118 #define web_client_can_access_registry(w) ((w)->acl & WEB_CLIENT_ACL_REGISTRY) 119 #define web_client_can_access_badges(w) ((w)->acl & WEB_CLIENT_ACL_BADGE) 121 #define web_client_can_access_stream(w) \ 122 (!web_allow_streaming_from || simple_pattern_matches(web_allow_streaming_from, (w)->client_ip)) 124 #define web_client_can_access_netdataconf(w) \ 125 (!web_allow_netdataconf_from || simple_pattern_matches(web_allow_netdataconf_from, (w)->client_ip)) 128 unsigned long long id;
130 WEB_CLIENT_FLAGS flags;
131 WEB_CLIENT_MODE mode;
134 size_t header_parse_tries;
135 size_t header_parse_last_size;
142 char client_ip[NI_MAXHOST+1];
143 char client_port[NI_MAXSERV+1];
145 char decoded_url[NETDATA_WEB_REQUEST_URL_SIZE + 1];
146 char last_url[NETDATA_WEB_REQUEST_URL_SIZE+1];
148 struct timeval tv_in, tv_ready;
150 char cookie1[NETDATA_WEB_REQUEST_COOKIE_SIZE+1];
151 char cookie2[NETDATA_WEB_REQUEST_COOKIE_SIZE+1];
152 char origin[NETDATA_WEB_REQUEST_ORIGIN_HEADER_SIZE+1];
157 size_t stats_received_bytes;
158 size_t stats_sent_bytes;
165 netdata_thread_t thread;
166 volatile int running;
169 size_t pollinfo_slot;
170 size_t pollinfo_filecopy_slot;
173 extern uid_t web_files_uid(
void);
174 extern uid_t web_files_gid(
void);
176 extern int web_client_permission_denied(
struct web_client *w);
178 extern ssize_t web_client_send(
struct web_client *w);
179 extern ssize_t web_client_receive(
struct web_client *w);
180 extern ssize_t web_client_read_file(
struct web_client *w);
182 extern void web_client_process_request(
struct web_client *w);
183 extern void web_client_request_done(
struct web_client *w);
185 extern int web_client_api_request_v1_data_group(
char *name,
int def);
186 extern const char *group_method2string(
int group);
188 extern void buffer_data_options2string(
BUFFER *wb, uint32_t options);
190 extern int mysendfile(
struct web_client *w,
char *filename);
Definition: web_buffer.h:8
Definition: web_client.h:127
Definition: web_client.h:88