aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_c2s.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index d7684d0f5..efb432314 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1304,6 +1304,21 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
handle_info({'DOWN', Monitor, _Type, _Object, _Info}, _StateName, StateData)
when Monitor == StateData#state.socket_monitor ->
{stop, normal, StateData};
+handle_info(system_shutdown, StateName, StateData) ->
+ case StateName of
+ wait_for_stream ->
+ Header = io_lib:format(?STREAM_HEADER,
+ ["none", ?MYNAME, " version='1.0'", ""]),
+ send_text(StateData, Header),
+ send_element(StateData, ?SERR_SYSTEM_SHUTDOWN),
+ send_text(StateData, ?STREAM_TRAILER),
+ ok;
+ _ ->
+ send_element(StateData, ?SERR_SYSTEM_SHUTDOWN),
+ send_text(StateData, ?STREAM_TRAILER),
+ ok
+ end,
+ {stop, normal, StateData};
handle_info(Info, StateName, StateData) ->
?ERROR_MSG("Unexpected info: ~p", [Info]),
fsm_next_state(StateName, StateData).