1 | /* |
2 | * libwebsockets - small server side websockets and web server implementation |
3 | * |
4 | * Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com> |
5 | * |
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
7 | * of this software and associated documentation files (the "Software"), to |
8 | * deal in the Software without restriction, including without limitation the |
9 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
10 | * sell copies of the Software, and to permit persons to whom the Software is |
11 | * furnished to do so, subject to the following conditions: |
12 | * |
13 | * The above copyright notice and this permission notice shall be included in |
14 | * all copies or substantial portions of the Software. |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
21 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
22 | * IN THE SOFTWARE. |
23 | */ |
24 | |
25 | /** @file */ |
26 | |
27 | #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C |
28 | #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C |
29 | |
30 | #ifdef __cplusplus |
31 | #include <cstddef> |
32 | #include <cstdarg> |
33 | |
34 | extern "C" { |
35 | #else |
36 | #include <stdarg.h> |
37 | #endif |
38 | |
39 | #include <string.h> |
40 | #include <stdlib.h> |
41 | |
42 | #include "lws_config.h" |
43 | |
44 | /* place for one-shot opaque forward references */ |
45 | |
46 | typedef struct lws_context * lws_ctx_t; |
47 | struct lws_sequencer; |
48 | struct lws_dsh; |
49 | |
50 | /* |
51 | * CARE: everything using cmake defines needs to be below here |
52 | */ |
53 | |
54 | #define LWS_US_PER_SEC ((lws_usec_t)1000000) |
55 | #define LWS_MS_PER_SEC ((lws_usec_t)1000) |
56 | #define LWS_US_PER_MS ((lws_usec_t)1000) |
57 | #define LWS_NS_PER_US ((lws_usec_t)1000) |
58 | |
59 | #define LWS_KI (1024) |
60 | #define LWS_MI (LWS_KI * 1024) |
61 | #define LWS_GI (LWS_MI * 1024) |
62 | #define LWS_TI ((uint64_t)LWS_GI * 1024) |
63 | #define LWS_PI ((uint64_t)LWS_TI * 1024) |
64 | |
65 | #define LWS_US_TO_MS(x) ((x + (LWS_US_PER_MS / 2)) / LWS_US_PER_MS) |
66 | |
67 | #if defined(LWS_HAS_INTPTR_T) |
68 | #include <stdint.h> |
69 | #define lws_intptr_t intptr_t |
70 | #else |
71 | typedef unsigned long long lws_intptr_t; |
72 | #endif |
73 | |
74 | #if defined(WIN32) || defined(_WIN32) |
75 | #ifndef WIN32_LEAN_AND_MEAN |
76 | #define WIN32_LEAN_AND_MEAN |
77 | #endif |
78 | |
79 | #include <winsock2.h> |
80 | #include <ws2tcpip.h> |
81 | #include <stddef.h> |
82 | #include <basetsd.h> |
83 | #include <io.h> |
84 | #ifndef _WIN32_WCE |
85 | #include <fcntl.h> |
86 | #else |
87 | #define _O_RDONLY 0x0000 |
88 | #define O_RDONLY _O_RDONLY |
89 | #endif |
90 | |
91 | typedef int uid_t; |
92 | typedef int gid_t; |
93 | typedef unsigned short sa_family_t; |
94 | #if !defined(LWS_HAVE_SUSECONDS_T) |
95 | typedef unsigned int useconds_t; |
96 | typedef int suseconds_t; |
97 | #endif |
98 | |
99 | #define LWS_INLINE __inline |
100 | #define LWS_VISIBLE |
101 | #define LWS_WARN_UNUSED_RESULT |
102 | #define LWS_WARN_DEPRECATED |
103 | #define LWS_FORMAT(string_index) |
104 | |
105 | #if !defined(LWS_EXTERN) && defined(LWS_BUILDING_SHARED) |
106 | #ifdef LWS_DLL |
107 | #ifdef LWS_INTERNAL |
108 | #define LWS_EXTERN extern __declspec(dllexport) |
109 | #else |
110 | #define LWS_EXTERN extern __declspec(dllimport) |
111 | #endif |
112 | #endif |
113 | #endif |
114 | |
115 | #if !defined(LWS_INTERNAL) && !defined(LWS_EXTERN) |
116 | #define LWS_EXTERN |
117 | #define LWS_VISIBLE |
118 | #endif |
119 | |
120 | #if !defined(LWS_EXTERN) |
121 | #define LWS_EXTERN |
122 | #endif |
123 | |
124 | #if defined(__MINGW32__) |
125 | #define LWS_INVALID_FILE -1 |
126 | #else |
127 | #define LWS_INVALID_FILE INVALID_HANDLE_VALUE |
128 | #endif |
129 | #define LWS_SOCK_INVALID (INVALID_SOCKET) |
130 | #define LWS_O_RDONLY _O_RDONLY |
131 | #define LWS_O_WRONLY _O_WRONLY |
132 | #define LWS_O_CREAT _O_CREAT |
133 | #define LWS_O_TRUNC _O_TRUNC |
134 | |
135 | #ifndef __func__ |
136 | #define __func__ __FUNCTION__ |
137 | #endif |
138 | |
139 | #else /* NOT WIN32 */ |
140 | #include <unistd.h> |
141 | #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) |
142 | #include <sys/capability.h> |
143 | #endif |
144 | |
145 | #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__QNX__) || defined(__OpenBSD__) |
146 | #include <sys/socket.h> |
147 | #include <netinet/in.h> |
148 | #endif |
149 | |
150 | #define LWS_INLINE inline |
151 | #define LWS_O_RDONLY O_RDONLY |
152 | #define LWS_O_WRONLY O_WRONLY |
153 | #define LWS_O_CREAT O_CREAT |
154 | #define LWS_O_TRUNC O_TRUNC |
155 | |
156 | #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_TA) && !defined(LWS_PLAT_FREERTOS) |
157 | #include <poll.h> |
158 | #include <netdb.h> |
159 | #define LWS_INVALID_FILE -1 |
160 | #define LWS_SOCK_INVALID (-1) |
161 | #else |
162 | #define getdtablesize() (30) |
163 | #if defined(LWS_PLAT_FREERTOS) |
164 | #define LWS_INVALID_FILE NULL |
165 | #define LWS_SOCK_INVALID (-1) |
166 | #else |
167 | #define LWS_INVALID_FILE NULL |
168 | #define LWS_SOCK_INVALID (-1) |
169 | #endif |
170 | #endif |
171 | |
172 | #if defined(__FreeBSD__) |
173 | #include <sys/signal.h> |
174 | #endif |
175 | #if defined(__GNUC__) |
176 | |
177 | /* warn_unused_result attribute only supported by GCC 3.4 or later */ |
178 | #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) |
179 | #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) |
180 | #else |
181 | #define LWS_WARN_UNUSED_RESULT |
182 | #endif |
183 | |
184 | #if defined(LWS_BUILDING_SHARED) |
185 | /* this is only set when we're building lws itself shared */ |
186 | #define LWS_VISIBLE __attribute__((visibility("default"))) |
187 | #define LWS_EXTERN extern |
188 | |
189 | #else /* not shared */ |
190 | #if defined(WIN32) || defined(_WIN32) || defined(__MINGW32__) |
191 | #define LWS_VISIBLE |
192 | #define LWS_EXTERN extern |
193 | #else |
194 | /* |
195 | * If we explicitly say hidden here, symbols exist as T but |
196 | * cannot be imported at link-time. |
197 | */ |
198 | #define LWS_VISIBLE |
199 | #define LWS_EXTERN |
200 | #endif |
201 | |
202 | #endif /* not shared */ |
203 | |
204 | #define LWS_WARN_DEPRECATED __attribute__ ((deprecated)) |
205 | #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1))) |
206 | #else /* not GNUC */ |
207 | |
208 | #define LWS_VISIBLE |
209 | #define LWS_WARN_UNUSED_RESULT |
210 | #define LWS_WARN_DEPRECATED |
211 | #define LWS_FORMAT(string_index) |
212 | #if !defined(LWS_EXTERN) |
213 | #define LWS_EXTERN extern |
214 | #endif |
215 | #endif |
216 | |
217 | |
218 | #if defined(__ANDROID__) |
219 | #include <netinet/in.h> |
220 | #include <unistd.h> |
221 | #endif |
222 | #endif |
223 | |
224 | #ifdef _WIN32 |
225 | #define random rand |
226 | #else |
227 | #if !defined(LWS_PLAT_OPTEE) |
228 | #include <sys/time.h> |
229 | #include <unistd.h> |
230 | #endif |
231 | #endif |
232 | |
233 | #if defined(LWS_WITH_LIBUV_INTERNAL) |
234 | #include <uv.h> |
235 | |
236 | #ifdef LWS_HAVE_UV_VERSION_H |
237 | #include <uv-version.h> |
238 | #endif |
239 | |
240 | #ifdef LWS_HAVE_NEW_UV_VERSION_H |
241 | #include <uv/version.h> |
242 | #endif |
243 | #endif |
244 | |
245 | #if defined(LWS_WITH_TLS) |
246 | |
247 | #ifdef USE_WOLFSSL |
248 | #ifdef USE_OLD_CYASSL |
249 | #ifdef _WIN32 |
250 | /* |
251 | * Include user-controlled settings for windows from |
252 | * <wolfssl-root>/IDE/WIN/user_settings.h |
253 | */ |
254 | #include <IDE/WIN/user_settings.h> |
255 | #include <cyassl/ctaocrypt/settings.h> |
256 | #else |
257 | #include <cyassl/options.h> |
258 | #endif |
259 | #include <cyassl/openssl/ssl.h> |
260 | #include <cyassl/error-ssl.h> |
261 | |
262 | #else |
263 | #ifdef _WIN32 |
264 | /* |
265 | * Include user-controlled settings for windows from |
266 | * <wolfssl-root>/IDE/WIN/user_settings.h |
267 | */ |
268 | #include <IDE/WIN/user_settings.h> |
269 | #include <wolfssl/wolfcrypt/settings.h> |
270 | #else |
271 | #include <wolfssl/options.h> |
272 | #endif |
273 | #include <wolfssl/openssl/ssl.h> |
274 | #include <wolfssl/error-ssl.h> |
275 | #endif /* not USE_OLD_CYASSL */ |
276 | #else |
277 | #if defined(LWS_WITH_MBEDTLS) |
278 | #if defined(LWS_PLAT_FREERTOS) |
279 | /* this filepath is passed to us but without quotes or <> */ |
280 | #if !defined(LWS_AMAZON_RTOS) |
281 | /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ |
282 | #undef MBEDTLS_CONFIG_FILE |
283 | #define MBEDTLS_CONFIG_FILE <mbedtls/esp_config.h> |
284 | #endif |
285 | #endif |
286 | #if defined(LWS_WITH_TLS) |
287 | #include <mbedtls/ssl.h> |
288 | #include <mbedtls/entropy.h> |
289 | #include <mbedtls/ctr_drbg.h> |
290 | #include <mbedtls/version.h> |
291 | |
292 | #if !defined(MBEDTLS_PRIVATE) |
293 | #define MBEDTLS_PRIVATE(_q) _q |
294 | #endif |
295 | |
296 | #if (MBEDTLS_VERSION_MAJOR == 3) && (MBEDTLS_VERSION_MINOR == 0) |
297 | #define MBEDTLS_PRIVATE_V30_ONLY(_q) MBEDTLS_PRIVATE(_q) |
298 | #else |
299 | #define MBEDTLS_PRIVATE_V30_ONLY(_q) _q |
300 | #endif |
301 | |
302 | #endif |
303 | #else |
304 | #include <openssl/ssl.h> |
305 | #if !defined(LWS_WITH_MBEDTLS) |
306 | #include <openssl/err.h> |
307 | #endif |
308 | #endif |
309 | #endif /* not USE_WOLFSSL */ |
310 | #endif |
311 | |
312 | /* |
313 | * Helpers for pthread mutex in user code... if lws is built for |
314 | * multiple service threads, these resolve to pthread mutex |
315 | * operations. In the case LWS_MAX_SMP is 1 (the default), they |
316 | * are all NOPs and no pthread type or api is referenced. |
317 | */ |
318 | |
319 | #if LWS_MAX_SMP > 1 |
320 | |
321 | #include <pthread.h> |
322 | |
323 | #define lws_pthread_mutex(name) pthread_mutex_t name; |
324 | |
325 | static LWS_INLINE void |
326 | lws_pthread_mutex_init(pthread_mutex_t *lock) |
327 | { |
328 | pthread_mutex_init(lock, NULL); |
329 | } |
330 | |
331 | static LWS_INLINE void |
332 | lws_pthread_mutex_destroy(pthread_mutex_t *lock) |
333 | { |
334 | pthread_mutex_destroy(lock); |
335 | } |
336 | |
337 | static LWS_INLINE void |
338 | lws_pthread_mutex_lock(pthread_mutex_t *lock) |
339 | { |
340 | pthread_mutex_lock(lock); |
341 | } |
342 | |
343 | static LWS_INLINE void |
344 | lws_pthread_mutex_unlock(pthread_mutex_t *lock) |
345 | { |
346 | pthread_mutex_unlock(lock); |
347 | } |
348 | |
349 | #else |
350 | #define lws_pthread_mutex(name) |
351 | #define lws_pthread_mutex_init(_a) |
352 | #define lws_pthread_mutex_destroy(_a) |
353 | #define lws_pthread_mutex_lock(_a) |
354 | #define lws_pthread_mutex_unlock(_a) |
355 | #endif |
356 | |
357 | |
358 | #define CONTEXT_PORT_NO_LISTEN -1 |
359 | #define CONTEXT_PORT_NO_LISTEN_SERVER -2 |
360 | |
361 | #include <libwebsockets/lws-logs.h> |
362 | |
363 | |
364 | #include <stddef.h> |
365 | |
366 | #ifndef lws_container_of |
367 | #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) |
368 | #endif |
369 | #define LWS_ALIGN_TO(x, bou) x += ((bou) - ((x) % (bou))) % (bou) |
370 | |
371 | struct lws; |
372 | |
373 | /* api change list for user code to test against */ |
374 | |
375 | #define |
376 | |
377 | /* the struct lws_protocols has the id field present */ |
378 | #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD |
379 | |
380 | /* you can call lws_get_peer_write_allowance */ |
381 | #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE |
382 | |
383 | /* extra parameter introduced in 917f43ab821 */ |
384 | #define |
385 | |
386 | /* File operations stuff exists */ |
387 | #define LWS_FEATURE_FOPS |
388 | |
389 | |
390 | #if defined(_WIN32) |
391 | #if !defined(LWS_WIN32_HANDLE_TYPES) |
392 | typedef SOCKET lws_sockfd_type; |
393 | #if defined(__MINGW32__) |
394 | typedef int lws_filefd_type; |
395 | #else |
396 | typedef HANDLE lws_filefd_type; |
397 | #endif |
398 | #endif |
399 | |
400 | |
401 | #define lws_pollfd pollfd |
402 | #define LWS_POLLHUP (POLLHUP) |
403 | #define LWS_POLLIN (POLLRDNORM | POLLRDBAND) |
404 | #define LWS_POLLOUT (POLLWRNORM) |
405 | |
406 | #else |
407 | |
408 | |
409 | #if defined(LWS_PLAT_FREERTOS) |
410 | #include <libwebsockets/lws-freertos.h> |
411 | #else |
412 | typedef int lws_sockfd_type; |
413 | typedef int lws_filefd_type; |
414 | #endif |
415 | |
416 | #if defined(LWS_PLAT_OPTEE) |
417 | #include <time.h> |
418 | struct timeval { |
419 | time_t tv_sec; |
420 | unsigned int tv_usec; |
421 | }; |
422 | #if defined(LWS_WITH_NETWORK) |
423 | // #include <poll.h> |
424 | #define lws_pollfd pollfd |
425 | |
426 | struct timezone; |
427 | |
428 | int gettimeofday(struct timeval *tv, struct timezone *tz); |
429 | |
430 | /* Internet address. */ |
431 | struct in_addr { |
432 | uint32_t s_addr; /* address in network byte order */ |
433 | }; |
434 | |
435 | typedef unsigned short sa_family_t; |
436 | typedef unsigned short in_port_t; |
437 | typedef uint32_t socklen_t; |
438 | |
439 | #include <libwebsockets/lws-optee.h> |
440 | |
441 | #if !defined(TEE_SE_READER_NAME_MAX) |
442 | struct addrinfo { |
443 | int ai_flags; |
444 | int ai_family; |
445 | int ai_socktype; |
446 | int ai_protocol; |
447 | socklen_t ai_addrlen; |
448 | struct sockaddr *ai_addr; |
449 | char *ai_canonname; |
450 | struct addrinfo *ai_next; |
451 | }; |
452 | #endif |
453 | |
454 | ssize_t recv(int sockfd, void *buf, size_t len, int flags); |
455 | ssize_t send(int sockfd, const void *buf, size_t len, int flags); |
456 | ssize_t read(int fd, void *buf, size_t count); |
457 | int getsockopt(int sockfd, int level, int optname, |
458 | void *optval, socklen_t *optlen); |
459 | int setsockopt(int sockfd, int level, int optname, |
460 | const void *optval, socklen_t optlen); |
461 | int connect(int sockfd, const struct sockaddr *addr, |
462 | socklen_t addrlen); |
463 | |
464 | extern int errno; |
465 | |
466 | uint16_t ntohs(uint16_t netshort); |
467 | uint16_t htons(uint16_t hostshort); |
468 | |
469 | int bind(int sockfd, const struct sockaddr *addr, |
470 | socklen_t addrlen); |
471 | |
472 | |
473 | #define MSG_NOSIGNAL 0x4000 |
474 | #define EAGAIN 11 |
475 | #define EINTR 4 |
476 | #define EWOULDBLOCK EAGAIN |
477 | #define EADDRINUSE 98 |
478 | #define INADDR_ANY 0 |
479 | #define AF_INET 2 |
480 | #define SHUT_WR 1 |
481 | #define AF_UNSPEC 0 |
482 | #define PF_UNSPEC 0 |
483 | #define SOCK_STREAM 1 |
484 | #define SOCK_DGRAM 2 |
485 | # define AI_PASSIVE 0x0001 |
486 | #define IPPROTO_UDP 17 |
487 | #define SOL_SOCKET 1 |
488 | #define SO_SNDBUF 7 |
489 | #define EISCONN 106 |
490 | #define EALREADY 114 |
491 | #define EINPROGRESS 115 |
492 | int shutdown(int sockfd, int how); |
493 | int close(int fd); |
494 | int atoi(const char *nptr); |
495 | long long atoll(const char *nptr); |
496 | |
497 | int socket(int domain, int type, int protocol); |
498 | int getaddrinfo(const char *node, const char *service, |
499 | const struct addrinfo *hints, |
500 | struct addrinfo **res); |
501 | |
502 | void freeaddrinfo(struct addrinfo *res); |
503 | |
504 | #if !defined(TEE_SE_READER_NAME_MAX) |
505 | struct lws_pollfd |
506 | { |
507 | int fd; /* File descriptor to poll. */ |
508 | short int events; /* Types of events poller cares about. */ |
509 | short int revents; /* Types of events that actually occurred. */ |
510 | }; |
511 | #endif |
512 | |
513 | int poll(struct pollfd *fds, int nfds, int timeout); |
514 | |
515 | #define LWS_POLLHUP (0x18) |
516 | #define LWS_POLLIN (1) |
517 | #define LWS_POLLOUT (4) |
518 | #else |
519 | struct lws_pollfd; |
520 | struct sockaddr_in; |
521 | #endif |
522 | #else |
523 | #define lws_pollfd pollfd |
524 | #define LWS_POLLHUP (POLLHUP | POLLERR) |
525 | #define LWS_POLLIN (POLLIN) |
526 | #define LWS_POLLOUT (POLLOUT) |
527 | #endif |
528 | #endif |
529 | |
530 | |
531 | #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) |
532 | /* ... */ |
533 | #define ssize_t SSIZE_T |
534 | #endif |
535 | |
536 | #if defined(WIN32) && defined(LWS_HAVE__STAT32I64) |
537 | #include <sys/types.h> |
538 | #include <sys/stat.h> |
539 | #endif |
540 | |
541 | #if defined(LWS_HAVE_STDINT_H) |
542 | #include <stdint.h> |
543 | #else |
544 | #if defined(WIN32) || defined(_WIN32) |
545 | /* !!! >:-[ */ |
546 | typedef __int64 int64_t; |
547 | typedef unsigned __int64 uint64_t; |
548 | typedef __int32 int32_t; |
549 | typedef unsigned __int32 uint32_t; |
550 | typedef __int16 int16_t; |
551 | typedef unsigned __int16 uint16_t; |
552 | typedef unsigned __int8 uint8_t; |
553 | #else |
554 | typedef unsigned int uint32_t; |
555 | typedef unsigned short uint16_t; |
556 | typedef unsigned char uint8_t; |
557 | #endif |
558 | #endif |
559 | |
560 | typedef int64_t lws_usec_t; |
561 | typedef unsigned long long lws_filepos_t; |
562 | typedef long long lws_fileofs_t; |
563 | typedef uint32_t lws_fop_flags_t; |
564 | |
565 | #define lws_concat_temp(_t, _l) (_t + sizeof(_t) - _l) |
566 | #define lws_concat_used(_t, _l) (sizeof(_t) - _l) |
567 | |
568 | /** struct lws_pollargs - argument structure for all external poll related calls |
569 | * passed in via 'in' */ |
570 | struct lws_pollargs { |
571 | lws_sockfd_type fd; /**< applicable socket descriptor */ |
572 | int events; /**< the new event mask */ |
573 | int prev_events; /**< the previous event mask */ |
574 | }; |
575 | |
576 | struct lws_extension; /* needed even with ws exts disabled for create context */ |
577 | struct lws_token_limits; |
578 | struct lws_protocols; |
579 | struct lws_context; |
580 | struct lws_tokens; |
581 | struct lws_vhost; |
582 | struct lws; |
583 | |
584 | #include <libwebsockets/lws-dll2.h> |
585 | #include <libwebsockets/lws-map.h> |
586 | |
587 | #include <libwebsockets/lws-fault-injection.h> |
588 | #include <libwebsockets/lws-timeout-timer.h> |
589 | #include <libwebsockets/lws-cache-ttl.h> |
590 | #if defined(LWS_WITH_SYS_SMD) |
591 | #include <libwebsockets/lws-smd.h> |
592 | #endif |
593 | #include <libwebsockets/lws-state.h> |
594 | #include <libwebsockets/lws-retry.h> |
595 | #include <libwebsockets/lws-adopt.h> |
596 | #include <libwebsockets/lws-network-helper.h> |
597 | #include <libwebsockets/lws-metrics.h> |
598 | #include <libwebsockets/lws-system.h> |
599 | #include <libwebsockets/lws-ws-close.h> |
600 | #include <libwebsockets/lws-callbacks.h> |
601 | #include <libwebsockets/lws-ws-state.h> |
602 | #include <libwebsockets/lws-ws-ext.h> |
603 | #include <libwebsockets/lws-protocols-plugins.h> |
604 | |
605 | #include <libwebsockets/lws-context-vhost.h> |
606 | |
607 | #if defined(LWS_WITH_CONMON) |
608 | #include <libwebsockets/lws-conmon.h> |
609 | #endif |
610 | |
611 | #if defined(LWS_ROLE_MQTT) |
612 | #include <libwebsockets/lws-mqtt.h> |
613 | #endif |
614 | #include <libwebsockets/lws-client.h> |
615 | #include <libwebsockets/lws-http.h> |
616 | #include <libwebsockets/lws-spa.h> |
617 | #include <libwebsockets/lws-purify.h> |
618 | #include <libwebsockets/lws-misc.h> |
619 | #include <libwebsockets/lws-dsh.h> |
620 | #include <libwebsockets/lws-service.h> |
621 | #include <libwebsockets/lws-write.h> |
622 | #include <libwebsockets/lws-writeable.h> |
623 | #include <libwebsockets/lws-ring.h> |
624 | #include <libwebsockets/lws-sha1-base64.h> |
625 | #include <libwebsockets/lws-x509.h> |
626 | #include <libwebsockets/lws-cgi.h> |
627 | #if defined(LWS_WITH_FILE_OPS) |
628 | #include <libwebsockets/lws-vfs.h> |
629 | #endif |
630 | #include <libwebsockets/lws-gencrypto.h> |
631 | |
632 | #include <libwebsockets/lws-lejp.h> |
633 | #include <libwebsockets/lws-lecp.h> |
634 | #include <libwebsockets/lws-cose.h> |
635 | #include <libwebsockets/lws-struct.h> |
636 | #include <libwebsockets/lws-threadpool.h> |
637 | #include <libwebsockets/lws-tokenize.h> |
638 | #include <libwebsockets/lws-lwsac.h> |
639 | #include <libwebsockets/lws-fts.h> |
640 | #include <libwebsockets/lws-diskcache.h> |
641 | #include <libwebsockets/lws-sequencer.h> |
642 | #include <libwebsockets/lws-secure-streams.h> |
643 | #include <libwebsockets/lws-secure-streams-policy.h> |
644 | #include <libwebsockets/lws-secure-streams-client.h> |
645 | |
646 | #if !defined(LWS_PLAT_FREERTOS) |
647 | #include <libwebsockets/abstract/abstract.h> |
648 | |
649 | #include <libwebsockets/lws-test-sequencer.h> |
650 | #endif |
651 | #include <libwebsockets/lws-async-dns.h> |
652 | |
653 | #if defined(LWS_WITH_TLS) |
654 | |
655 | #include <libwebsockets/lws-tls-sessions.h> |
656 | |
657 | #if defined(LWS_WITH_MBEDTLS) |
658 | #include <mbedtls/md5.h> |
659 | #include <mbedtls/sha1.h> |
660 | #include <mbedtls/sha256.h> |
661 | #include <mbedtls/sha512.h> |
662 | #endif |
663 | |
664 | #include <libwebsockets/lws-genhash.h> |
665 | #include <libwebsockets/lws-genrsa.h> |
666 | #include <libwebsockets/lws-genaes.h> |
667 | #include <libwebsockets/lws-genec.h> |
668 | |
669 | #include <libwebsockets/lws-jwk.h> |
670 | #include <libwebsockets/lws-jose.h> |
671 | #include <libwebsockets/lws-jws.h> |
672 | #include <libwebsockets/lws-jwe.h> |
673 | |
674 | #endif |
675 | |
676 | #include <libwebsockets/lws-eventlib-exports.h> |
677 | #include <libwebsockets/lws-i2c.h> |
678 | #include <libwebsockets/lws-spi.h> |
679 | #include <libwebsockets/lws-gpio.h> |
680 | #include <libwebsockets/lws-bb-i2c.h> |
681 | #include <libwebsockets/lws-bb-spi.h> |
682 | #include <libwebsockets/lws-button.h> |
683 | #include <libwebsockets/lws-led.h> |
684 | #include <libwebsockets/lws-pwm.h> |
685 | #include <libwebsockets/lws-display.h> |
686 | #include <libwebsockets/lws-ssd1306-i2c.h> |
687 | #include <libwebsockets/lws-ili9341-spi.h> |
688 | #include <libwebsockets/lws-settings.h> |
689 | #include <libwebsockets/lws-netdev.h> |
690 | |
691 | #ifdef __cplusplus |
692 | } |
693 | #endif |
694 | |
695 | #endif |
696 | |