diff options
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r-- | src/ejabberd_service.erl | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 1b1344bb3..bcd633d7e 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -61,6 +61,11 @@ "</stream:stream>" ). +-define(INVALID_XML_ERR, + xml:element_to_string(?SERR_XML_NOT_WELL_FORMED)). +-define(INVALID_NS_ERR, + xml:element_to_string(?SERR_INVALID_NAMESPACE)). + %%%---------------------------------------------------------------------- %%% API %%%---------------------------------------------------------------------- @@ -123,6 +128,13 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> {stop, normal, StateData} end; +wait_for_stream({xmlstreamerror, _}, StateData) -> + Header = io_lib:format(?STREAM_HEADER, + ["none", ?MYNAME]), + send_text(StateData#state.socket, + Header ++ ?INVALID_XML_ERR ++ ?STREAM_TRAILER), + {stop, normal, StateData}; + wait_for_stream(closed, StateData) -> {stop, normal, StateData}. @@ -148,6 +160,10 @@ wait_for_handshake({xmlstreamelement, El}, StateData) -> wait_for_handshake({xmlstreamend, Name}, StateData) -> {stop, normal, StateData}; +wait_for_handshake({xmlstreamerror, _}, StateData) -> + send_text(StateData#state.socket, ?INVALID_XML_ERR ++ ?STREAM_TRAILER), + {stop, normal, StateData}; + wait_for_handshake(closed, StateData) -> {stop, normal, StateData}. @@ -184,6 +200,10 @@ stream_established({xmlstreamend, Name}, StateData) -> % TODO {stop, normal, StateData}; +stream_established({xmlstreamerror, _}, StateData) -> + send_text(StateData#state.socket, ?INVALID_XML_ERR ++ ?STREAM_TRAILER), + {stop, normal, StateData}; + stream_established(closed, StateData) -> % TODO {stop, normal, StateData}. |