Compare commits
10 Commits
feature/te
...
v11.4.4
Author | SHA1 | Date | |
---|---|---|---|
688af99747 | |||
397bb5d18a | |||
f79c64ae97 | |||
bc765e73a3 | |||
dfa10df5ae | |||
eb9a7bed76 | |||
d20864d7d1 | |||
f184a7adef | |||
dc7b986e10 | |||
1e3560014f |
@ -6,7 +6,7 @@
|
||||
cmake_minimum_required(VERSION 3.4.1...3.17.2)
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
|
||||
|
||||
project(ixwebsocket C CXX)
|
||||
project(ixwebsocket LANGUAGES C CXX VERSION 11.4.4)
|
||||
|
||||
set (CMAKE_CXX_STANDARD 11)
|
||||
set (CXX_STANDARD_REQUIRED ON)
|
||||
@ -136,6 +136,7 @@ if (USE_TLS)
|
||||
else() # default to OpenSSL on all other platforms
|
||||
if (NOT USE_MBED_TLS) # Unless mbedtls is requested
|
||||
set(USE_OPEN_SSL ON)
|
||||
set(requires "openssl")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -165,9 +166,9 @@ if(BUILD_SHARED_LIBS)
|
||||
${IXWEBSOCKET_SOURCES}
|
||||
${IXWEBSOCKET_HEADERS}
|
||||
)
|
||||
|
||||
|
||||
# Set library version
|
||||
set_target_properties(ixwebsocket PROPERTIES VERSION 11.3.2)
|
||||
set_target_properties(ixwebsocket PROPERTIES VERSION ${CMAKE_PROJECT_VERSION})
|
||||
|
||||
else()
|
||||
# Static library
|
||||
@ -287,9 +288,13 @@ if (IXWEBSOCKET_INSTALL)
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ixwebsocket/
|
||||
)
|
||||
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/ixwebsocket-config.cmake.in" "${CMAKE_BINARY_DIR}/ixwebsocket-config.cmake" @ONLY)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/ixwebsocket-config.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/ixwebsocket")
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/ixwebsocket-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ixwebsocket-config.cmake" @ONLY)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ixwebsocket-config.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/ixwebsocket")
|
||||
|
||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/ixwebsocket.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/ixwebsocket.pc" @ONLY)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ixwebsocket.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
|
||||
install(EXPORT ixwebsocket
|
||||
FILE ixwebsocket-targets.cmake
|
||||
NAMESPACE ixwebsocket::
|
||||
|
@ -107,6 +107,7 @@ If your company or project is using this library, feel free to open an issue or
|
||||
- [Teleport](http://teleportconnect.com/), Teleport is your own personal remote robot avatar
|
||||
- [Abaddon](https://github.com/uowuo/abaddon), An alternative Discord client made with C++/gtkmm
|
||||
- [NovaCoin](https://github.com/novacoin-project/novacoin), a hybrid scrypt PoW + PoS based cryptocurrency.
|
||||
- [Candy](https://github.com/lanthora/candy), A WebSocket and TUN based VPN for Linux
|
||||
|
||||
## Alternative libraries
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
All changes to this project will be documented in this file.
|
||||
|
||||
## [11.4.4] - 2023-06-05
|
||||
|
||||
## [11.4.3] - 2022-05-13
|
||||
|
||||
Set shorter thread names
|
||||
|
11
ixwebsocket.pc.in
Normal file
11
ixwebsocket.pc.in
Normal file
@ -0,0 +1,11 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: ixwebsocket
|
||||
Description: websocket and http client and server library, with TLS support and very few dependencies
|
||||
Version: @CMAKE_PROJECT_VERSION@
|
||||
Libs: -L${libdir} -lixwebsocket
|
||||
Cflags: -I${includedir}
|
||||
Requires: @requires@
|
@ -209,6 +209,12 @@ namespace ix
|
||||
ss << "User-Agent: " << userAgent() << "\r\n";
|
||||
}
|
||||
|
||||
// Set an origin header if missing
|
||||
if (args->extraHeaders.find("Origin") == args->extraHeaders.end())
|
||||
{
|
||||
ss << "Origin: " << protocol << "://" << host << ":" << port << "\r\n";
|
||||
}
|
||||
|
||||
if (verb == kPost || verb == kPut || verb == kPatch || _forceBody)
|
||||
{
|
||||
// Set request compression header
|
||||
|
@ -8,6 +8,10 @@
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
|
@ -219,6 +219,10 @@ namespace ix
|
||||
if (_gcThread.joinable())
|
||||
{
|
||||
_stopGc = true;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock{ _conditionVariableMutexGC };
|
||||
_canContinueGC = true;
|
||||
}
|
||||
_conditionVariableGC.notify_one();
|
||||
_gcThread.join();
|
||||
_stopGc = false;
|
||||
@ -451,7 +455,10 @@ namespace ix
|
||||
if (!_stopGc)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(_conditionVariableMutexGC);
|
||||
_conditionVariableGC.wait(lock);
|
||||
if(!_canContinueGC) {
|
||||
_conditionVariableGC.wait(lock, [this]{ return _canContinueGC; });
|
||||
}
|
||||
_canContinueGC = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -465,6 +472,10 @@ namespace ix
|
||||
{
|
||||
// a connection got terminated, we can run the connection thread GC,
|
||||
// so wake up the thread responsible for that
|
||||
{
|
||||
std::lock_guard<std::mutex> lock{ _conditionVariableMutexGC };
|
||||
_canContinueGC = true;
|
||||
}
|
||||
_conditionVariableGC.notify_one();
|
||||
}
|
||||
|
||||
|
@ -126,5 +126,6 @@ namespace ix
|
||||
// as a connection
|
||||
std::condition_variable _conditionVariableGC;
|
||||
std::mutex _conditionVariableMutexGC;
|
||||
bool _canContinueGC{ false };
|
||||
};
|
||||
} // namespace ix
|
||||
|
@ -87,6 +87,7 @@ namespace ix
|
||||
WebSocketInitResult WebSocketHandshake::clientHandshake(
|
||||
const std::string& url,
|
||||
const WebSocketHttpHeaders& extraHeaders,
|
||||
const std::string& protocol,
|
||||
const std::string& host,
|
||||
const std::string& path,
|
||||
int port,
|
||||
@ -125,6 +126,12 @@ namespace ix
|
||||
ss << "User-Agent: " << userAgent() << "\r\n";
|
||||
}
|
||||
|
||||
// Set an origin header if missing
|
||||
if (extraHeaders.find("Origin") == extraHeaders.end())
|
||||
{
|
||||
ss << "Origin: " << protocol << "://" << host << ":" << port << "\r\n";
|
||||
}
|
||||
|
||||
for (auto& it : extraHeaders)
|
||||
{
|
||||
ss << it.first << ": " << it.second << "\r\n";
|
||||
|
@ -31,6 +31,7 @@ namespace ix
|
||||
|
||||
WebSocketInitResult clientHandshake(const std::string& url,
|
||||
const WebSocketHttpHeaders& extraHeaders,
|
||||
const std::string& protocol,
|
||||
const std::string& host,
|
||||
const std::string& path,
|
||||
int port,
|
||||
|
@ -71,10 +71,10 @@ namespace ix
|
||||
, _closingTimePoint(std::chrono::steady_clock::now())
|
||||
, _enablePong(kDefaultEnablePong)
|
||||
, _pingIntervalSecs(kDefaultPingIntervalSecs)
|
||||
, _pongReceived(false)
|
||||
, _setCustomMessage(false)
|
||||
, _kPingMessage("ixwebsocket::heartbeat")
|
||||
, _pingType(SendMessageKind::Ping)
|
||||
, _pongReceived(false)
|
||||
, _pingCount(0)
|
||||
, _lastSendPingTimePoint(std::chrono::steady_clock::now())
|
||||
{
|
||||
@ -140,7 +140,7 @@ namespace ix
|
||||
_enablePerMessageDeflate);
|
||||
|
||||
result = webSocketHandshake.clientHandshake(
|
||||
remoteUrl, headers, host, path, port, timeoutSecs);
|
||||
remoteUrl, headers, protocol, host, path, port, timeoutSecs);
|
||||
|
||||
if (result.http_status >= 300 && result.http_status < 400)
|
||||
{
|
||||
@ -700,6 +700,7 @@ namespace ix
|
||||
if (_readyState != ReadyState::CLOSING)
|
||||
{
|
||||
// send back the CLOSE frame
|
||||
setReadyState(ReadyState::CLOSING);
|
||||
sendCloseFrame(code, reason);
|
||||
|
||||
wakeUpFromPoll(SelectInterrupt::kCloseRequest);
|
||||
@ -1072,7 +1073,10 @@ namespace ix
|
||||
else if (ret <= 0)
|
||||
{
|
||||
closeSocket();
|
||||
setReadyState(ReadyState::CLOSED);
|
||||
if (_readyState != ReadyState::CLOSING)
|
||||
{
|
||||
setReadyState(ReadyState::CLOSED);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
@ -28,7 +28,6 @@
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
|
||||
namespace ix
|
||||
{
|
||||
@ -157,7 +156,7 @@ namespace ix
|
||||
// Contains all messages that were fetched in the last socket read.
|
||||
// This could be a mix of control messages (Close, Ping, etc...) and
|
||||
// data messages. That buffer is resized
|
||||
std::deque<uint8_t> _rxbuf;
|
||||
std::vector<uint8_t> _rxbuf;
|
||||
|
||||
// Contains all messages that are waiting to be sent
|
||||
std::vector<uint8_t> _txbuf;
|
||||
|
@ -6,4 +6,4 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define IX_WEBSOCKET_VERSION "11.4.3"
|
||||
#define IX_WEBSOCKET_VERSION "11.4.4"
|
||||
|
@ -13,16 +13,24 @@ all: brew
|
||||
|
||||
install: brew
|
||||
|
||||
-DCMAKE_INSTALL_PREFIX=/opt/homebrew
|
||||
|
||||
# Use -DCMAKE_INSTALL_PREFIX= to install into another location
|
||||
# on osx it is good practice to make /usr/local user writable
|
||||
# sudo chown -R `whoami`/staff /usr/local
|
||||
#
|
||||
# Those days (since Apple Silicon mac shipped), on macOS homebrew installs in /opt/homebrew, and /usr/local is readonly
|
||||
#
|
||||
# Release, Debug, MinSizeRel, RelWithDebInfo are the build types
|
||||
#
|
||||
# Default rule does not use python as that requires first time users to have Python3 installed
|
||||
#
|
||||
brew:
|
||||
ifeq ($(shell uname),Darwin)
|
||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_PREFIX=/opt/homebrew -DCMAKE_UNITY_BUILD=OFF -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. ; ninja install)
|
||||
else
|
||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=OFF -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. ; ninja install)
|
||||
endif
|
||||
|
||||
# Docker default target. We've had problems with OpenSSL and TLS 1.3 (on the
|
||||
# server side ?) and I can't work-around it easily, so we're using mbedtls on
|
||||
|
@ -16,7 +16,7 @@ set (TEST_TARGET_NAMES
|
||||
IXWebSocketServerTest
|
||||
IXWebSocketTestConnectionDisconnection
|
||||
IXUrlParserTest
|
||||
IXHttpClientTest
|
||||
# IXHttpClientTest ## FIXME httpbin.org does not seem normal
|
||||
IXUnityBuildsTest
|
||||
IXHttpTest
|
||||
IXDNSLookupTest
|
||||
@ -24,14 +24,13 @@ set (TEST_TARGET_NAMES
|
||||
# IXWebSocketBroadcastTest ## FIXME was depending on cobra / take a broadcast server from ws
|
||||
IXStrCaseCompareTest
|
||||
IXExponentialBackoffTest
|
||||
IXWebSocketCloseTest
|
||||
)
|
||||
|
||||
# Some unittest don't work on windows yet
|
||||
# Windows without TLS does not have hmac yet
|
||||
if (UNIX)
|
||||
list(APPEND TEST_TARGET_NAMES
|
||||
IXWebSocketCloseTest
|
||||
|
||||
# Fail on Windows in CI probably because the pathing is wrong and
|
||||
# some resource files cannot be found
|
||||
IXHttpServerTest
|
||||
|
Reference in New Issue
Block a user