The TEN framework utilizes several third-party libraries. Some are used specifically for testing, while others are integrated into the TEN runtime. Below is a description of these libraries, along with any necessary modifications required for their use within the TEN framework.
Canonical libwebsockets.org networking library. Please refer to third_party/libwebsockets for details.
--- /home/wei/MyData/Temp/libwebsockets-4.3.2/CMakeLists.txt+++ libwebsockets/CMakeLists.txt@@ -851,6 +851,7 @@ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) # Fail the build if any warnings add_compile_options(/W3 /WX)+ add_compile_options(/Zc:preprocessor /wd4819) # Unbreak MSVC broken preprocessor __VA_ARGS__ behaviour if (MSVC_VERSION GREATER 1925) add_compile_options(/Zc:preprocessor /wd5105)
Apply the following patch.
diff --git a/third_party/libwebsockets/cmake/lws_config.h.in b/third_party/libwebsockets/cmake/lws_config.h.inindex f3f4a9d79..e8d36c3ae 100644--- a/third_party/libwebsockets/cmake/lws_config.h.in+++ b/third_party/libwebsockets/cmake/lws_config.h.in@@ -238,3 +238,9 @@ #cmakedefine LWS_WITH_PLUGINS_API #cmakedefine LWS_HAVE_RTA_PREF+// NOTE (Liu): The libwebsockets library will use external variables from mbedtls+// if 'LWS_WITH_MBEDTLS' is enabled. On Windows, variable declarations in the header+// file must start with '__declspec(dllimport)', otherwise, the+// symbols cannot be accessed.+// Refer to third_party/mbedtls/include/mbedtls/export.h.+#define USING_SHARED_MBEDTLSdiff --git a/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c b/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c
index e8a0cb2d4..84a164e90 100755--- a/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c+++ b/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c@@ -183,7 +183,12 @@ int ssl_pm_new(SSL *ssl) mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version); } else { mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3);- mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, 1);++ // NOTE: mbedtls added 'ssl_conf_version_check()' since v3.1.0, and+ // mbedtls only enables TLS 1.2 by default. So the 'min_tls_version' and+ // 'max_tls_version' must be '0x303', or 'mbedtls_ssl_setup' will+ // fail.+ mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); } mbedtls_ssl_conf_rng(&ssl_pm->conf, mbedtls_ctr_drbg_random, &ssl_pm->ctr_drbg);
Fix for linking mbedtls on Windows
Apply the following patch if the CMake version is higher than 3.24, as find_package supports the GLOBAL keyword since 3.24.
diff --git a/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt b/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt
index e34151724..79b15089d 100644--- a/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt+++ b/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt- find_library(MBEDTLS_LIBRARY mbedtls)- find_library(MBEDX509_LIBRARY mbedx509)- find_library(MBEDCRYPTO_LIBRARY mbedcrypto)+ # find_library(MBEDTLS_LIBRARY mbedtls)+ # find_library(MBEDX509_LIBRARY mbedx509)+ # find_library(MBEDCRYPTO_LIBRARY mbedcrypto)++ # set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")++ # Set the custom search path.+ set(MBEDTLS_DIR "${MBEDTLS_BUILD_PATH}/cmake")++ // NOTE (Liu): We should use 'find_package' rather than 'find_library'+ // to search for the mbedtls libraries. 'find_library' only finds a+ // library, shared or static, without any settings from the external+ // library.- set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")+ // The 'lib/tls/CMakeLists.txt' depends on the mbedtls libraries, so we set the scope to 'GLOBAL' here.+ find_package(MbedTLS GLOBAL)+ set(LWS_MBEDTLS_LIBRARIES MbedTLS::mbedcrypto MbedTLS::mbedx509 MbedTLS::mbedtls)
diff --git a/third_party/libwebsockets/BUILD.gn b/third_party/libwebsockets/BUILD.gnindex 4c89c2e2e..e6d641b9c 100644--- a/third_party/libwebsockets/BUILD.gn+++ b/third_party/libwebsockets/BUILD.gn@@ -84,6 +84,10 @@ cmake_project("websockets") { } options += [+ // The libwebsockets will use the 'MBEDTLS_BUILD_PATH' variable to set the+ // search path of 'find_package'.+ "MBEDTLS_BUILD_PATH=" + rebase_path("$root_gen_dir/cmake/mbedtls"),+
And remove #define USING_SHARED_MBEDTLS in third_party/libwebsockets/cmake/lws_config.h.in.
A command-line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, and TFTP. libcurl offers a myriad of powerful features.
Please refer to third_party/curl for details.
Patches for curl
Patch lib/CMakeLists.txt, to change the shared library name from _imp.lib to .lib.
if(WIN32) if(BUILD_SHARED_LIBS) if(MSVC) // Add "_imp" as a suffix before the extension to avoid conflicting with // the statically linked "libcurl.lib" //set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib") set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX ".lib") endif() endif()endif()
Export Curl_ws_done in lib/ws.h, because this function needs to be called to prevent memory leaks.
A C library that may be linked into a C/C++ program to produce symbolic backtraces.
⚠️ Note: We have significantly modified libbacktrace to conform to the naming conventions and folder structure of the TEN framework. Please refer to core/src/ten_utils/backtrace for details.
⚠️ Note: We have significantly modified uthash to conform to the naming conventions and folder structure of the TEN framework. Please refer to the files under core/include/ten_utils/container that have uthash mentioned in the file headers.
⚠️ Note: We have significantly modified uuid4 to conform to the naming conventions and folder structure of the TEN framework. Please refer to core/src/ten_utils/lib/sys/general/uuid.c for details.
⚠️ Note: We have significantly modified zf_log to conform to the naming conventions and folder structure of the TEN framework. Please refer to core/src/ten_utils/log for details.