diff --git a/modules/websocket/wsl_peer.cpp b/modules/websocket/wsl_peer.cpp index 81e5673583..9ffc343571 100644 --- a/modules/websocket/wsl_peer.cpp +++ b/modules/websocket/wsl_peer.cpp @@ -611,17 +611,6 @@ void WSLPeer::_wsl_frame_recv_chunk_callback(wslay_event_context_ptr ctx, const } } -void WSLPeer::_wsl_frame_recv_end_callback(wslay_event_context_ptr ctx, void *user_data) { - WSLPeer *peer = (WSLPeer *)user_data; - PendingMessage &pm = peer->pending_message; - if (pm.opcode != 0) { - // Only write the packet (since it's now completed). - uint8_t is_string = pm.opcode == WSLAY_TEXT_FRAME ? 1 : 0; - peer->in_buffer.write_packet(nullptr, pm.payload_size, &is_string); - pm.clear(); - } -} - ssize_t WSLPeer::_wsl_send_callback(wslay_event_context_ptr ctx, const uint8_t *data, size_t len, int flags, void *user_data) { WSLPeer *peer = (WSLPeer *)user_data; Ref conn = peer->connection; @@ -669,8 +658,15 @@ void WSLPeer::_wsl_msg_recv_callback(wslay_event_context_ptr ctx, const struct w if (op == WSLAY_PONG) { peer->heartbeat_waiting = false; + } else if (op == WSLAY_TEXT_FRAME || op == WSLAY_BINARY_FRAME) { + PendingMessage &pm = peer->pending_message; + ERR_FAIL_COND(pm.opcode != op); + // Only write the packet (since it's now completed). + uint8_t is_string = pm.opcode == WSLAY_TEXT_FRAME ? 1 : 0; + peer->in_buffer.write_packet(nullptr, pm.payload_size, &is_string); + pm.clear(); } - // Ping, or message (already parsed in chunks). + // Ping. } wslay_event_callbacks WSLPeer::_wsl_callbacks = { @@ -679,7 +675,7 @@ wslay_event_callbacks WSLPeer::_wsl_callbacks = { _wsl_genmask_callback, _wsl_recv_start_callback, _wsl_frame_recv_chunk_callback, - _wsl_frame_recv_end_callback, + nullptr, _wsl_msg_recv_callback }; diff --git a/modules/websocket/wsl_peer.h b/modules/websocket/wsl_peer.h index 516fc88220..2d3f9b8111 100644 --- a/modules/websocket/wsl_peer.h +++ b/modules/websocket/wsl_peer.h @@ -53,7 +53,6 @@ private: static ssize_t _wsl_recv_callback(wslay_event_context_ptr ctx, uint8_t *data, size_t len, int flags, void *user_data); static void _wsl_recv_start_callback(wslay_event_context_ptr ctx, const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data); static void _wsl_frame_recv_chunk_callback(wslay_event_context_ptr ctx, const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data); - static void _wsl_frame_recv_end_callback(wslay_event_context_ptr ctx, void *user_data); static ssize_t _wsl_send_callback(wslay_event_context_ptr ctx, const uint8_t *data, size_t len, int flags, void *user_data); static int _wsl_genmask_callback(wslay_event_context_ptr ctx, uint8_t *buf, size_t len, void *user_data);