diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-03-02 20:55:16 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-03-02 20:55:16 +0000 |
commit | 658552d605ef440a9b7ebdbbf898983a21567c65 (patch) | |
tree | 1e5243f9f91acdc7172c6ee243139bfd93a074b8 /src | |
parent | * src/mod_irc/mod_irc_connection.erl: Support for topic changes (diff) |
* src/ejabberd_c2s.erl: More correct stream closing
SVN Revision: 85
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index abbcfded5..aa8e241a5 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -58,6 +58,8 @@ -define(STREAM_TRAILER, "</stream:stream>"). -define(INVALID_NS_ERR, "<stream:error>Invalid Namespace</stream:error>"). +-define(INVALID_XML_ERR, + "<stream:error code='400'>Invalid XML</stream:error>"). %%%---------------------------------------------------------------------- %%% API @@ -113,6 +115,10 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> {stop, normal, StateData} end; +wait_for_stream({xmlstreamerror, _}, StateData) -> + send_text(StateData#state.socket, ?INVALID_XML_ERR), + {stop, normal, StateData}; + wait_for_stream(closed, StateData) -> {stop, normal, StateData}. @@ -170,7 +176,11 @@ wait_for_auth({xmlstreamelement, El}, StateData) -> end; wait_for_auth({xmlstreamend, Name}, StateData) -> - % TODO + send_text(StateData#state.socket, ?STREAM_TRAILER), + {stop, normal, StateData}; + +wait_for_auth({xmlstreamerror, _}, StateData) -> + send_text(StateData#state.socket, ?INVALID_XML_ERR ?STREAM_TRAILER), {stop, normal, StateData}; wait_for_auth(closed, StateData) -> @@ -213,10 +223,14 @@ session_established({xmlstreamelement, El}, StateData) -> {next_state, session_established, NewState}; session_established({xmlstreamend, Name}, StateData) -> + send_text(StateData#state.socket, ?STREAM_TRAILER), + {stop, normal, StateData}; + +session_established({xmlstreamerror, _}, StateData) -> + send_text(StateData#state.socket, ?INVALID_XML_ERR ?STREAM_TRAILER), {stop, normal, StateData}; session_established(closed, StateData) -> - % TODO {stop, normal, StateData}. |