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