diff options
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 15 |
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). |