Add testapps support for client certs and CRLs
[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 #ifdef LWS_WITH_CGI
74         struct lws_cgi_args args;
75 #endif
76 #if defined(LWS_WITH_CGI) || !defined(LWS_NO_CLIENT)
77         int reason_bf;
78 #endif
79         unsigned int client_finished:1;
80 };
81
82 /*
83  * one of these is auto-created for each connection and a pointer to the
84  * appropriate instance is passed to the callback in the user parameter
85  *
86  * for this example protocol we use it to individualize the count for each
87  * connection.
88  */
89
90 struct per_session_data__dumb_increment {
91         int number;
92 };
93
94 struct per_session_data__lws_mirror {
95         struct lws *wsi;
96         int ringbuffer_tail;
97 };
98
99 struct per_session_data__echogen {
100         size_t total;
101         size_t total_rx;
102         int fd;
103         int fragsize;
104         int wr;
105 };
106
107 struct per_session_data__lws_status {
108         struct per_session_data__lws_status *list;
109         struct timeval tv_established;
110         int last;
111         char ip[270];
112         char user_agent[512];
113         const char *pos;
114         int len;
115 };
116
117 extern int
118 callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user,
119               void *in, size_t len);
120 extern int
121 callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason,
122                     void *user, void *in, size_t len);
123 extern int
124 callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason,
125                         void *user, void *in, size_t len);
126 extern int
127 callback_lws_echogen(struct lws *wsi, enum lws_callback_reasons reason,
128                         void *user, void *in, size_t len);
129 extern int
130 callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason,
131                     void *user, void *in, size_t len);
132
133
134 extern void
135 dump_handshake_info(struct lws *wsi);