aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_s2s_in.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_s2s_in.erl')
-rw-r--r--src/ejabberd_s2s_in.erl36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index c032e24fa..f4c6f0fed 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -27,7 +27,7 @@
-include("ejabberd.hrl").
-record(state, {socket, receiver, streamid,
- myself = ?MYNAME, server, queue}).
+ myname, server, queue}).
-define(DBGFSM, true).
@@ -53,6 +53,12 @@
"</stream:stream>"
).
+-define(INVALID_DOMAIN_ERR,
+ "<stream:stream>"
+ "<stream:error>Invalid Destination</stream:error>"
+ "</stream:stream>"
+ ).
+
%%%----------------------------------------------------------------------
%%% API
%%%----------------------------------------------------------------------
@@ -90,8 +96,19 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) ->
% TODO
case {xml:get_attr_s("xmlns", Attrs), xml:get_attr_s("xmlns:db", Attrs)} of
{"jabber:server", "jabber:server:dialback"} ->
- send_text(StateData#state.socket, ?STREAM_HEADER),
- {next_state, wait_for_key, StateData};
+ Me = case xml:get_attr_s("to", Attrs) of
+ "" -> ?MYNAME;
+ Dom -> Dom
+ end,
+ case lists:member(Me, ejabberd_router:dirty_get_all_domains()) of
+ true ->
+ send_text(StateData#state.socket, ?STREAM_HEADER),
+ {next_state, wait_for_key, StateData#state{myname = Me}};
+ _ ->
+ send_text(StateData#state.socket, ?INVALID_DOMAIN_ERR),
+ {stop, normal, StateData}
+ end;
+
_ ->
send_text(StateData#state.socket, ?INVALID_HEADER_ERR),
{stop, normal, StateData}
@@ -105,7 +122,8 @@ wait_for_key({xmlstreamelement, El}, StateData) ->
case is_key_packet(El) of
{key, To, From, Id, Key} ->
io:format("GET KEY: ~p~n", [{To, From, Id, Key}]),
- ejabberd_s2s_out:start(From, {verify, self(), Key}),
+ ejabberd_s2s_out:start(StateData#state.myname, From,
+ {verify, self(), Key}),
{next_state,
wait_for_verification,
StateData#state{server = From}};
@@ -118,7 +136,7 @@ wait_for_key({xmlstreamelement, El}, StateData) ->
send_element(StateData#state.socket,
{xmlelement,
"db:verify",
- [{"from", ?MYNAME},
+ [{"from", StateData#state.myname},
{"to", From},
{"id", Id},
{"type", Type}],
@@ -139,7 +157,7 @@ wait_for_verification(valid, StateData) ->
send_element(StateData#state.socket,
{xmlelement,
"db:result",
- [{"from", ?MYNAME},
+ [{"from", StateData#state.myname},
{"to", StateData#state.server},
{"type", "valid"}],
[]}),
@@ -150,7 +168,7 @@ wait_for_verification(invalid, StateData) ->
send_element(StateData#state.socket,
{xmlelement,
"db:result",
- [{"from", ?MYNAME},
+ [{"from", StateData#state.myname},
{"to", StateData#state.server},
{"type", "invalid"}],
[]}),
@@ -167,7 +185,7 @@ wait_for_verification({xmlstreamelement, El}, StateData) ->
send_element(StateData#state.socket,
{xmlelement,
"db:verify",
- [{"from", ?MYNAME},
+ [{"from", StateData#state.myname},
{"to", From},
{"id", Id},
{"type", Type}],
@@ -198,7 +216,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
send_element(StateData#state.socket,
{xmlelement,
"db:verify",
- [{"from", ?MYNAME},
+ [{"from", StateData#state.myname},
{"to", From},
{"id", Id},
{"type", Type}],