diff --git a/ixwebsocket/IXWebSocket.cpp b/ixwebsocket/IXWebSocket.cpp index cb7a4a76..19f8f0c3 100644 --- a/ixwebsocket/IXWebSocket.cpp +++ b/ixwebsocket/IXWebSocket.cpp @@ -252,6 +252,11 @@ namespace ix { webSocketMessageType = WebSocket_MessageType_Pong; } break; + + case WebSocketTransport::FRAGMENT: + { + webSocketMessageType = WebSocket_MessageType_Fragment; + } break; } WebSocketErrorInfo webSocketErrorInfo; diff --git a/ixwebsocket/IXWebSocket.h b/ixwebsocket/IXWebSocket.h index c752df8f..94ea047c 100644 --- a/ixwebsocket/IXWebSocket.h +++ b/ixwebsocket/IXWebSocket.h @@ -39,7 +39,8 @@ namespace ix WebSocket_MessageType_Close = 2, WebSocket_MessageType_Error = 3, WebSocket_MessageType_Ping = 4, - WebSocket_MessageType_Pong = 5 + WebSocket_MessageType_Pong = 5, + WebSocket_MessageType_Fragment = 6 }; struct WebSocketOpenInfo diff --git a/ixwebsocket/IXWebSocketTransport.cpp b/ixwebsocket/IXWebSocketTransport.cpp index c27f885d..82bdd0d9 100644 --- a/ixwebsocket/IXWebSocketTransport.cpp +++ b/ixwebsocket/IXWebSocketTransport.cpp @@ -392,6 +392,10 @@ namespace ix emitMessage(MSG, getMergedChunks(), ws, onMessageCallback); _chunks.clear(); } + else + { + emitMessage(FRAGMENT, std::string(), ws, onMessageCallback); + } } } else if (ws.opcode == wsheader_type::PING) @@ -475,7 +479,7 @@ namespace ix size_t wireSize = message.size(); // When the RSV1 bit is 1 it means the message is compressed - if (_enablePerMessageDeflate && ws.rsv1) + if (_enablePerMessageDeflate && ws.rsv1 && messageKind != FRAGMENT) { std::string decompressedMessage; bool success = _perMessageDeflate.decompress(message, decompressedMessage); diff --git a/ixwebsocket/IXWebSocketTransport.h b/ixwebsocket/IXWebSocketTransport.h index 351db919..eb56e275 100644 --- a/ixwebsocket/IXWebSocketTransport.h +++ b/ixwebsocket/IXWebSocketTransport.h @@ -45,7 +45,8 @@ namespace ix { MSG, PING, - PONG + PONG, + FRAGMENT }; using OnMessageCallback = std::function