(websocket) reset per-message deflate codec everytime we connect to a server/client
This commit is contained in:
		@@ -1,6 +1,10 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
All changes to this project will be documented in this file.
 | 
					All changes to this project will be documented in this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [9.0.0] - 2020-03-23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(websocket) reset per-message deflate codec everytime we connect to a server/client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [8.3.4] - 2020-03-23
 | 
					## [8.3.4] - 2020-03-23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(websocket) fix #167, a long standing issue with sending empty messages with per-message deflate extension (and hopefully other zlib bug)
 | 
					(websocket) fix #167, a long standing issue with sending empty messages with per-message deflate extension (and hopefully other zlib bug)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace ix
 | 
				
			|||||||
    WebSocketHandshake::WebSocketHandshake(
 | 
					    WebSocketHandshake::WebSocketHandshake(
 | 
				
			||||||
        std::atomic<bool>& requestInitCancellation,
 | 
					        std::atomic<bool>& requestInitCancellation,
 | 
				
			||||||
        std::shared_ptr<Socket> socket,
 | 
					        std::shared_ptr<Socket> socket,
 | 
				
			||||||
        WebSocketPerMessageDeflate& perMessageDeflate,
 | 
					        WebSocketPerMessageDeflatePtr& perMessageDeflate,
 | 
				
			||||||
        WebSocketPerMessageDeflateOptions& perMessageDeflateOptions,
 | 
					        WebSocketPerMessageDeflateOptions& perMessageDeflateOptions,
 | 
				
			||||||
        std::atomic<bool>& enablePerMessageDeflate)
 | 
					        std::atomic<bool>& enablePerMessageDeflate)
 | 
				
			||||||
        : _requestInitCancellation(requestInitCancellation)
 | 
					        : _requestInitCancellation(requestInitCancellation)
 | 
				
			||||||
@@ -230,7 +230,7 @@ namespace ix
 | 
				
			|||||||
                _enablePerMessageDeflate = false;
 | 
					                _enablePerMessageDeflate = false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // Otherwise try to initialize the deflate engine (zlib)
 | 
					            // Otherwise try to initialize the deflate engine (zlib)
 | 
				
			||||||
            else if (!_perMessageDeflate.init(webSocketPerMessageDeflateOptions))
 | 
					            else if (!_perMessageDeflate->init(webSocketPerMessageDeflateOptions))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return WebSocketInitResult(
 | 
					                return WebSocketInitResult(
 | 
				
			||||||
                    false, 0, "Failed to initialize per message deflate engine");
 | 
					                    false, 0, "Failed to initialize per message deflate engine");
 | 
				
			||||||
@@ -341,7 +341,7 @@ namespace ix
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            _enablePerMessageDeflate = true;
 | 
					            _enablePerMessageDeflate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!_perMessageDeflate.init(webSocketPerMessageDeflateOptions))
 | 
					            if (!_perMessageDeflate->init(webSocketPerMessageDeflateOptions))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return WebSocketInitResult(
 | 
					                return WebSocketInitResult(
 | 
				
			||||||
                    false, 0, "Failed to initialize per message deflate engine");
 | 
					                    false, 0, "Failed to initialize per message deflate engine");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ namespace ix
 | 
				
			|||||||
    public:
 | 
					    public:
 | 
				
			||||||
        WebSocketHandshake(std::atomic<bool>& requestInitCancellation,
 | 
					        WebSocketHandshake(std::atomic<bool>& requestInitCancellation,
 | 
				
			||||||
                           std::shared_ptr<Socket> _socket,
 | 
					                           std::shared_ptr<Socket> _socket,
 | 
				
			||||||
                           WebSocketPerMessageDeflate& perMessageDeflate,
 | 
					                           WebSocketPerMessageDeflatePtr& perMessageDeflate,
 | 
				
			||||||
                           WebSocketPerMessageDeflateOptions& perMessageDeflateOptions,
 | 
					                           WebSocketPerMessageDeflateOptions& perMessageDeflateOptions,
 | 
				
			||||||
                           std::atomic<bool>& enablePerMessageDeflate);
 | 
					                           std::atomic<bool>& enablePerMessageDeflate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,7 +47,7 @@ namespace ix
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        std::atomic<bool>& _requestInitCancellation;
 | 
					        std::atomic<bool>& _requestInitCancellation;
 | 
				
			||||||
        std::shared_ptr<Socket> _socket;
 | 
					        std::shared_ptr<Socket> _socket;
 | 
				
			||||||
        WebSocketPerMessageDeflate& _perMessageDeflate;
 | 
					        WebSocketPerMessageDeflatePtr& _perMessageDeflate;
 | 
				
			||||||
        WebSocketPerMessageDeflateOptions& _perMessageDeflateOptions;
 | 
					        WebSocketPerMessageDeflateOptions& _perMessageDeflateOptions;
 | 
				
			||||||
        std::atomic<bool>& _enablePerMessageDeflate;
 | 
					        std::atomic<bool>& _enablePerMessageDeflate;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,4 +57,6 @@ namespace ix
 | 
				
			|||||||
        std::unique_ptr<WebSocketPerMessageDeflateCompressor> _compressor;
 | 
					        std::unique_ptr<WebSocketPerMessageDeflateCompressor> _compressor;
 | 
				
			||||||
        std::unique_ptr<WebSocketPerMessageDeflateDecompressor> _decompressor;
 | 
					        std::unique_ptr<WebSocketPerMessageDeflateDecompressor> _decompressor;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using WebSocketPerMessageDeflatePtr = std::unique_ptr<WebSocketPerMessageDeflate>;
 | 
				
			||||||
} // namespace ix
 | 
					} // namespace ix
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,6 +117,7 @@ namespace ix
 | 
				
			|||||||
        std::string errorMsg;
 | 
					        std::string errorMsg;
 | 
				
			||||||
        bool tls = protocol == "wss";
 | 
					        bool tls = protocol == "wss";
 | 
				
			||||||
        _socket = createSocket(tls, -1, errorMsg, _socketTLSOptions);
 | 
					        _socket = createSocket(tls, -1, errorMsg, _socketTLSOptions);
 | 
				
			||||||
 | 
					        _perMessageDeflate = std::make_unique<WebSocketPerMessageDeflate>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!_socket)
 | 
					        if (!_socket)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -149,6 +150,7 @@ namespace ix
 | 
				
			|||||||
        _blockingSend = true;
 | 
					        _blockingSend = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _socket = socket;
 | 
					        _socket = socket;
 | 
				
			||||||
 | 
					        _perMessageDeflate = std::make_unique<WebSocketPerMessageDeflate>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        WebSocketHandshake webSocketHandshake(_requestInitCancellation,
 | 
					        WebSocketHandshake webSocketHandshake(_requestInitCancellation,
 | 
				
			||||||
                                              _socket,
 | 
					                                              _socket,
 | 
				
			||||||
@@ -711,7 +713,7 @@ namespace ix
 | 
				
			|||||||
        if (compressedMessage && messageKind != MessageKind::FRAGMENT)
 | 
					        if (compressedMessage && messageKind != MessageKind::FRAGMENT)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            std::string decompressedMessage;
 | 
					            std::string decompressedMessage;
 | 
				
			||||||
            bool success = _perMessageDeflate.decompress(message, decompressedMessage);
 | 
					            bool success = _perMessageDeflate->decompress(message, decompressedMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (messageKind == MessageKind::MSG_TEXT && !validateUtf8(decompressedMessage))
 | 
					            if (messageKind == MessageKind::MSG_TEXT && !validateUtf8(decompressedMessage))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -765,7 +767,7 @@ namespace ix
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (compress)
 | 
					        if (compress)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!_perMessageDeflate.compress(message, compressedMessage))
 | 
					            if (!_perMessageDeflate->compress(message, compressedMessage))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                bool success = false;
 | 
					                bool success = false;
 | 
				
			||||||
                compressionError = true;
 | 
					                compressionError = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -185,7 +185,7 @@ namespace ix
 | 
				
			|||||||
        mutable std::mutex _closeDataMutex;
 | 
					        mutable std::mutex _closeDataMutex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Data used for Per Message Deflate compression (with zlib)
 | 
					        // Data used for Per Message Deflate compression (with zlib)
 | 
				
			||||||
        WebSocketPerMessageDeflate _perMessageDeflate;
 | 
					        WebSocketPerMessageDeflatePtr _perMessageDeflate;
 | 
				
			||||||
        WebSocketPerMessageDeflateOptions _perMessageDeflateOptions;
 | 
					        WebSocketPerMessageDeflateOptions _perMessageDeflateOptions;
 | 
				
			||||||
        std::atomic<bool> _enablePerMessageDeflate;
 | 
					        std::atomic<bool> _enablePerMessageDeflate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,4 +6,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IX_WEBSOCKET_VERSION "8.3.4"
 | 
					#define IX_WEBSOCKET_VERSION "9.0.0"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user