libwebsockets-test-server-v2.0 showing how to use mounts and plugins
[platform/upstream/libwebsockets.git] / test-server / test-server.h
1 /*
2  * libwebsockets-test-server - libwebsockets test implementation
3  *
4  * Copyright (C) 2010-2016 Andy Green <andy@warmcat.com>
5  *
6  * This file is made available under the Creative Commons CC0 1.0
7  * Universal Public Domain Dedication.
8  *
9  * The person who associated a work with this deed has dedicated
10  * the work to the public domain by waiving all of his or her rights
11  * to the work worldwide under copyright law, including all related
12  * and neighboring rights, to the extent allowed by law. You can copy,
13  * modify, distribute and perform the work, even for commercial purposes,
14  * all without asking permission.
15  *
16  * The test apps are intended to be adapted for use in your code, which
17  * may be proprietary.  So unlike the library itself, they are licensed
18  * Public Domain.
19  */
20
21 #if defined(_WIN32) && defined(EXTERNAL_POLL)
22 #define WINVER 0x0600
23 #define _WIN32_WINNT 0x0600
24 #define poll(fdArray, fds, timeout)  WSAPoll((LPWSAPOLLFD)(fdArray), (ULONG)(fds), (INT)(timeout))
25 #endif
26
27 #include "lws_config.h"
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <getopt.h>
32 #include <signal.h>
33 #include <string.h>
34 #include <sys/stat.h>
35 #include <fcntl.h>
36 #include <assert.h>
37
38 #include "../lib/libwebsockets.h"
39
40 #ifdef _WIN32
41 #include <io.h>
42 #include "gettimeofday.h"
43 #else
44 #include <syslog.h>
45 #include <sys/time.h>
46 #include <unistd.h>
47 #endif
48
49 extern int close_testing;
50 extern int max_poll_elements;
51
52 #ifdef EXTERNAL_POLL
53 extern struct lws_pollfd *pollfds;
54 extern int *fd_lookup;
55 extern int count_pollfds;
56 #endif
57 extern volatile int force_exit;
58 extern struct lws_context *context;
59 extern char *resource_path;
60 #if defined(LWS_OPENSSL_SUPPORT) && defined(LWS_HAVE_SSL_CTX_set1_param)
61 extern char crl_path[1024];
62 #endif
63
64 extern void test_server_lock(int care);
65 extern void test_server_unlock(int care);
66
67 #ifndef __func__
68 #define __func__ __FUNCTION__
69 #endif
70
71 struct per_session_data__http {
72         lws_filefd_type fd;
73         char post_string[256];
74 #ifdef LWS_WITH_CGI
75         struct lws_cgi_args args;
76 #endif
77 #if defined(LWS_WITH_CGI) || !defined(LWS_NO_CLIENT)
78         int reason_bf;
79 #endif
80         unsigned int client_finished:1;
81 };
82
83 /*
84  * one of these is auto-created for each connection and a pointer to the
85  * appropriate instance is passed to the callback in the user parameter
86  *
87  * for this example protocol we use it to individualize the count for each
88  * connection.
89  */
90
91 struct per_session_data__dumb_increment {
92         int number;
93 };
94
95 struct per_session_data__lws_mirror {
96         struct lws *wsi;
97         int ringbuffer_tail;
98 };
99
100 struct per_session_data__echogen {
101         size_t total;
102         size_t total_rx;
103         int fd;
104         int fragsize;
105         int wr;
106 };
107
108 struct per_session_data__lws_status {
109         struct per_session_data__lws_status *list;
110         struct timeval tv_established;
111         int last;
112         char ip[270];
113         char user_agent[512];
114         const char *pos;
115         int len;
116 };
117
118 extern int
119 callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user,
120               void *in, size_t len);
121 extern int
122 callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason,
123                     void *user, void *in, size_t len);
124 extern int
125 callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
126                         void *user, void *in, size_t len);
127 extern int
128 callback_lws_echogen(struct lws *wsi, enum lws_callback_reasons reason,
129                         void *user, void *in, size_t len);
130 extern int
131 callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason,
132                     void *user, void *in, size_t len);
133
134
135 extern void
136 dump_handshake_info(struct lws *wsi);