summaryrefslogtreecommitdiffstats
path: root/src/web_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/web_client.h')
-rwxr-xr-xsrc/web_client.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/web_client.h b/src/web_client.h
new file mode 100755
index 000000000..14cd91bc6
--- /dev/null
+++ b/src/web_client.h
@@ -0,0 +1,90 @@
+
+#ifdef NETDATA_WITH_ZLIB
+#include <zlib.h>
+#endif
+
+#include <sys/time.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include "web_buffer.h"
+
+#define DEFAULT_DISCONNECT_IDLE_WEB_CLIENTS_AFTER_SECONDS 60
+extern int web_client_timeout;
+extern int web_enable_gzip;
+
+#ifndef NETDATA_WEB_CLIENT_H
+#define NETDATA_WEB_CLIENT_H 1
+
+#define WEB_CLIENT_MODE_NORMAL 0
+#define WEB_CLIENT_MODE_FILECOPY 1
+#define WEB_CLIENT_MODE_OPTIONS 2
+
+#define URL_MAX 8192
+#define ZLIB_CHUNK 16384
+#define HTTP_RESPONSE_HEADER_SIZE 4096
+
+struct response {
+ BUFFER *header; // our response header
+ BUFFER *header_output; // internal use
+ BUFFER *data; // our response data buffer
+
+ int code; // the HTTP response code
+
+ size_t rlen; // if non-zero, the excepted size of ifd (input)
+ size_t sent; // current data length sent to output
+
+ int zoutput; // if set to 1, web_client_send() will send compressed data
+#ifdef NETDATA_WITH_ZLIB
+ z_stream zstream; // zlib stream for sending compressed output to client
+ Bytef zbuffer[ZLIB_CHUNK]; // temporary buffer for storing compressed output
+ long zsent; // the compressed bytes we have sent to the client
+ long zhave; // the compressed bytes that we have to send
+ int zinitialized;
+#endif
+
+};
+
+struct web_client {
+ unsigned long long id;
+
+ char client_ip[NI_MAXHOST+1];
+ char client_port[NI_MAXSERV+1];
+
+ char last_url[URL_MAX+1];
+
+ struct timeval tv_in, tv_ready;
+
+ int mode;
+ int keepalive;
+
+ struct sockaddr_storage clientaddr;
+
+ pthread_t thread; // the thread servicing this client
+ int obsolete; // if set to 1, the listener will remove this client
+
+ int ifd;
+ int ofd;
+
+ struct response response;
+
+ int wait_receive;
+ int wait_send;
+
+ struct web_client *prev;
+ struct web_client *next;
+};
+
+extern struct web_client *web_clients;
+
+extern uid_t web_files_uid(void);
+
+extern struct web_client *web_client_create(int listener);
+extern struct web_client *web_client_free(struct web_client *w);
+
+extern void *web_client_main(void *ptr);
+
+#endif