aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_service.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r--src/ejabberd_service.erl20
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}.