Compare commits
13 Commits
feature/pr
...
v11.3.2
Author | SHA1 | Date | |
---|---|---|---|
5f2955ef78 | |||
882081536c | |||
74bb85efe9 | |||
e66437b560 | |||
97aa1f956a | |||
3f1fc6906c | |||
9bbd1f1b30 | |||
18c2b69633 | |||
178f218374 | |||
6a1aa27b5f | |||
e7f89ae529 | |||
cdeaf8e2be | |||
dbafa0aa07 |
1
.github/workflows/unittest_linux.yml
vendored
1
.github/workflows/unittest_linux.yml
vendored
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
|
1
.github/workflows/unittest_linux_asan.yml
vendored
1
.github/workflows/unittest_linux_asan.yml
vendored
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
|
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
mac_tsan_mbedtls:
|
||||
|
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
mac_tsan_openssl:
|
||||
|
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
mac_tsan_sectransport:
|
||||
|
1
.github/workflows/unittest_uwp.yml
vendored
1
.github/workflows/unittest_uwp.yml
vendored
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
uwp:
|
||||
|
1
.github/workflows/unittest_windows.yml
vendored
1
.github/workflows/unittest_windows.yml
vendored
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
windows:
|
||||
|
1
.github/workflows/unittest_windows_gcc.yml
vendored
1
.github/workflows/unittest_windows_gcc.yml
vendored
@ -3,6 +3,7 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
windows:
|
||||
|
@ -1,5 +1,8 @@
|
||||
find_path(MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h)
|
||||
|
||||
# mbedtls-3.0 changed headers files, and we need to ifdef'out a few things
|
||||
find_path(MBEDTLS_VERSION_GREATER_THAN_3 mbedtls/build_info.h)
|
||||
|
||||
find_library(MBEDTLS_LIBRARY mbedtls)
|
||||
find_library(MBEDX509_LIBRARY mbedx509)
|
||||
find_library(MBEDCRYPTO_LIBRARY mbedcrypto)
|
||||
|
@ -180,18 +180,28 @@ if (USE_TLS)
|
||||
# set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /opt/local/include/openssl-1.0)
|
||||
endif()
|
||||
|
||||
# Use OPENSSL_ROOT_DIR CMake variable if you need to use your own openssl
|
||||
find_package(OpenSSL REQUIRED)
|
||||
# This OPENSSL_FOUND check is to help find a cmake manually configured OpenSSL
|
||||
if (NOT OPENSSL_FOUND)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
endif()
|
||||
message(STATUS "OpenSSL: " ${OPENSSL_VERSION})
|
||||
|
||||
add_definitions(${OPENSSL_DEFINITIONS})
|
||||
target_include_directories(ixwebsocket PUBLIC ${OPENSSL_INCLUDE_DIR})
|
||||
target_include_directories(ixwebsocket PUBLIC $<BUILD_INTERFACE:${OPENSSL_INCLUDE_DIR}>)
|
||||
target_link_libraries(ixwebsocket ${OPENSSL_LIBRARIES})
|
||||
elseif (USE_MBED_TLS)
|
||||
message(STATUS "TLS configured to use mbedtls")
|
||||
|
||||
find_package(MbedTLS REQUIRED)
|
||||
target_include_directories(ixwebsocket PUBLIC ${MBEDTLS_INCLUDE_DIRS})
|
||||
# This MBEDTLS_FOUND check is to help find a cmake manually configured MbedTLS
|
||||
if (NOT MBEDTLS_FOUND)
|
||||
find_package(MbedTLS REQUIRED)
|
||||
|
||||
if (MBEDTLS_VERSION_GREATER_THAN_3)
|
||||
target_compile_definitions(ixwebsocket PRIVATE IXWEBSOCKET_USE_MBED_TLS_MIN_VERSION_3)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
target_include_directories(ixwebsocket PUBLIC $<BUILD_INTERFACE:${MBEDTLS_INCLUDE_DIRS}>)
|
||||
target_link_libraries(ixwebsocket ${MBEDTLS_LIBRARIES})
|
||||
elseif (USE_SECURE_TRANSPORT)
|
||||
message(STATUS "TLS configured to use secure transport")
|
||||
@ -202,9 +212,11 @@ endif()
|
||||
option(USE_ZLIB "Enable zlib support" TRUE)
|
||||
|
||||
if (USE_ZLIB)
|
||||
# Use ZLIB_ROOT CMake variable if you need to use your own zlib
|
||||
find_package(ZLIB REQUIRED)
|
||||
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||
# This ZLIB_FOUND check is to help find a cmake manually configured zlib
|
||||
if (NOT ZLIB_FOUND)
|
||||
find_package(ZLIB REQUIRED)
|
||||
endif()
|
||||
target_include_directories(ixwebsocket PUBLIC $<BUILD_INTERFACE:${ZLIB_INCLUDE_DIRS}>)
|
||||
target_link_libraries(ixwebsocket ${ZLIB_LIBRARIES})
|
||||
|
||||
target_compile_definitions(ixwebsocket PUBLIC IXWEBSOCKET_USE_ZLIB)
|
||||
@ -242,23 +254,29 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
target_compile_options(ixwebsocket PRIVATE /MP)
|
||||
endif()
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
target_include_directories(ixwebsocket PUBLIC
|
||||
$<BUILD_INTERFACE:${IXWEBSOCKET_INCLUDE_DIRS}/>
|
||||
$<INSTALL_INTERFACE:include/ixwebsocket>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/ixwebsocket>
|
||||
)
|
||||
|
||||
set_target_properties(ixwebsocket PROPERTIES PUBLIC_HEADER "${IXWEBSOCKET_HEADERS}")
|
||||
|
||||
install(TARGETS ixwebsocket
|
||||
EXPORT ixwebsocket
|
||||
ARCHIVE DESTINATION lib
|
||||
PUBLIC_HEADER DESTINATION include/ixwebsocket/
|
||||
)
|
||||
option(IXWEBSOCKET_INSTALL "Install IXWebSocket" TRUE)
|
||||
|
||||
install(EXPORT ixwebsocket
|
||||
FILE ixwebsocket-config.cmake
|
||||
NAMESPACE ixwebsocket::
|
||||
DESTINATION lib/cmake/ixwebsocket)
|
||||
if (IXWEBSOCKET_INSTALL)
|
||||
install(TARGETS ixwebsocket
|
||||
EXPORT ixwebsocket
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ixwebsocket/
|
||||
)
|
||||
|
||||
install(EXPORT ixwebsocket
|
||||
FILE ixwebsocket-config.cmake
|
||||
NAMESPACE ixwebsocket::
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ixwebsocket)
|
||||
endif()
|
||||
|
||||
if (USE_WS OR USE_TEST)
|
||||
include(FetchContent)
|
||||
|
22
appveyor.yml
22
appveyor.yml
@ -1,22 +0,0 @@
|
||||
image:
|
||||
- Visual Studio 2017
|
||||
|
||||
install:
|
||||
- cd C:\Tools\vcpkg
|
||||
- git pull
|
||||
- .\bootstrap-vcpkg.bat
|
||||
- cd %APPVEYOR_BUILD_FOLDER%
|
||||
- cmd: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||
- vcpkg install zlib:x64-windows
|
||||
- vcpkg install mbedtls:x64-windows
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DUSE_WS=1 -DUSE_TEST=1 -DUSE_TLS=1 -G"NMake Makefiles" ..
|
||||
- nmake
|
||||
- cd ..
|
||||
- cd test
|
||||
- ..\build\test\ixwebsocket_unittest.exe
|
||||
|
||||
cache: c:\tools\vcpkg\installed\
|
||||
|
||||
build: off
|
@ -2,6 +2,18 @@
|
||||
|
||||
All changes to this project will be documented in this file.
|
||||
|
||||
## [11.3.2] - 2021-11-24
|
||||
|
||||
(server) Add getters for basic Servers properties (like port, host, etc...) (#327) + fix one compiler warning
|
||||
|
||||
## [11.3.1] - 2021-10-22
|
||||
|
||||
(library/cmake) Compatible with MbedTLS 3 + fix a bug on Windows where the incorrect remote port is computed (#320)
|
||||
|
||||
## [11.3.0] - 2021-09-20
|
||||
|
||||
(library/cmake) Only find OpenSSL, MbedTLS, zlib if they have not already been found, make CMake install optional (#317) + Use GNUInstallDirs in cmake (#318)
|
||||
|
||||
## [11.2.10] - 2021-07-27
|
||||
|
||||
(ws) bump CLI command line parsing library from 1.8 to 2.0
|
||||
|
@ -20,7 +20,7 @@ Options for building:
|
||||
* `-DBUILD_SHARED_LIBS=ON` will build the unittest as a shared libary instead of a static library, which is the default
|
||||
* `-DUSE_ZLIB=1` will enable zlib support, required for http client + server + websocket per message deflate extension
|
||||
* `-DUSE_TLS=1` will enable TLS support
|
||||
* `-DUSE_OPEN_SSL=1` will use [openssl](https://www.openssl.org/) for the TLS support (default on Linux and Windows)
|
||||
* `-DUSE_OPEN_SSL=1` will use [openssl](https://www.openssl.org/) for the TLS support (default on Linux and Windows). When using a custom version of openssl (say a prebuilt version, odd runtime problems can happens, as in #319, and special cmake trickery will be required (see this [comment](https://github.com/machinezone/IXWebSocket/issues/175#issuecomment-620231032))
|
||||
* `-DUSE_MBED_TLS=1` will use [mbedlts](https://tls.mbed.org/) for the TLS support
|
||||
* `-DUSE_WS=1` will build the ws interactive command line tool
|
||||
* `-DUSE_TEST=1` will build the unittest
|
||||
|
@ -226,4 +226,10 @@ namespace ix
|
||||
200, "OK", HttpErrorCode::Ok, headers, std::string("OK"));
|
||||
});
|
||||
}
|
||||
|
||||
int HttpServer::getTimeoutSecs()
|
||||
{
|
||||
return _timeoutSecs;
|
||||
}
|
||||
|
||||
} // namespace ix
|
||||
|
@ -40,6 +40,7 @@ namespace ix
|
||||
|
||||
void makeDebugServer();
|
||||
|
||||
int getTimeoutSecs();
|
||||
private:
|
||||
// Member variables
|
||||
OnConnectionCallback _onConnectionCallback;
|
||||
|
@ -5,6 +5,8 @@
|
||||
*/
|
||||
|
||||
#include "IXNetSystem.h"
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
|
||||
namespace ix
|
||||
{
|
||||
@ -278,4 +280,17 @@ namespace ix
|
||||
#endif
|
||||
}
|
||||
|
||||
// Convert network bytes to host bytes. Copied from the ASIO library
|
||||
unsigned short network_to_host_short(unsigned short value)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
|
||||
unsigned short result = (static_cast<unsigned short>(value_p[0]) << 8)
|
||||
| static_cast<unsigned short>(value_p[1]);
|
||||
return result;
|
||||
#else // defined(_WIN32)
|
||||
return ntohs(value);
|
||||
#endif // defined(_WIN32)
|
||||
}
|
||||
|
||||
} // namespace ix
|
||||
|
@ -34,8 +34,8 @@
|
||||
// Define our own poll on Windows, as a wrapper on top of select
|
||||
typedef unsigned long int nfds_t;
|
||||
|
||||
// mingw does not know about poll so mock it
|
||||
#if defined(__GNUC__)
|
||||
// pollfd is not defined by some versions of mingw64 since _WIN32_WINNT is too low
|
||||
#if _WIN32_WINNT < 0x0600
|
||||
struct pollfd
|
||||
{
|
||||
int fd; /* file descriptor */
|
||||
@ -81,4 +81,6 @@ namespace ix
|
||||
|
||||
const char* inet_ntop(int af, const void* src, char* dst, socklen_t size);
|
||||
int inet_pton(int af, const char* src, void* dst);
|
||||
|
||||
unsigned short network_to_host_short(unsigned short value);
|
||||
} // namespace ix
|
||||
|
@ -132,7 +132,11 @@ namespace ix
|
||||
errMsg = "Cannot parse cert file '" + _tlsOptions.certFile + "'";
|
||||
return false;
|
||||
}
|
||||
#ifdef IXWEBSOCKET_USE_MBED_TLS_MIN_VERSION_3
|
||||
if (mbedtls_pk_parse_keyfile(&_pkey, _tlsOptions.keyFile.c_str(), "", mbedtls_ctr_drbg_random, &_ctr_drbg) < 0)
|
||||
#else
|
||||
if (mbedtls_pk_parse_keyfile(&_pkey, _tlsOptions.keyFile.c_str(), "") < 0)
|
||||
#endif
|
||||
{
|
||||
errMsg = "Cannot parse key file '" + _tlsOptions.keyFile + "'";
|
||||
return false;
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <mbedtls/debug.h>
|
||||
#include <mbedtls/entropy.h>
|
||||
#include <mbedtls/error.h>
|
||||
#include <mbedtls/net.h>
|
||||
#include <mbedtls/net_sockets.h>
|
||||
#include <mbedtls/platform.h>
|
||||
#include <mbedtls/x509.h>
|
||||
#include <mbedtls/x509_crt.h>
|
||||
|
@ -351,7 +351,7 @@ namespace ix
|
||||
continue;
|
||||
}
|
||||
|
||||
remotePort = client.sin_port;
|
||||
remotePort = ix::network_to_host_short(client.sin_port);
|
||||
remoteIp = remoteIp4;
|
||||
}
|
||||
else // AF_INET6
|
||||
@ -371,7 +371,7 @@ namespace ix
|
||||
continue;
|
||||
}
|
||||
|
||||
remotePort = client.sin_port;
|
||||
remotePort = ix::network_to_host_short(client.sin_port);
|
||||
remoteIp = remoteIp6;
|
||||
}
|
||||
|
||||
@ -461,4 +461,29 @@ namespace ix
|
||||
// so wake up the thread responsible for that
|
||||
_conditionVariableGC.notify_one();
|
||||
}
|
||||
|
||||
int SocketServer::getPort()
|
||||
{
|
||||
return _port;
|
||||
}
|
||||
|
||||
std::string SocketServer::getHost()
|
||||
{
|
||||
return _host;
|
||||
}
|
||||
|
||||
int SocketServer::getBacklog()
|
||||
{
|
||||
return _backlog;
|
||||
}
|
||||
|
||||
std::size_t SocketServer::getMaxConnections()
|
||||
{
|
||||
return _maxConnections;
|
||||
}
|
||||
|
||||
int SocketServer::getAddressFamily()
|
||||
{
|
||||
return _addressFamily;
|
||||
}
|
||||
} // namespace ix
|
||||
|
@ -60,6 +60,11 @@ namespace ix
|
||||
|
||||
void setTLSOptions(const SocketTLSOptions& socketTLSOptions);
|
||||
|
||||
int getPort();
|
||||
std::string getHost();
|
||||
int getBacklog();
|
||||
std::size_t getMaxConnections();
|
||||
int getAddressFamily();
|
||||
protected:
|
||||
// Logging
|
||||
void logError(const std::string& str);
|
||||
|
@ -385,7 +385,7 @@ namespace ix
|
||||
size_t wireSize,
|
||||
bool decompressionError,
|
||||
WebSocketTransport::MessageKind messageKind) {
|
||||
WebSocketMessageType webSocketMessageType;
|
||||
WebSocketMessageType webSocketMessageType{WebSocketMessageType::Error};
|
||||
switch (messageKind)
|
||||
{
|
||||
case WebSocketTransport::MessageKind::MSG_TEXT:
|
||||
|
@ -211,4 +211,19 @@ namespace ix
|
||||
start();
|
||||
return true;
|
||||
}
|
||||
|
||||
int WebSocketServer::getHandshakeTimeoutSecs()
|
||||
{
|
||||
return _handshakeTimeoutSecs;
|
||||
}
|
||||
|
||||
bool WebSocketServer::isPongEnabled()
|
||||
{
|
||||
return _enablePong;
|
||||
}
|
||||
|
||||
bool WebSocketServer::isPerMessageDeflateEnabled()
|
||||
{
|
||||
return _enablePerMessageDeflate;
|
||||
}
|
||||
} // namespace ix
|
||||
|
@ -52,6 +52,9 @@ namespace ix
|
||||
|
||||
const static int kDefaultHandShakeTimeoutSecs;
|
||||
|
||||
int getHandshakeTimeoutSecs();
|
||||
bool isPongEnabled();
|
||||
bool isPerMessageDeflateEnabled();
|
||||
private:
|
||||
// Member variables
|
||||
int _handshakeTimeoutSecs;
|
||||
|
@ -6,4 +6,4 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define IX_WEBSOCKET_VERSION "11.2.10"
|
||||
#define IX_WEBSOCKET_VERSION "11.3.2"
|
||||
|
2
ws/package-lock.json
generated
2
ws/package-lock.json
generated
@ -8,7 +8,7 @@
|
||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
||||
},
|
||||
"ws": {
|
||||
"version": "6.2.0",
|
||||
"version": ">=6.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz",
|
||||
"integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==",
|
||||
"requires": {
|
||||
|
Reference in New Issue
Block a user