]> granicus.if.org Git - ejabberd/commitdiff
* src/ejabberd_service.erl: Fix XEP-0114 compliance: define xmlns
authorBadlop <badlop@process-one.net>
Sat, 9 Aug 2008 18:08:00 +0000 (18:08 +0000)
committerBadlop <badlop@process-one.net>
Sat, 9 Aug 2008 18:08:00 +0000 (18:08 +0000)
in header of error response; check the connection is attempted to
a served component; include in response the JID of served
component not server (thanks to Sergei Golovan)

SVN Revision: 1516

ChangeLog
src/ejabberd_service.erl

index bfa792092b9c5f659f21cbae639184f6d38b937a..afd8fbde871635a03af958097ce3745d7b193bf2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-08-09  Badlop  <badlop@process-one.net>
+
+       * src/ejabberd_service.erl: Fix XEP-0114 compliance: define xmlns
+       in header of error response; check the connection is attempted to
+       a served component; include in response the JID of served
+       component not server (thanks to Sergei Golovan)
+
 2008-08-01  Badlop  <badlop@process-one.net>
 
        * doc/release_notes_2.0.2.txt: Added for ejabberd 2.0.2-beta1
index 649f449512f67db63fc9cfdab55c0efffc8b5df4..d7216fc6e50b4b3aea2b9e1fc07cf720f58c9a11 100644 (file)
@@ -1,7 +1,7 @@
 %%%----------------------------------------------------------------------
 %%% File    : ejabberd_service.erl
 %%% Author  : Alexey Shchepin <alexey@process-one.net>
-%%% Purpose : External component management
+%%% Purpose : External component management (XEP-0114)
 %%% Created :  6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
 %%%
 %%%
 -define(STREAM_TRAILER, "</stream:stream>").
 
 -define(INVALID_HEADER_ERR,
-       "<stream:stream>"
+       "<stream:stream "
+       "xmlns:stream='http://etherx.jabber.org/streams'>"
        "<stream:error>Invalid Stream Header</stream:error>"
        "</stream:stream>"
        ).
 
+-define(HOST_UNKNOWN_ERR,
+       "<stream:stream "
+       "xmlns:stream='http://etherx.jabber.org/streams'>"
+       "<stream:error>Host Unknown</stream:error>"
+       "</stream:stream>"
+       ).
+
 -define(INVALID_HANDSHAKE_ERR,
        "<stream:error>Invalid Handshake</stream:error>"
        "</stream:stream>"
@@ -168,13 +176,21 @@ init([{SockMod, Socket}, Opts]) ->
 %%----------------------------------------------------------------------
 
 wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
-    % TODO
     case xml:get_attr_s("xmlns", Attrs) of
        "jabber:component:accept" ->
-           Header = io_lib:format(?STREAM_HEADER,
-                                  [StateData#state.streamid, ?MYNAME]),
-           send_text(StateData, Header),
-           {next_state, wait_for_handshake, StateData};
+           %% Check that destination is a served component
+           To = xml:get_attr_s("to", Attrs),
+           case lists:member(To, StateData#state.hosts) of
+               true ->
+                   Header = io_lib:format(?STREAM_HEADER,
+                                          [StateData#state.streamid,
+                                           xml:crypt(To)]),
+                   send_text(StateData, Header),
+                   {next_state, wait_for_handshake, StateData};
+               _ ->
+                   send_text(StateData, ?HOST_UNKNOWN_ERR),
+                   {stop, normal, StateData}
+           end;
        _ ->
            send_text(StateData, ?INVALID_HEADER_ERR),
            {stop, normal, StateData}