aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-03-02 20:55:16 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-03-02 20:55:16 +0000
commit658552d605ef440a9b7ebdbbf898983a21567c65 (patch)
tree1e5243f9f91acdc7172c6ee243139bfd93a074b8 /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.erl18
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}.