From 0813eb1788e6660c0b0b7de1463c21d44eafc577 Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Tue, 16 Mar 2021 09:56:08 -0700 Subject: [PATCH] mention disablePerMessageDeflate in the doc --- docs/CHANGELOG.md | 4 ++++ docs/usage.md | 8 ++++++++ ixwebsocket/IXNetSystem.cpp | 4 ++-- ixwebsocket/IXNetSystem.h | 23 ++++++++++++----------- ixwebsocket/IXWebSocket.cpp | 7 +++++-- ixwebsocket/IXWebSocket.h | 4 +++- ixwebsocket/IXWebSocketHandshake.cpp | 5 +++-- ixwebsocket/IXWebSocketHandshake.h | 2 +- ixwebsocket/IXWebSocketServer.cpp | 3 ++- ixwebsocket/IXWebSocketTransport.cpp | 5 +++-- ixwebsocket/IXWebSocketTransport.h | 4 +++- ixwebsocket/IXWebSocketVersion.h | 2 +- 12 files changed, 47 insertions(+), 24 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d542797c..512f0776 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,10 @@ All changes to this project will be documented in this file. +## [11.1.0] - 2021-03-16 + +(ixwebsocket) Use LEAN_AND_MEAN Windows define to help with undefined link error when building a DLL. Support websocket server disablePerMessageDeflate option correctly. + ## [11.0.9] - 2021-03-07 (ixwebsocket) Expose setHandshakeTimeout method diff --git a/docs/usage.md b/docs/usage.md index 6c3ba7a2..655cba07 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -343,6 +343,10 @@ if (!res.first) return 1; } +// Per message deflate connection is enabled by default. It can be disabled +// which might be helpful when running on low power devices such as a Rasbery Pi +server.disablePerMessageDeflate(); + // Run the server in the background. Server can be stoped by calling server.stop() server.start(); @@ -410,6 +414,10 @@ if (!res.first) return 1; } +// Per message deflate connection is enabled by default. It can be disabled +// which might be helpful when running on low power devices such as a Rasbery Pi +server.disablePerMessageDeflate(); + // Run the server in the background. Server can be stoped by calling server.stop() server.start(); diff --git a/ixwebsocket/IXNetSystem.cpp b/ixwebsocket/IXNetSystem.cpp index 2a767c1a..d9ad45b2 100644 --- a/ixwebsocket/IXNetSystem.cpp +++ b/ixwebsocket/IXNetSystem.cpp @@ -8,12 +8,12 @@ // mingw does not have those #if defined(_WIN32) && defined(__GNUC__) -const char * inet_ntop(int af, const void * restrict src, char * restrict dst, socklen_t size) +const char* inet_ntop(int af, const void* restrict src, char* restrict dst, socklen_t size) { return nullptr; } -int inet_pton(int af, const char * restrict src, void * restrict dst) +int inet_pton(int af, const char* restrict src, void* restrict dst) { return -1; } diff --git a/ixwebsocket/IXNetSystem.h b/ixwebsocket/IXNetSystem.h index f1361d10..948286ac 100644 --- a/ixwebsocket/IXNetSystem.h +++ b/ixwebsocket/IXNetSystem.h @@ -23,17 +23,18 @@ typedef unsigned long int nfds_t; // mingw does not know about poll so mock it #if defined(__GNUC__) -struct pollfd { - int fd; /* file descriptor */ - short events; /* requested events */ - short revents; /* returned events */ +struct pollfd +{ + int fd; /* file descriptor */ + short events; /* requested events */ + short revents; /* returned events */ }; -#define POLLIN 0x001 /* There is data to read. */ -#define POLLOUT 0x004 /* Writing now will not block. */ -#define POLLERR 0x008 /* Error condition. */ -#define POLLHUP 0x010 /* Hung up. */ -#define POLLNVAL 0x020 /* Invalid polling request. */ +#define POLLIN 0x001 /* There is data to read. */ +#define POLLOUT 0x004 /* Writing now will not block. */ +#define POLLERR 0x008 /* Error condition. */ +#define POLLHUP 0x010 /* Hung up. */ +#define POLLNVAL 0x020 /* Invalid polling request. */ #endif #else @@ -54,8 +55,8 @@ struct pollfd { // mingw does not have those #if defined(_WIN32) && defined(__GNUC__) -const char * inet_ntop(int af, const void * restrict src, char * restrict dst, socklen_t size); -int inet_pton(int af, const char * restrict src, void * restrict dst); +const char* inet_ntop(int af, const void* restrict src, char* restrict dst, socklen_t size); +int inet_pton(int af, const char* restrict src, void* restrict dst); #endif namespace ix diff --git a/ixwebsocket/IXWebSocket.cpp b/ixwebsocket/IXWebSocket.cpp index bfe59564..490169dc 100644 --- a/ixwebsocket/IXWebSocket.cpp +++ b/ixwebsocket/IXWebSocket.cpp @@ -218,7 +218,9 @@ namespace ix return status; } - WebSocketInitResult WebSocket::connectToSocket(std::unique_ptr socket, int timeoutSecs) + WebSocketInitResult WebSocket::connectToSocket(std::unique_ptr socket, + int timeoutSecs, + bool enablePerMessageDeflate) { { std::lock_guard lock(_configMutex); @@ -226,7 +228,8 @@ namespace ix _perMessageDeflateOptions, _socketTLSOptions, _enablePong, _pingIntervalSecs); } - WebSocketInitResult status = _ws.connectToSocket(std::move(socket), timeoutSecs); + WebSocketInitResult status = + _ws.connectToSocket(std::move(socket), timeoutSecs, enablePerMessageDeflate); if (!status.success) { return status; diff --git a/ixwebsocket/IXWebSocket.h b/ixwebsocket/IXWebSocket.h index 5a6afa3d..2fec734e 100644 --- a/ixwebsocket/IXWebSocket.h +++ b/ixwebsocket/IXWebSocket.h @@ -115,7 +115,9 @@ namespace ix static void invokeTrafficTrackerCallback(size_t size, bool incoming); // Server - WebSocketInitResult connectToSocket(std::unique_ptr, int timeoutSecs); + WebSocketInitResult connectToSocket(std::unique_ptr, + int timeoutSecs, + bool enablePerMessageDeflate); WebSocketTransport _ws; diff --git a/ixwebsocket/IXWebSocketHandshake.cpp b/ixwebsocket/IXWebSocketHandshake.cpp index 51497630..8b2735da 100644 --- a/ixwebsocket/IXWebSocketHandshake.cpp +++ b/ixwebsocket/IXWebSocketHandshake.cpp @@ -241,7 +241,8 @@ namespace ix return WebSocketInitResult(true, status, "", headers, path); } - WebSocketInitResult WebSocketHandshake::serverHandshake(int timeoutSecs) + WebSocketInitResult WebSocketHandshake::serverHandshake(int timeoutSecs, + bool enablePerMessageDeflate) { _requestInitCancellation = false; @@ -338,7 +339,7 @@ namespace ix WebSocketPerMessageDeflateOptions webSocketPerMessageDeflateOptions(header); // If the client has requested that extension, - if (webSocketPerMessageDeflateOptions.enabled()) + if (webSocketPerMessageDeflateOptions.enabled() && enablePerMessageDeflate) { _enablePerMessageDeflate = true; diff --git a/ixwebsocket/IXWebSocketHandshake.h b/ixwebsocket/IXWebSocketHandshake.h index 0c8ed289..0a275e43 100644 --- a/ixwebsocket/IXWebSocketHandshake.h +++ b/ixwebsocket/IXWebSocketHandshake.h @@ -35,7 +35,7 @@ namespace ix int port, int timeoutSecs); - WebSocketInitResult serverHandshake(int timeoutSecs); + WebSocketInitResult serverHandshake(int timeoutSecs, bool enablePerMessageDeflate); private: std::string genRandomString(const int len); diff --git a/ixwebsocket/IXWebSocketServer.cpp b/ixwebsocket/IXWebSocketServer.cpp index cc94dadd..a3136b6f 100644 --- a/ixwebsocket/IXWebSocketServer.cpp +++ b/ixwebsocket/IXWebSocketServer.cpp @@ -129,7 +129,8 @@ namespace ix _clients.insert(webSocket); } - auto status = webSocket->connectToSocket(std::move(socket), _handshakeTimeoutSecs); + auto status = webSocket->connectToSocket( + std::move(socket), _handshakeTimeoutSecs, _enablePerMessageDeflate); if (status.success) { // Process incoming messages and execute callbacks diff --git a/ixwebsocket/IXWebSocketTransport.cpp b/ixwebsocket/IXWebSocketTransport.cpp index 1133ea30..8537a95e 100644 --- a/ixwebsocket/IXWebSocketTransport.cpp +++ b/ixwebsocket/IXWebSocketTransport.cpp @@ -169,7 +169,8 @@ namespace ix // Server WebSocketInitResult WebSocketTransport::connectToSocket(std::unique_ptr socket, - int timeoutSecs) + int timeoutSecs, + bool enablePerMessageDeflate) { std::lock_guard lock(_socketMutex); @@ -186,7 +187,7 @@ namespace ix _perMessageDeflateOptions, _enablePerMessageDeflate); - auto result = webSocketHandshake.serverHandshake(timeoutSecs); + auto result = webSocketHandshake.serverHandshake(timeoutSecs, enablePerMessageDeflate); if (result.success) { setReadyState(ReadyState::OPEN); diff --git a/ixwebsocket/IXWebSocketTransport.h b/ixwebsocket/IXWebSocketTransport.h index 4ebda2f6..777e29c0 100644 --- a/ixwebsocket/IXWebSocketTransport.h +++ b/ixwebsocket/IXWebSocketTransport.h @@ -83,7 +83,9 @@ namespace ix int timeoutSecs); // Server - WebSocketInitResult connectToSocket(std::unique_ptr socket, int timeoutSecs); + WebSocketInitResult connectToSocket(std::unique_ptr socket, + int timeoutSecs, + bool enablePerMessageDeflate); PollResult poll(); WebSocketSendInfo sendBinary(const std::string& message, diff --git a/ixwebsocket/IXWebSocketVersion.h b/ixwebsocket/IXWebSocketVersion.h index 9eca590e..d96e2095 100644 --- a/ixwebsocket/IXWebSocketVersion.h +++ b/ixwebsocket/IXWebSocketVersion.h @@ -6,4 +6,4 @@ #pragma once -#define IX_WEBSOCKET_VERSION "11.0.9" +#define IX_WEBSOCKET_VERSION "11.1.0"