diff --git a/CMakeLists.txt b/CMakeLists.txt index 993c96b2c..c42fccc77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,6 +75,8 @@ option(LWS_STATIC_PIC "Build the static version of the library with position-ind option(LWS_WITH_ESP32 "Build for ESP32" OFF) option(LWS_WITH_ESP32_HELPER "Build ESP32 helper" OFF) option(LWS_PLAT_OPTEE "Build for OPTEE" OFF) +option(LWS_PLAT_FREERTOS "Build for FreeRTOS" OFF) + # # Client / Server / Test Apps build control # @@ -151,7 +153,11 @@ else() set(LWS_WITH_ESP32_HELPER OFF) endif() -if (WIN32 OR LWS_WITH_ESP32) +if (LWS_WITH_ESP32) + set(LWS_PLAT_FREERTOS 1) +endif() + +if (WIN32 OR LWS_PLAT_FREERTOS) message(STATUS "No LWS_WITH_DIR and LWS_WITH_DIR") set(LWS_WITH_DIR OFF) set(LWS_WITH_LEJP_CONF OFF) @@ -243,11 +249,11 @@ endif() # microsoft... that's why you can't have nice things -if (WIN32 OR LWS_WITH_ESP32) +if (WIN32 OR LWS_PLAT_FREERTOS) set(LWS_UNIX_SOCK 0) endif() -if (LWS_WITH_ESP32) +if (LWS_PLAT_FREERTOS) set(LWS_WITH_LWSAC 0) set(LWS_WITH_FTS 0) endif() @@ -345,10 +351,10 @@ if (LWS_WITH_MBEDTLS) include_directories(lib/tls/mbedtls/wrapper/include) endif() -include_directories(include plugins lib/core lib/core-net lib/event-libs include/abstract lib/tls lib/roles lib/event-libs/libuv lib/event-libs/poll lib/event-libs/libevent lib/event-libs/libev lib/jose/jwe lib/jose/jws lib/jose lib/misc lib/roles/http lib/roles/http/compression lib/roles/h1 lib/roles/h2 lib/roles/ws lib/roles/cgi lib/roles/dbus lib/roles/raw-proxy) +include_directories(include plugins lib/core lib/core-net lib/event-libs include/abstract lib/tls lib/roles lib/event-libs/libuv lib/event-libs/poll lib/event-libs/libevent lib/event-libs/libev lib/jose/jwe lib/jose/jws lib/jose lib/misc lib/roles/http lib/roles/http/compression lib/roles/h1 lib/roles/h2 lib/roles/ws lib/roles/cgi lib/roles/dbus lib/roles/raw-proxy lib/abstract) -if (LWS_WITH_ESP32) - include_directories(lib/plat/esp32) +if (LWS_PLAT_FREERTOS) + include_directories(lib/plat/freertos lib/plat/freertos/esp32) else() if (WIN32) include_directories(lib/plat/windows) @@ -411,7 +417,7 @@ if (LWS_WITH_GENERIC_SESSIONS) set(LWS_WITH_STRUCT_SQLITE3 1) endif() -if (LWS_WITH_ESP32) +if (LWS_PLAT_FREERTOS) set(LWS_WITH_SHARED OFF) set(LWS_WITH_MBEDTLS ON) # set(LWS_WITHOUT_CLIENT ON) @@ -536,7 +542,7 @@ endif() if (LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL AND NOT LWS_WITH_MBEDTLS) if ("${LWS_OPENSSL_LIBRARIES}" STREQUAL "" OR "${LWS_OPENSSL_INCLUDE_DIRS}" STREQUAL "") else() - if (NOT LWS_WITH_ESP32) + if (NOT LWS_PLAT_FREERTOS) set(OPENSSL_LIBRARIES ${LWS_OPENSSL_LIBRARIES}) endif() set(OPENSSL_INCLUDE_DIRS ${LWS_OPENSSL_INCLUDE_DIRS}) @@ -566,7 +572,7 @@ if (LWS_WITH_SSL AND LWS_WITH_WOLFSSL) endif() if (LWS_WITH_SSL AND LWS_WITH_MBEDTLS) - if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "" AND NOT LWS_WITH_ESP32) + if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "" AND NOT LWS_PLAT_FREERTOS) find_path(LWS_MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h) @@ -1053,7 +1059,7 @@ endif() if (LWS_ROLE_H1 OR LWS_ROLE_H2) list(APPEND SOURCES lib/roles/http/header.c - lib/roles/http/server/parsers.c) + lib/roles/http/parsers.c) if (LWS_WITH_HTTP_STREAM_COMPRESSION) list(APPEND SOURCES lib/roles/http/compression/stream.c @@ -1319,29 +1325,31 @@ else() ) endif() else() - if (LWS_WITH_ESP32) + if (LWS_PLAT_FREERTOS) list(APPEND SOURCES - lib/plat/esp32/esp32-fds.c - lib/plat/esp32/esp32-init.c - lib/plat/esp32/esp32-misc.c - lib/plat/esp32/esp32-pipe.c - lib/plat/esp32/esp32-service.c - lib/plat/esp32/esp32-sockets.c + lib/plat/freertos/freertos-fds.c + lib/plat/freertos/freertos-init.c + lib/plat/freertos/freertos-misc.c + lib/plat/freertos/freertos-pipe.c + lib/plat/freertos/freertos-service.c + lib/plat/freertos/freertos-sockets.c lib/misc/romfs.c) if (LWS_WITH_ESP32_HELPER) - list(APPEND SOURCES lib/plat/esp32/esp32-helpers.c) + list(APPEND SOURCES lib/plat/freertos/esp32/esp32-helpers.c) endif() if (LWS_WITH_FILE_OPS) - list(APPEND SOURCES lib/plat/esp32/esp32-file.c) + list(APPEND SOURCES lib/plat/freertos/freertos-file.c) endif() else() set(LWS_PLAT_UNIX 1) list(APPEND SOURCES lib/plat/unix/unix-caps.c - lib/plat/unix/unix-file.c lib/plat/unix/unix-misc.c lib/plat/unix/unix-init.c ) + if (LWS_WITH_FILE_OPS) + list(APPEND SOURCES lib/plat/unix/unix-file.c) + endif() if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/plat/unix/unix-pipe.c @@ -1514,7 +1522,7 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "-Wtype-limits ${CMAKE_C_FLAGS}" ) endif() - if (UNIX AND NOT LWS_WITH_ESP32) + if (UNIX AND NOT LWS_PLAT_FREERTOS) set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wuninitialized -Werror ${VISIBILITY_FLAG} -Wundef ${GCOV_FLAGS} ${CMAKE_C_FLAGS} ${ASAN_FLAGS}" ) else() set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wuninitialized -Werror ${VISIBILITY_FLAG} ${GCOV_FLAGS} ${CMAKE_C_FLAGS}" ) @@ -1750,19 +1758,19 @@ if (LWS_WITH_SSL) if (NOT chose_ssl) if (NOT OPENSSL_FOUND AND NOT LWS_WITH_BORINGSSL) # TODO: Add support for STATIC also. - if (NOT LWS_WITH_ESP32) + if (NOT LWS_PLAT_FREERTOS) find_package(OpenSSL REQUIRED) endif() set(OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}") endif() message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIRS}") - if (NOT LWS_WITH_ESP32) + if (NOT LWS_PLAT_FREERTOS) message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") endif() include_directories("${OPENSSL_INCLUDE_DIRS}") - if (NOT LWS_WITH_ESP32) + if (NOT LWS_PLAT_FREERTOS) list(APPEND LIB_LIST ${OPENSSL_LIBRARIES}) endif() @@ -1929,7 +1937,7 @@ CHECK_FUNCTION_EXISTS(EC_POINT_get_affine_coordinates LWS_HAVE_EC_POINT_get_affi endif() if (LWS_WITH_MBEDTLS) set(LWS_HAVE_TLS_CLIENT_METHOD 1) - if (NOT LWS_WITH_ESP32) + if (NOT LWS_PLAT_FREERTOS) # not supported in esp-idf openssl wrapper yet, but is in our version set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1) endif() @@ -1987,7 +1995,7 @@ set(GENCERTS 0) if (LWS_WITH_SSL AND OPENSSL_EXECUTABLE AND NOT LWS_WITHOUT_TEST_SERVER AND NOT LWS_WITHOUT_SERVER AND NOT LWS_WITHOUT_TESTAPPS) set(GENCERTS 1) endif() -if (LWS_WITH_ESP32) +if (LWS_PLAT_FREERTOS) set(GENCERTS 1) endif() message(" GENCERTS = ${GENCERTS}") @@ -2737,7 +2745,7 @@ message(" LWS_WITH_GENERIC_SESSIONS = ${LWS_WITH_GENERIC_SESSIONS}") message(" LWS_STATIC_PIC = ${LWS_STATIC_PIC}") message(" LWS_WITH_RANGES = ${LWS_WITH_RANGES}") message(" LWS_PLAT_OPTEE = ${LWS_PLAT_OPTEE}") -message(" LWS_WITH_ESP32 = ${LWS_WITH_ESP32}") +message(" LWS_PLAT_FREERTOS = ${LWS_PLAT_FREERTOS}") message(" LWS_WITH_ZIP_FOPS = ${LWS_WITH_ZIP_FOPS}") message(" LWS_AVOID_SIGPIPE_IGN = ${LWS_AVOID_SIGPIPE_IGN}") message(" LWS_WITH_STATS = ${LWS_WITH_STATS}") diff --git a/cmake/lws_config.h.in b/cmake/lws_config.h.in index 697b8d9a7..6dc7ee3ce 100644 --- a/cmake/lws_config.h.in +++ b/cmake/lws_config.h.in @@ -81,6 +81,7 @@ #cmakedefine LWS_OPENSSL_SUPPORT #cmakedefine LWS_PLAT_OPTEE #cmakedefine LWS_PLAT_UNIX +#cmakedefine LWS_PLAT_FREERTOS #cmakedefine LWS_ROLE_CGI #cmakedefine LWS_ROLE_DBUS #cmakedefine LWS_ROLE_H1 diff --git a/include/libwebsockets.h b/include/libwebsockets.h index 8be5a2f65..38391c990 100644 --- a/include/libwebsockets.h +++ b/include/libwebsockets.h @@ -133,14 +133,14 @@ typedef unsigned long long lws_intptr_t; #define LWS_O_CREAT O_CREAT #define LWS_O_TRUNC O_TRUNC -#if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_TA) && !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_TA) && !defined(LWS_PLAT_FREERTOS) #include #include #define LWS_INVALID_FILE -1 #define LWS_SOCK_INVALID (-1) #else #define getdtablesize() (30) -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) #define LWS_INVALID_FILE NULL #define LWS_SOCK_INVALID (-1) #else @@ -237,7 +237,7 @@ typedef unsigned long long lws_intptr_t; #endif /* not USE_OLD_CYASSL */ #else #if defined(LWS_WITH_MBEDTLS) -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) /* this filepath is passed to us but without quotes or <> */ #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ @@ -351,8 +351,11 @@ struct lws_pollfd { #else +#if defined(LWS_PLAT_FREERTOS) +#include #if defined(LWS_WITH_ESP32) #include +#endif #else typedef int lws_sockfd_type; typedef int lws_filefd_type; @@ -549,7 +552,9 @@ struct lws; #include #include #include +#if defined(LWS_WITH_FILE_OPS) #include +#endif #include #include #include diff --git a/include/libwebsockets/lws-adopt.h b/include/libwebsockets/lws-adopt.h index 71af72f07..30c91def5 100644 --- a/include/libwebsockets/lws-adopt.h +++ b/include/libwebsockets/lws-adopt.h @@ -79,7 +79,7 @@ typedef union { lws_filefd_type filefd; } lws_sock_file_fd_type; -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) struct lws_udp { struct sockaddr sa; socklen_t salen; diff --git a/include/libwebsockets/lws-esp32.h b/include/libwebsockets/lws-esp32.h index 1cc7345ad..1b046cef2 100644 --- a/include/libwebsockets/lws-esp32.h +++ b/include/libwebsockets/lws-esp32.h @@ -20,108 +20,10 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. - */ - -typedef int lws_sockfd_type; -typedef int lws_filefd_type; - -/* - * Later lwip (at least 2.1.12) already defines these in its own headers - * protected by the same test as used here... if POLLIN / POLLOUT already exist - * then assume no need to declare those and struct pollfd. * - * Older lwip needs these declarations done here. + * This is only included from libwebsockets.h if LWS_WITH_ESP32 */ -#if !defined(POLLIN) && !defined(POLLOUT) - -struct pollfd { - lws_sockfd_type fd; /**< fd related to */ - short events; /**< which POLL... events to respond to */ - short revents; /**< which POLL... events occurred */ -}; -#define POLLIN 0x0001 -#define POLLPRI 0x0002 -#define POLLOUT 0x0004 -#define POLLERR 0x0008 -#define POLLHUP 0x0010 -#define POLLNVAL 0x0020 - -#endif - -#if defined(LWS_AMAZON_RTOS) -#include -#include -#include -#include "timers.h" -#else /* LWS_AMAZON_RTOS */ -#include -#include -#include -#include "esp_wifi.h" -#include "esp_system.h" -#include "esp_event.h" -#include "esp_event_loop.h" -#include "nvs.h" -#include "driver/gpio.h" -#include "esp_spi_flash.h" -#include "freertos/timers.h" -#endif /* LWS_AMAZON_RTOS */ - -#if !defined(CONFIG_FREERTOS_HZ) -#define CONFIG_FREERTOS_HZ 100 -#endif - -typedef TimerHandle_t uv_timer_t; -typedef void uv_cb_t(uv_timer_t *); -typedef void * uv_handle_t; - -struct timer_mapping { - uv_cb_t *cb; - uv_timer_t *t; -}; - -#define UV_VERSION_MAJOR 1 - -#define lws_uv_getloop(a, b) (NULL) - -static LWS_INLINE void uv_timer_init(void *l, uv_timer_t *t) -{ - (void)l; - *t = NULL; -} - -extern void esp32_uvtimer_cb(TimerHandle_t t); - -static LWS_INLINE void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) -{ - struct timer_mapping *tm = (struct timer_mapping *)malloc(sizeof(*tm)); - - if (!tm) - return; - - tm->t = t; - tm->cb = cb; - - *t = xTimerCreate("x", pdMS_TO_TICKS(first), !!rep, tm, - (TimerCallbackFunction_t)esp32_uvtimer_cb); - xTimerStart(*t, 0); -} - -static LWS_INLINE void uv_timer_stop(uv_timer_t *t) -{ - xTimerStop(*t, 0); -} - -static LWS_INLINE void uv_close(uv_handle_t *h, void *v) -{ - free(pvTimerGetTimerID((uv_timer_t)h)); - xTimerDelete(*(uv_timer_t *)h, 0); -} - - -#if !defined(LWS_AMAZON_RTOS) - /* ESP32 helper declarations */ #include diff --git a/include/libwebsockets/lws-freertos.h b/include/libwebsockets/lws-freertos.h new file mode 100644 index 000000000..b6899d916 --- /dev/null +++ b/include/libwebsockets/lws-freertos.h @@ -0,0 +1,75 @@ +/* + * libwebsockets - small server side websockets and web server implementation + * + * Copyright (C) 2010 - 2019 Andy Green + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * This is included from libwebsockets.h if LWS_PLAT_FREERTOS + */ + +typedef int lws_sockfd_type; +typedef int lws_filefd_type; + +/* + * Later lwip (at least 2.1.12) already defines these in its own headers + * protected by the same test as used here... if POLLIN / POLLOUT already exist + * then assume no need to declare those and struct pollfd. + * + * Older lwip needs these declarations done here. + */ + +#if !defined(POLLIN) && !defined(POLLOUT) + +struct pollfd { + lws_sockfd_type fd; /**< fd related to */ + short events; /**< which POLL... events to respond to */ + short revents; /**< which POLL... events occurred */ +}; +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +#endif + +#if defined(LWS_AMAZON_RTOS) +#include +#include +#include +#include "timers.h" +#else /* LWS_AMAZON_RTOS */ +#include +#include +#include +#include "esp_wifi.h" +#include "esp_system.h" +#include "esp_event.h" +#include "esp_event_loop.h" +#include "nvs.h" +#include "driver/gpio.h" +#include "esp_spi_flash.h" +#include "freertos/timers.h" +#endif /* LWS_AMAZON_RTOS */ + +#if !defined(CONFIG_FREERTOS_HZ) +#define CONFIG_FREERTOS_HZ 100 +#endif diff --git a/include/libwebsockets/lws-network-helper.h b/include/libwebsockets/lws-network-helper.h index 6a04d3f44..bf6555fd2 100644 --- a/include/libwebsockets/lws-network-helper.h +++ b/include/libwebsockets/lws-network-helper.h @@ -78,7 +78,7 @@ lws_get_peer_simple(struct lws *wsi, char *name, int namelen); #define LWS_ITOSA_BUSY -3 /* only returned by lws_socket_bind() on EADDRINUSE */ -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) /** * lws_interface_to_sa() - Convert interface name or IP to sockaddr struct * diff --git a/include/libwebsockets/lws-service.h b/include/libwebsockets/lws-service.h index bab64f769..6c9253697 100644 --- a/include/libwebsockets/lws-service.h +++ b/include/libwebsockets/lws-service.h @@ -189,7 +189,7 @@ lws_libuv_static_refcount_del(uv_handle_t *); #endif /* LWS_WITH_LIBUV */ -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) #define lws_libuv_static_refcount_add(_a, _b) #define lws_libuv_static_refcount_del NULL #endif diff --git a/lib/abstract/test-sequencer.c b/lib/abstract/test-sequencer.c index 574f4ab08..c4fa67750 100644 --- a/lib/abstract/test-sequencer.c +++ b/lib/abstract/test-sequencer.c @@ -37,7 +37,7 @@ struct lws_seq_test_sequencer { struct lws_context *context; struct lws_vhost *vhost; - lws_seq_t *unit_test_seq; + struct lws_sequencer *unit_test_seq; /* holds the per-test token for the unit-test transport to consume */ lws_token_map_t uttt[4]; @@ -235,7 +235,7 @@ int lws_abs_unit_test_sequencer(const lws_test_sequencer_args_t *args) { struct lws_seq_test_sequencer *s; - lws_seq_t *seq; + struct lws_sequencer *seq; lws_seq_info_t i; memset(&i, 0, sizeof(i)); diff --git a/lib/abstract/transports/unit-test.c b/lib/abstract/transports/unit-test.c index 48ecd63b3..c5b0bc959 100644 --- a/lib/abstract/transports/unit-test.c +++ b/lib/abstract/transports/unit-test.c @@ -35,7 +35,7 @@ typedef struct lws_abstxp_unit_test_priv { char note[128]; struct lws_abs *abs; - lws_seq_t *seq; + struct lws_sequencer *seq; lws_unit_test_t *current_test; lws_unit_test_packet_t *expect; lws_unit_test_packet_test_cb result_cb; @@ -419,7 +419,7 @@ static int lws_atcut_create(lws_abs_t *ai) { abs_unit_test_priv_t *priv; - lws_seq_t *seq; + struct lws_sequencer *seq; lws_seq_info_t i; seq_priv_t *s; diff --git a/lib/core-net/adopt.c b/lib/core-net/adopt.c index d94569ab0..e4d05d9de 100644 --- a/lib/core-net/adopt.c +++ b/lib/core-net/adopt.c @@ -400,7 +400,7 @@ lws_create_adopt_udp(struct lws_vhost *vhost, int port, int flags, lws_snprintf(buf, sizeof(buf), "%u", port); n = getaddrinfo(NULL, buf, &h, &r); if (n) { -#ifndef LWS_WITH_ESP32 +#if !defined(LWS_PLAT_FREERTOS) lwsl_info("%s: getaddrinfo error: %s\n", __func__, gai_strerror(n)); #else lwsl_info("%s: getaddrinfo error: %s\n", __func__, strerror(n)); diff --git a/lib/core-net/close.c b/lib/core-net/close.c index 3e8e8b1c7..eb8a5e361 100644 --- a/lib/core-net/close.c +++ b/lib/core-net/close.c @@ -264,7 +264,7 @@ __lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, wsi->socket_is_permanently_unusable = 1; goto just_kill_connection; } -#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) +#if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); @@ -421,7 +421,7 @@ just_kill_connection: * This causes problems on WINCE / ESP32 with disconnection * when the events are half closing connection */ -#if !defined(_WIN32_WCE) && !defined(LWS_WITH_ESP32) +#if !defined(_WIN32_WCE) && !defined(LWS_PLAT_FREERTOS) /* libuv: no event available to guarantee completion */ if (!wsi->socket_is_permanently_unusable && lws_socket_is_valid(wsi->desc.sockfd) && diff --git a/lib/core-net/dummy-callback.c b/lib/core-net/dummy-callback.c index 90bfe99e3..f54baf994 100644 --- a/lib/core-net/dummy-callback.c +++ b/lib/core-net/dummy-callback.c @@ -127,9 +127,7 @@ lws_callback_ws_proxy(struct lws *wsi, enum lws_callback_reasons reason, case LWS_CALLBACK_CLIENT_CLOSED: lwsl_user("%s: client closed: parent %p\n", __func__, wsi->parent); if (wsi->parent) - lws_set_timeout(wsi->parent, - PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, - LWS_TO_KILL_ASYNC); + lws_set_timeout(wsi->parent, 1, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: @@ -587,9 +585,8 @@ lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, if (!lws_get_parent(wsi)) break; lwsl_err("%s: LWS_CALLBACK_CLOSED_CLIENT_HTTP\n", __func__); - lws_set_timeout(lws_get_parent(wsi), - PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, - LWS_TO_KILL_ASYNC); + lws_set_timeout(lws_get_parent(wsi), LWS_TO_KILL_ASYNC, + PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: diff --git a/lib/core-net/network.c b/lib/core-net/network.c index 4db42bf87..09aa048db 100644 --- a/lib/core-net/network.c +++ b/lib/core-net/network.c @@ -24,7 +24,7 @@ #include "private-lib-core.h" -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) static int interface_to_sa(struct lws_vhost *vh, const char *ifname, struct sockaddr_in *addr, size_t addrlen, int allow_ipv6) @@ -77,7 +77,7 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name, memset(&ai, 0, sizeof ai); ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) if (getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in), name, name_len, NULL, 0, 0)) @@ -222,7 +222,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port, socklen_t len = sizeof(struct sockaddr_storage); #endif int n; -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) int m; #endif struct sockaddr_storage sin; @@ -251,7 +251,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port, } else #endif -#if defined(LWS_WITH_IPV6) && !defined(LWS_WITH_ESP32) +#if defined(LWS_WITH_IPV6) && !defined(LWS_PLAT_FREERTOS) if (ipv6_allowed && LWS_IPV6_ENABLED(vhost)) { v = (struct sockaddr *)&serv_addr6; n = sizeof(struct sockaddr_in6); @@ -283,7 +283,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port, serv_addr4.sin_addr.s_addr = INADDR_ANY; serv_addr4.sin_family = AF_INET; -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (iface) { m = interface_to_sa(vhost, iface, (struct sockaddr_in *)v, n, 0); diff --git a/lib/core-net/output.c b/lib/core-net/output.c index 7dda13805..1dac56eca 100644 --- a/lib/core-net/output.c +++ b/lib/core-net/output.c @@ -206,7 +206,7 @@ int lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) lws_stats_bump(pt, LWSSTATS_C_WRITE_PARTIALS, 1); lws_stats_bump(pt, LWSSTATS_B_PARTIALS_ACCEPTED_PARTS, m); -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (lws_wsi_is_udp(wsi)) { /* stash original destination for fulfilling UDP partials */ wsi->udp->sa_pending = wsi->udp->sa; @@ -261,7 +261,7 @@ lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, int len) errno = 0; if (lws_wsi_is_udp(wsi)) { -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) wsi->udp->salen = sizeof(wsi->udp->sa); n = recvfrom(wsi->desc.sockfd, (char *)buf, len, 0, &wsi->udp->sa, &wsi->udp->salen); @@ -308,7 +308,7 @@ lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, int len) #endif if (lws_wsi_is_udp(wsi)) { -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (lws_has_buffered_out(wsi)) n = sendto(wsi->desc.sockfd, (const char *)buf, len, 0, &wsi->udp->sa_pending, @@ -343,7 +343,7 @@ LWS_VISIBLE int lws_ssl_pending_no_ssl(struct lws *wsi) { (void)wsi; -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) return 100; #else return 0; diff --git a/lib/core-net/private-lib-core-net.h b/lib/core-net/private-lib-core-net.h index 465f9d060..c1d18b0ae 100644 --- a/lib/core-net/private-lib-core-net.h +++ b/lib/core-net/private-lib-core-net.h @@ -513,7 +513,7 @@ struct lws_vhost { void *user; int listen_port; -#if !defined(LWS_WITH_ESP32) && !defined(OPTEE_TA) && !defined(WIN32) +#if !defined(LWS_PLAT_FREERTOS) && !defined(OPTEE_TA) && !defined(WIN32) int bind_iface; #endif diff --git a/lib/core-net/vhost.c b/lib/core-net/vhost.c index 4cd80fb18..18b5d1e7e 100644 --- a/lib/core-net/vhost.c +++ b/lib/core-net/vhost.c @@ -392,8 +392,10 @@ next: context->protocol_init_done = 1; +#if defined(LWS_WITH_SERVER) if (any) lws_tls_check_all_cert_lifetimes(context); +#endif return 0; } @@ -468,8 +470,7 @@ lws_create_vhost(struct lws_context *context, lwsl_info("%s set to only support RAW\n", vh->name); vh->iface = info->iface; -#if !defined(LWS_WITH_ESP32) && \ - !defined(OPTEE_TA) && !defined(WIN32) +#if !defined(LWS_PLAT_FREERTOS) && !defined(OPTEE_TA) && !defined(WIN32) vh->bind_iface = info->bind_iface; #endif @@ -753,6 +754,7 @@ lws_create_vhost(struct lws_context *context, lwsl_err("%s: lws_context_init_client_ssl failed\n", __func__); goto bail1; } +#if defined(LWS_WITH_SERVER) lws_context_lock(context, "create_vhost"); n = _lws_vhost_init_server(info, vh); lws_context_unlock(context); @@ -760,6 +762,7 @@ lws_create_vhost(struct lws_context *context, lwsl_err("init server failed\n"); goto bail1; } +#endif while (1) { if (!(*vh1)) { diff --git a/lib/core/alloc.c b/lib/core/alloc.c index a0738a79e..1e6a8a70f 100644 --- a/lib/core/alloc.c +++ b/lib/core/alloc.c @@ -86,7 +86,7 @@ _realloc(void *ptr, size_t size, const char *reason) void *v; if (size) { -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) lwsl_notice("%s: size %lu: %s (free heap %d)\n", __func__, #if defined(LWS_AMAZON_RTOS) (unsigned long)size, reason, (unsigned int)xPortGetFreeHeapSize() - (int)size); diff --git a/lib/core/context.c b/lib/core/context.c index 04a3780bc..c0ed762c5 100644 --- a/lib/core/context.c +++ b/lib/core/context.c @@ -168,7 +168,7 @@ lws_create_context(const struct lws_context_creation_info *info) lws_mutex_refcount_init(&context->mr); #endif -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) #if defined(LWS_AMAZON_RTOS) context->last_free_heap = xPortGetFreeHeapSize(); #else @@ -876,7 +876,7 @@ lws_context_destroy(struct lws_context *context) } #endif -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) #if defined(LWS_AMAZON_RTOS) context->last_free_heap = xPortGetFreeHeapSize(); #else diff --git a/lib/core/libwebsockets.c b/lib/core/libwebsockets.c index d9f7f99b6..e6b480c0a 100644 --- a/lib/core/libwebsockets.c +++ b/lib/core/libwebsockets.c @@ -69,7 +69,7 @@ lws_hex_to_byte_array(const char *h, uint8_t *dest, int max) #if !defined(LWS_PLAT_OPTEE) -#if !defined(LWS_AMAZON_RTOS) +#if defined(LWS_WITH_FILE_OPS) int lws_open(const char *__file, int __oflag, ...) { va_list ap; diff --git a/lib/core/private-lib-core.h b/lib/core/private-lib-core.h index b606908c0..9fe69a3ba 100644 --- a/lib/core/private-lib-core.h +++ b/lib/core/private-lib-core.h @@ -110,8 +110,8 @@ * */ -#if defined(LWS_WITH_ESP32) - #include "private-lib-plat-esp32.h" +#if defined(LWS_PLAT_FREERTOS) + #include "private-lib-plat-freertos.h" #else #if defined(WIN32) || defined(_WIN32) #include "private-lib-plat-windows.h" @@ -361,7 +361,7 @@ struct lws_context { char worst_latency_info[256]; #endif -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) unsigned long time_last_state_dump; uint32_t last_free_heap; #endif @@ -429,7 +429,7 @@ void lws_vhost_destroy1(struct lws_vhost *vh); -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) LWS_EXTERN int lws_find_string_in_file(const char *filename, const char *str, int stringlen); #endif diff --git a/lib/misc/dir.c b/lib/misc/dir.c index 7f3f333c7..ca5fe834d 100644 --- a/lib/misc/dir.c +++ b/lib/misc/dir.c @@ -71,7 +71,7 @@ bail: #else -#if !defined(_WIN32) && !defined(LWS_WITH_ESP32) +#if !defined(_WIN32) && !defined(LWS_PLAT_FREERTOS) #include diff --git a/lib/plat/esp32/esp32-helpers.c b/lib/plat/freertos/esp32/esp32-helpers.c similarity index 100% rename from lib/plat/esp32/esp32-helpers.c rename to lib/plat/freertos/esp32/esp32-helpers.c diff --git a/lib/plat/esp32/esp_attr.h b/lib/plat/freertos/esp32/esp_attr.h similarity index 100% rename from lib/plat/esp32/esp_attr.h rename to lib/plat/freertos/esp32/esp_attr.h diff --git a/lib/plat/esp32/esp32-fds.c b/lib/plat/freertos/freertos-fds.c similarity index 100% rename from lib/plat/esp32/esp32-fds.c rename to lib/plat/freertos/freertos-fds.c diff --git a/lib/plat/esp32/esp32-file.c b/lib/plat/freertos/freertos-file.c similarity index 100% rename from lib/plat/esp32/esp32-file.c rename to lib/plat/freertos/freertos-file.c diff --git a/lib/plat/esp32/esp32-init.c b/lib/plat/freertos/freertos-init.c similarity index 100% rename from lib/plat/esp32/esp32-init.c rename to lib/plat/freertos/freertos-init.c diff --git a/lib/plat/esp32/esp32-misc.c b/lib/plat/freertos/freertos-misc.c similarity index 94% rename from lib/plat/esp32/esp32-misc.c rename to lib/plat/freertos/freertos-misc.c index 2c031e660..0cf774ff6 100644 --- a/lib/plat/esp32/esp32-misc.c +++ b/lib/plat/freertos/freertos-misc.c @@ -35,19 +35,7 @@ lws_now_usecs(void) LWS_VISIBLE int lws_get_random(struct lws_context *context, void *buf, int len) { -#if defined(LWS_AMAZON_RTOS) - int n; - - n = mbedtls_ctr_drbg_random(&context->mcdc, buf, len); - if (!n) - return len; - - /* failed */ - - lwsl_err("%s: mbedtls_ctr_drbg_random returned 0x%x\n", __func__, n); - - return 0; -#else +#if defined(LWS_WITH_ESP32) uint8_t *pb = buf; while (len) { @@ -65,6 +53,18 @@ lws_get_random(struct lws_context *context, void *buf, int len) } return pb - (uint8_t *)buf; +#else + int n; + + n = mbedtls_ctr_drbg_random(&context->mcdc, buf, len); + if (!n) + return len; + + /* failed */ + + lwsl_err("%s: mbedtls_ctr_drbg_random returned 0x%x\n", __func__, n); + + return 0; #endif } @@ -89,11 +89,3 @@ lws_plat_recommended_rsa_bits(void) */ return 2048; } - -void esp32_uvtimer_cb(TimerHandle_t t) -{ - struct timer_mapping *p = pvTimerGetTimerID(t); - - p->cb(p->t); -} - diff --git a/lib/plat/esp32/esp32-pipe.c b/lib/plat/freertos/freertos-pipe.c similarity index 100% rename from lib/plat/esp32/esp32-pipe.c rename to lib/plat/freertos/freertos-pipe.c diff --git a/lib/plat/esp32/esp32-service.c b/lib/plat/freertos/freertos-service.c similarity index 100% rename from lib/plat/esp32/esp32-service.c rename to lib/plat/freertos/freertos-service.c diff --git a/lib/plat/esp32/esp32-sockets.c b/lib/plat/freertos/freertos-sockets.c similarity index 100% rename from lib/plat/esp32/esp32-sockets.c rename to lib/plat/freertos/freertos-sockets.c diff --git a/lib/plat/esp32/private-lib-plat-esp32.h b/lib/plat/freertos/private-lib-plat-freertos.h similarity index 97% rename from lib/plat/esp32/private-lib-plat-esp32.h rename to lib/plat/freertos/private-lib-plat-freertos.h index 9158a48fd..a376d2790 100644 --- a/lib/plat/esp32/private-lib-plat-esp32.h +++ b/lib/plat/freertos/private-lib-plat-freertos.h @@ -21,7 +21,7 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * - * Included from lib/private-lib-core.h if LWS_WITH_ESP32 + * Included from lib/private-lib-core.h if LWS_PLAT_FREERTOS */ #define MSG_NOSIGNAL 0 diff --git a/lib/plat/unix/unix-init.c b/lib/plat/unix/unix-init.c index 235f1b221..eb61ea84b 100644 --- a/lib/plat/unix/unix-init.c +++ b/lib/plat/unix/unix-init.c @@ -66,6 +66,7 @@ lws_sul_plat_unix(lws_sorted_usec_list_t *sul) lws_check_deferred_free(context, 0, 0); +#if defined(LWS_WITH_SERVER) lws_context_lock(context, "periodic checks"); lws_start_foreach_llp(struct lws_vhost **, pv, context->no_listener_vhost_list) { @@ -80,6 +81,7 @@ lws_sul_plat_unix(lws_sorted_usec_list_t *sul) } } lws_end_foreach_llp(pv, no_listener_vhost_list); lws_context_unlock(context); +#endif #if defined(LWS_ROLE_CGI) role_ops_cgi.periodic_checks(context, 0, now); @@ -132,8 +134,11 @@ lws_plat_init(struct lws_context *context, lwsl_info(" mem: platform fd map: %5lu B\n", (unsigned long)(sizeof(struct lws *) * context->max_fds)); #endif +#if defined(LWS_WITH_FILE_OPS) fd = lws_open(SYSTEM_RANDOM_FILEPATH, O_RDONLY); - +#else + fd = open(SYSTEM_RANDOM_FILEPATH, O_RDONLY); +#endif context->fd_random = fd; if (context->fd_random < 0) { lwsl_err("Unable to open random device %s %d\n", diff --git a/lib/roles/h1/ops-h1.c b/lib/roles/h1/ops-h1.c index a28e9e798..cb21838fe 100644 --- a/lib/roles/h1/ops-h1.c +++ b/lib/roles/h1/ops-h1.c @@ -507,6 +507,8 @@ try_pollout: return LWS_HPI_RET_HANDLED; } +#if defined(LWS_WITH_FILE_OPS) + /* >0 == completion, <0 == error * * We'll get a LWS_CALLBACK_HTTP_FILE_COMPLETION callback when @@ -516,6 +518,7 @@ try_pollout: n = lws_serve_http_file_fragment(wsi); if (n < 0) goto fail; +#endif return LWS_HPI_RET_HANDLED; diff --git a/lib/roles/h2/http2.c b/lib/roles/h2/http2.c index 63fb9b921..4923483b9 100644 --- a/lib/roles/h2/http2.c +++ b/lib/roles/h2/http2.c @@ -689,7 +689,9 @@ int lws_h2_do_pps_send(struct lws *wsi) /* this is the end of the preface dance then? */ if (lwsi_state(wsi) == LRS_H2_AWAIT_SETTINGS) { lwsi_set_state(wsi, LRS_ESTABLISHED); +#if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; +#endif if (lws_is_ssl(lws_get_network_wsi(wsi))) break; /* @@ -718,10 +720,10 @@ int lws_h2_do_pps_send(struct lws *wsi) #if defined(LWS_WITH_SERVER_STATUS) wsi->vhost->conn_stats.h2_trans++; #endif - +#if defined(LWS_WITH_SERVER) if (lws_http_action(h2n->swsi)) goto bail; - +#endif break; } break; @@ -1275,8 +1277,9 @@ lws_h2_parse_end_of_frame(struct lws *wsi) struct lws_h2_protocol_send *pps; /* migrate original client ask on to substream 1 */ - +#if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; +#endif /* * we need to treat the headers from the upgrade as the diff --git a/lib/roles/h2/ops-h2.c b/lib/roles/h2/ops-h2.c index 078afd96c..1686a5978 100644 --- a/lib/roles/h2/ops-h2.c +++ b/lib/roles/h2/ops-h2.c @@ -805,6 +805,7 @@ lws_h2_dump_waiting_children(struct lws *wsi) #endif } +#if defined(LWS_WITH_SERVER) static int lws_h2_bind_for_post_before_action(struct lws *wsi) { @@ -846,6 +847,7 @@ lws_h2_bind_for_post_before_action(struct lws *wsi) return 0; } +#endif /* * we are the 'network wsi' for potentially many muxed child wsi with @@ -999,6 +1001,7 @@ rops_perform_user_POLLOUT_h2(struct lws *wsi) goto next_child; } +#if defined(LWS_WITH_SERVER) if (lwsi_state(w) == LRS_DEFERRING_ACTION) { /* @@ -1041,6 +1044,8 @@ rops_perform_user_POLLOUT_h2(struct lws *wsi) goto next_child; } +#if defined(LWS_WITH_FILE_OPS) + if (lwsi_state(w) == LRS_ISSUING_FILE) { ((volatile struct lws *)w)->leave_pollout_active = 0; @@ -1075,6 +1080,8 @@ rops_perform_user_POLLOUT_h2(struct lws *wsi) goto next_child; } +#endif +#endif #if defined(LWS_ROLE_WS) diff --git a/lib/roles/http/client/client-handshake.c b/lib/roles/http/client/client-handshake.c index a279a4a19..002d7c925 100644 --- a/lib/roles/http/client/client-handshake.c +++ b/lib/roles/http/client/client-handshake.c @@ -429,7 +429,7 @@ create_new_conn: wsi->ipv6 = LWS_IPV6_ENABLED(wsi->vhost); #ifdef LWS_WITH_IPV6 if (wsi->stash) - iface = wsi->stash->iface; + iface = wsi->stash->cis[CIS_IFACE]; else iface = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_IFACE); diff --git a/lib/roles/http/client/client-http.c b/lib/roles/http/client/client-http.c index 332767b76..97b8dbb40 100644 --- a/lib/roles/http/client/client-http.c +++ b/lib/roles/http/client/client-http.c @@ -367,7 +367,7 @@ start_ws_handshake: * So this is it, we are an h2 master client connection * now, not an h1 client connection. */ -#if defined (LWS_WITH_TLS) +#if defined(LWS_WITH_TLS) && defined(LWS_WITH_SERVER) lws_tls_server_conn_alpn(wsi); #endif diff --git a/lib/roles/http/server/parsers.c b/lib/roles/http/parsers.c similarity index 100% rename from lib/roles/http/server/parsers.c rename to lib/roles/http/parsers.c diff --git a/lib/roles/http/private-lib-roles-http.h b/lib/roles/http/private-lib-roles-http.h index 05412fd60..50a332d6e 100644 --- a/lib/roles/http/private-lib-roles-http.h +++ b/lib/roles/http/private-lib-roles-http.h @@ -53,7 +53,7 @@ enum http_conn_type { * other APIs to get information out of it. */ -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) typedef uint16_t ah_data_idx_t; #else typedef uint32_t ah_data_idx_t; @@ -228,9 +228,11 @@ struct _lws_http_mode_related { struct allocated_headers *ah; struct lws *ah_wait_list; +#if defined(LWS_WITH_FILE_OPS) lws_filepos_t filepos; lws_filepos_t filelen; lws_fop_fd_t fop_fd; +#endif #if defined(LWS_WITH_RANGES) struct lws_range_parsing range; diff --git a/lib/roles/http/server/server.c b/lib/roles/http/server/server.c index 009c481d9..d4dc9a567 100644 --- a/lib/roles/http/server/server.c +++ b/lib/roles/http/server/server.c @@ -31,7 +31,9 @@ const char * const method_names[] = { #endif }; +#if defined(LWS_WITH_FILE_OPS) static const char * const intermediates[] = { "private", "public" }; +#endif /* * return 0: all done @@ -182,7 +184,7 @@ done_list: lwsl_err("ERROR opening socket\n"); return 1; } -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) #if (defined(WIN32) || defined(_WIN32)) && defined(SO_EXCLUSIVEADDRUSE) /* * only accept that we are the only listener on the port @@ -456,6 +458,7 @@ lws_get_mimetype(const char *file, const struct lws_http_mount *m) return NULL; } +#if defined(LWS_WITH_FILE_OPS) static lws_fop_flags_t lws_vfs_prepare_flags(struct lws *wsi) { @@ -473,7 +476,6 @@ lws_vfs_prepare_flags(struct lws *wsi) return f; } -#if !defined(LWS_AMAZON_RTOS) static int lws_http_serve(struct lws *wsi, char *uri, const char *origin, const struct lws_http_mount *m) @@ -495,7 +497,7 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin, char path[256], sym[2048]; unsigned char *p = (unsigned char *)sym + 32 + LWS_PRE, *start = p; unsigned char *end = p + sizeof(sym) - 32 - LWS_PRE; -#if !defined(WIN32) && !defined(LWS_WITH_ESP32) +#if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) size_t len; #endif int n; @@ -535,7 +537,7 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin, /* if it can't be statted, don't try */ if (fflags & LWS_FOP_FLAG_VIRTUAL) break; -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) break; #endif #if !defined(WIN32) @@ -560,7 +562,7 @@ lws_http_serve(struct lws *wsi, char *uri, const char *origin, wsi->http.fop_fd->mod_time = (uint32_t)st.st_mtime; fflags |= LWS_FOP_FLAG_MOD_TIME_VALID; -#if !defined(WIN32) && !defined(LWS_WITH_ESP32) +#if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) if ((S_IFMT & st.st_mode) == S_IFLNK) { len = readlink(path, sym, sizeof(sym) - 1); if (len) { @@ -791,7 +793,7 @@ lws_find_mount(struct lws *wsi, const char *uri_ptr, int uri_len) } #endif -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) && defined(LWS_WITH_FILE_OPS) static int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { @@ -944,9 +946,12 @@ lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len) return -1; } + + enum lws_check_basic_auth_results lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file) { +#if defined(LWS_WITH_FILE_OPS) char b64[160], plain[(sizeof(b64) * 3) / 4], *pcolon; int m, ml, fi; @@ -1012,6 +1017,9 @@ lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file) lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_AUTHORIZATION)); return LCBA_CONTINUE; +#else + return LCBA_FAILED_AUTH; +#endif } #if defined(LWS_WITH_HTTP_PROXY) @@ -1580,7 +1588,7 @@ lws_http_action(struct lws *wsi) wsi->cache_intermediaries = hit->cache_intermediaries; m = 1; -#if !defined(LWS_AMAZON_RTOS) +#if defined(LWS_WITH_FILE_OPS) if (hit->origin_protocol == LWSMPRO_FILE) m = lws_http_serve(wsi, s, hit->origin, hit); #endif @@ -2048,7 +2056,9 @@ raw_transition: lwsl_info("%s: %p: No upgrade\n", __func__, wsi); lwsi_set_state(wsi, LRS_ESTABLISHED); +#if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; +#endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_validate(wsi); @@ -2305,7 +2315,7 @@ lws_http_transaction_completed(struct lws *wsi) return 0; } -#if !defined(LWS_AMAZON_RTOS) +#if defined(LWS_WITH_FILE_OPS) LWS_VISIBLE int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len) @@ -2596,6 +2606,8 @@ lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, } #endif +#if defined(LWS_WITH_FILE_OPS) + LWS_VISIBLE int lws_serve_http_file_fragment(struct lws *wsi) { struct lws_context *context = wsi->context; @@ -2871,6 +2883,8 @@ file_had_it: return -1; } +#endif + #if defined(LWS_WITH_SERVER) LWS_VISIBLE void lws_server_get_canonical_hostname(struct lws_context *context, @@ -2879,7 +2893,7 @@ lws_server_get_canonical_hostname(struct lws_context *context, if (lws_check_opt(info->options, LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME)) return; -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) /* find canonical hostname */ gethostname((char *)context->canonical_hostname, sizeof(context->canonical_hostname) - 1); diff --git a/lib/roles/raw-skt/ops-raw-skt.c b/lib/roles/raw-skt/ops-raw-skt.c index 27ab93a89..86a568498 100644 --- a/lib/roles/raw-skt/ops-raw-skt.c +++ b/lib/roles/raw-skt/ops-raw-skt.c @@ -165,7 +165,7 @@ rops_adoption_bind_raw_skt(struct lws *wsi, int type, const char *vh_prot_name) (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (type & LWS_ADOPT_FLAG_UDP) /* * these can be >128 bytes, so just alloc for UDP diff --git a/lib/roles/ws/client-ws.c b/lib/roles/ws/client-ws.c index 73df446cf..ee30bac66 100644 --- a/lib/roles/ws/client-ws.c +++ b/lib/roles/ws/client-ws.c @@ -661,7 +661,7 @@ check_accept: wsi->ws->rx_ubuf_alloc = n; lwsl_info("Allocating client RX buffer %d\n", n); -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) if (setsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof n)) { lwsl_warn("Failed to set SNDBUF to %d", n); diff --git a/lib/roles/ws/ops-ws.c b/lib/roles/ws/ops-ws.c index 7f395d825..d33e62296 100644 --- a/lib/roles/ws/ops-ws.c +++ b/lib/roles/ws/ops-ws.c @@ -903,7 +903,7 @@ lws_server_init_wsi_for_ws(struct lws *wsi) wsi->ws->rx_ubuf_alloc = n; lwsl_debug("Allocating RX buffer %d\n", n); -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) if (!wsi->h2_stream_carries_ws) if (setsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof n)) { diff --git a/lib/tls/mbedtls/lws-genaes.c b/lib/tls/mbedtls/lws-genaes.c index 4314f127a..9f51a7bb7 100644 --- a/lib/tls/mbedtls/lws-genaes.c +++ b/lib/tls/mbedtls/lws-genaes.c @@ -25,7 +25,7 @@ * same whether you are using openssl or mbedtls hash functions underneath. */ #include "private-lib-core.h" -#include "../../jose/private-lib-jose.h" +#include "private-lib-jose.h" static int operation_map[] = { MBEDTLS_AES_ENCRYPT, MBEDTLS_AES_DECRYPT }; diff --git a/lib/tls/mbedtls/mbedtls-ssl.c b/lib/tls/mbedtls/mbedtls-ssl.c index 97b9e372f..65a47534e 100644 --- a/lib/tls/mbedtls/mbedtls-ssl.c +++ b/lib/tls/mbedtls/mbedtls-ssl.c @@ -56,7 +56,7 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) errno = 0; n = SSL_read(wsi->tls.ssl, buf, len); -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%p: SSL_read ENOTCONN\n", wsi); return LWS_SSL_CAPABLE_ERROR; diff --git a/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h b/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h index bfd5c2e3f..045fc7d1a 100644 --- a/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h +++ b/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h @@ -21,7 +21,7 @@ //#include "private-lib-core.h" #include -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #if !defined(LWS_AMAZON_RTOS) #undef MBEDTLS_CONFIG_FILE diff --git a/lib/tls/openssl/lws-genaes.c b/lib/tls/openssl/lws-genaes.c index 0b5fdaa7a..ffad7cd18 100644 --- a/lib/tls/openssl/lws-genaes.c +++ b/lib/tls/openssl/lws-genaes.c @@ -25,7 +25,7 @@ * same whether you are using openssl or mbedtls hash functions underneath. */ #include "private-lib-core.h" -#include "../../jose/private-lib-jose.h" +#include "private-lib-jose.h" /* * Care: many openssl apis return 1 for success. These are translated to the diff --git a/lib/tls/openssl/openssl-ssl.c b/lib/tls/openssl/openssl-ssl.c index 400a7e026..ee0bff852 100644 --- a/lib/tls/openssl/openssl-ssl.c +++ b/lib/tls/openssl/openssl-ssl.c @@ -186,7 +186,7 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) errno = 0; ERR_clear_error(); n = SSL_read(wsi->tls.ssl, buf, len); -#if defined(LWS_WITH_ESP32) +#if defined(LWS_PLAT_FREERTOS) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%p: SSL_read ENOTCONN\n", wsi); return LWS_SSL_CAPABLE_ERROR; diff --git a/lib/tls/private-lib-tls.h b/lib/tls/private-lib-tls.h index d8f5ccb6a..1add27a78 100644 --- a/lib/tls/private-lib-tls.h +++ b/lib/tls/private-lib-tls.h @@ -52,7 +52,7 @@ #define OPENSSL_NO_TLSEXT #endif /* not USE_OLD_CYASSL */ #else /* WOLFSSL */ - #if defined(LWS_WITH_ESP32) + #if defined(LWS_PLAT_FREERTOS) #define OPENSSL_NO_TLSEXT #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ @@ -73,7 +73,11 @@ #include #include #include + #if defined(LWS_AMAZON_LINUX) + #include "ssl.h" /* wrapper !!!! */ + #else #include "openssl/ssl.h" /* wrapper !!!! */ + #endif #else #include #include diff --git a/lib/tls/tls-network.c b/lib/tls/tls-network.c index dd9c6a2c7..f652b2781 100644 --- a/lib/tls/tls-network.c +++ b/lib/tls/tls-network.c @@ -65,7 +65,7 @@ lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi) lws_pt_unlock(pt); } - +#if defined(LWS_WITH_SERVER) int lws_tls_check_cert_lifetime(struct lws_vhost *v) { @@ -113,7 +113,6 @@ lws_tls_check_all_cert_lifetimes(struct lws_context *context) return 0; } - /* * LWS_TLS_EXTANT_NO : skip adding the cert * LWS_TLS_EXTANT_YES : use the cert and private key paths normally @@ -161,7 +160,6 @@ lws_tls_generic_cert_checks(struct lws_vhost *vhost, const char *cert, return LWS_TLS_EXTANT_YES; } -#if defined(LWS_WITH_SERVER) /* * update the cert for every vhost using the given path */ diff --git a/lib/tls/tls.c b/lib/tls/tls.c index deacd5eee..3edc524d4 100644 --- a/lib/tls/tls.c +++ b/lib/tls/tls.c @@ -26,7 +26,7 @@ #include "private-lib-tls.h" #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) -#if defined(LWS_WITH_ESP32) && !defined(LWS_AMAZON_RTOS) +#if defined(LWS_PLAT_FREERTOS) && !defined(LWS_AMAZON_RTOS) int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount) { @@ -229,7 +229,7 @@ bail: #endif -#if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) +#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) static int @@ -286,7 +286,7 @@ lws_tls_use_any_upgrade_check_extant(const char *name) int n; -#if !defined(LWS_WITH_ESP32) +#if !defined(LWS_PLAT_FREERTOS) char buf[256]; lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", name); diff --git a/minimal-examples/api-tests/api-test-lws_dsh/main.c b/minimal-examples/api-tests/api-test-lws_dsh/main.c index 8f92fd9e3..638f46855 100644 --- a/minimal-examples/api-tests/api-test-lws_dsh/main.c +++ b/minimal-examples/api-tests/api-test-lws_dsh/main.c @@ -12,7 +12,7 @@ int test1(void) { - lws_dsh_t *dsh; + struct lws_dsh *dsh; size_t size; void *a1; @@ -94,7 +94,7 @@ bail: int test2(void) { - lws_dsh_t *dsh, *dsh2; + struct lws_dsh *dsh, *dsh2; lws_dll2_owner_t owner; uint8_t blob[4096]; @@ -173,7 +173,7 @@ bail: int test3(void) { - lws_dsh_t *dsh, *dsh2; + struct lws_dsh *dsh, *dsh2; lws_dll2_owner_t owner; uint8_t blob[4096]; @@ -245,7 +245,7 @@ int test4(void) { uint8_t blob[4096]; - lws_dsh_t *dsh; + struct lws_dsh *dsh; size_t size; void *a1; diff --git a/minimal-examples/api-tests/api-test-lws_sequencer/main.c b/minimal-examples/api-tests/api-test-lws_sequencer/main.c index a84aa7ea5..3779833a2 100644 --- a/minimal-examples/api-tests/api-test-lws_sequencer/main.c +++ b/minimal-examples/api-tests/api-test-lws_sequencer/main.c @@ -324,7 +324,7 @@ main(int argc, const char **argv) int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; - lws_seq_t *seq; + struct lws_sequencer *seq; struct lws_vhost *vh; lws_seq_info_t i; struct myseq *s;