From de26af3fdbd741086c9a3c0cba9c0e97c2b13cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Wed, 25 Mar 2015 17:08:43 +0100 Subject: [PATCH] Make sure that we send each time before closing websocket connection --- src/ejabberd_http_ws.erl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ejabberd_http_ws.erl b/src/ejabberd_http_ws.erl index 74fa2df5f..ab83fc50b 100644 --- a/src/ejabberd_http_ws.erl +++ b/src/ejabberd_http_ws.erl @@ -187,7 +187,19 @@ handle_sync_event({send_xml, Packet}, _From, StateName, skip -> ok end, - {reply, ok, StateName, StateData}; + SN2 = case Packet2 of + {xmlstreamelement, #xmlel{name = <<"close">>}} -> + stream_end_sent; + _ -> + StateName + end, + {reply, ok, SN2, StateData}; +handle_sync_event(close, _From, StateName, #state{ws = {_, WsPid}, rfc_compilant = true} = StateData) + when StateName /= stream_end_sent -> + Close = #xmlel{name = <<"close">>, + attrs = [{<<"xmlns">>, <<"urn:ietf:params:xml:ns:xmpp-framing">>}]}, + WsPid ! {send, xml:element_to_binary(Close)}, + {stop, normal, StateData}; handle_sync_event(close, _From, _StateName, StateData) -> {stop, normal, StateData}.