1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef HTTPLISTENER_H
30 #define HTTPLISTENER_H
31
32 #include "sessionhandler.h"
33 #include "threadpools.h"
34 #include "config.h"
35 #include "../util/systems.h"
36
37 #include <openssl/bio.h>
38 #include <openssl/ssl.h>
39 #include <openssl/err.h>
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45
46 typedef struct _acceptor Acceptor;
47 typedef struct _listener_config ListenerConfig;
48 typedef struct _http_ssl HttpSSL;
49
50
51
52
53 union vs {
54 VirtualServer *vs;
55 char *vs_name;
56 };
57 struct _listener_config {
58 ServerConfiguration *cfg;
59 sstr_t name;
60 sstr_t vs;
61 sstr_t threadpool;
62 char *address;
63 int port;
64 int nacceptors;
65 WSBool blockingio;
66 WSBool ssl;
67 sstr_t certfile;
68 sstr_t privkeyfile;
69 sstr_t chainfile;
70 sstr_t disable_proto;
71 };
72
73 struct _acceptor {
74 pthread_t tid;
75 HttpListener *listener;
76 };
77
78 struct _http_listener {
79 ServerConfiguration *cfg;
80 sstr_t name;
81 union vs default_vs;
82 int port;
83 int server_socket;
84 SessionHandler *session_handler;
85 threadpool_t *threadpool;
86 HttpListener *next;
87 Acceptor **acceptors;
88 int nacceptors;
89 int running;
90 HttpSSL *ssl;
91 uint32_t ref;
92 };
93
94 struct _http_ssl {
95 unsigned char *cert;
96 size_t certlen;
97 unsigned char *privkey;
98 size_t privkeylen;
99 unsigned char *chain;
100 size_t chainlen;
101
102 SSL_CTX *sslctx;
103
104
105 };
106
107 int start_all_listener();
108
109 HttpListener* http_listener_create(ListenerConfig *conf);
110
111
112 HttpListener* http_listener_new(ListenerConfig *conf);
113
114 int http_listener_start(HttpListener *listener);
115
116 void http_listener_ref(HttpListener *listener);
117 void http_listener_unref(HttpListener *listener);
118
119 Acceptor* acceptor_new(HttpListener *listener);
120
121 void acceptor_start(Acceptor *a);
122
123 void* acceptor_thread(Acceptor *a);
124
125
126 #ifdef __cplusplus
127 }
128 #endif
129
130 #endif
131
132