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