diff --git a/src/plugins/relay/api/remote/relay-remote-network.c b/src/plugins/relay/api/remote/relay-remote-network.c index 2bdc21715..ff4145b8f 100644 --- a/src/plugins/relay/api/remote/relay-remote-network.c +++ b/src/plugins/relay/api/remote/relay-remote-network.c @@ -106,9 +106,14 @@ relay_remote_network_close_connection (struct t_relay_remote *remote) #endif /* _WIN32 */ remote->sock = -1; } - relay_websocket_deflate_free (remote->ws_deflate); - remote->ws_deflate = NULL; + relay_websocket_deflate_reinit (remote->ws_deflate); remote->synced = 0; + if (remote->partial_ws_frame) + { + free (remote->partial_ws_frame); + remote->partial_ws_frame = NULL; + } + remote->partial_ws_frame_size = 0; } /* diff --git a/src/plugins/relay/relay-websocket.c b/src/plugins/relay/relay-websocket.c index 02321c980..7081adeec 100644 --- a/src/plugins/relay/relay-websocket.c +++ b/src/plugins/relay/relay-websocket.c @@ -136,6 +136,22 @@ relay_websocket_deflate_free_stream_inflate (struct t_relay_websocket_deflate *w } } +/* + * Reinitializes a t_relay_websocket_deflate structure. + */ + +void +relay_websocket_deflate_reinit (struct t_relay_websocket_deflate *ws_deflate) +{ + ws_deflate->enabled = 0; + ws_deflate->server_context_takeover = 0; + ws_deflate->server_context_takeover = 0; + ws_deflate->window_bits_deflate = 0; + ws_deflate->window_bits_inflate = 0; + relay_websocket_deflate_free_stream_deflate (ws_deflate); + relay_websocket_deflate_free_stream_inflate (ws_deflate); +} + /* * Frees a websocket deflate structure. */ diff --git a/src/plugins/relay/relay-websocket.h b/src/plugins/relay/relay-websocket.h index e9d09f3e6..14e54ef30 100644 --- a/src/plugins/relay/relay-websocket.h +++ b/src/plugins/relay/relay-websocket.h @@ -63,6 +63,7 @@ struct t_relay_websocket_frame extern struct t_relay_websocket_deflate *relay_websocket_deflate_alloc (); extern int relay_websocket_deflate_init_stream_deflate (struct t_relay_websocket_deflate *ws_deflate); extern int relay_websocket_deflate_init_stream_inflate (struct t_relay_websocket_deflate *ws_deflate); +extern void relay_websocket_deflate_reinit (struct t_relay_websocket_deflate *ws_deflate); extern void relay_websocket_deflate_free (struct t_relay_websocket_deflate *ws_deflate); extern int relay_websocket_is_valid_http_get (enum t_relay_protocol protocol, const char *message);