]> arthur.barton.de Git - netdata.git/blob - src/web_client.h
code cleanup and re-arrangements for better scalability
[netdata.git] / src / web_client.h
1
2 #ifdef NETDATA_WITH_ZLIB
3 #include <zlib.h>
4 #endif
5
6 #include <sys/time.h>
7 #include <string.h>
8 #include <sys/socket.h>
9 #include <netinet/in.h>
10 #include <arpa/inet.h>
11 #include <netdb.h>
12
13 #include "web_buffer.h"
14
15 #define DEFAULT_DISCONNECT_IDLE_WEB_CLIENTS_AFTER_SECONDS 60
16 extern int web_client_timeout;
17 extern int web_enable_gzip;
18
19 #ifndef NETDATA_WEB_CLIENT_H
20 #define NETDATA_WEB_CLIENT_H 1
21
22 #define WEB_CLIENT_MODE_NORMAL          0
23 #define WEB_CLIENT_MODE_FILECOPY        1
24
25 #define URL_MAX 8192
26 #define ZLIB_CHUNK      16384
27 #define HTTP_RESPONSE_HEADER_SIZE 4096
28
29 struct response {
30         BUFFER *header;                                 // our response header
31         BUFFER *header_output;                  // internal use
32         BUFFER *data;                                   // our response data buffer
33
34         long rlen;                                              // if non-zero, the excepted size of ifd (input)
35         long sent;                                              // current data length sent to output
36
37         int zoutput;                                    // if set to 1, web_client_send() will send compressed data
38 #ifdef NETDATA_WITH_ZLIB
39         z_stream zstream;                               // zlib stream for sending compressed output to client
40         Bytef zbuffer[ZLIB_CHUNK];              // temporary buffer for storing compressed output
41         long zsent;                                             // the compressed bytes we have sent to the client
42         long zhave;                                             // the compressed bytes that we have to send
43         int zinitialized;
44 #endif
45
46 };
47
48 struct web_client {
49         unsigned long long id;
50
51         char client_ip[NI_MAXHOST+1];
52         char client_port[NI_MAXSERV+1];
53
54         char last_url[URL_MAX+1];
55
56         struct timeval tv_in, tv_ready;
57
58         int mode;
59         int keepalive;
60
61         struct sockaddr_storage clientaddr;
62
63         pthread_t thread;                               // the thread servicing this client
64         int obsolete;                                   // if set to 1, the listener will remove this client
65
66         int ifd;
67         int ofd;
68
69         struct response response;
70
71         int wait_receive;
72         int wait_send;
73
74         struct web_client *prev;
75         struct web_client *next;
76 };
77
78 extern struct web_client *web_clients;
79
80 extern struct web_client *web_client_create(int listener);
81 extern struct web_client *web_client_free(struct web_client *w);
82
83 extern void *web_client_main(void *ptr);
84
85 #endif