aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_http_ws.erl14
1 files changed, 13 insertions, 1 deletions
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}.