From bbfd58a822a7ec5c9bcdc111d833e7ba3fd03c05 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Sat, 12 Nov 2005 03:42:12 +0000 Subject: [PATCH] * src/ejabberd_s2s_out.erl: Fixed invalid behaviour upon connecting to host with invalid domain * src/ejabberd_s2s.erl: Likewise SVN Revision: 433 --- ChangeLog | 6 ++++++ src/ejabberd_s2s.erl | 4 +++- src/ejabberd_s2s_out.erl | 20 +++++++++++++++----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a22998bf..148292925 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-12 Alexey Shchepin + + * src/ejabberd_s2s_out.erl: Fixed invalid behaviour upon + connecting to host with invalid domain + * src/ejabberd_s2s.erl: Likewise + 2005-11-05 Alexey Shchepin * src/ejabberd_config.erl: Support for per host certificates diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl index 53dc89b9f..7a07861f0 100644 --- a/src/ejabberd_s2s.erl +++ b/src/ejabberd_s2s.erl @@ -167,7 +167,9 @@ find_connection(From, To) -> Pid end end, - mnesia:transaction(F); + TRes = mnesia:transaction(F), + ejabberd_s2s_out:start_connection(Pid), + TRes; [El] -> {atomic, El#s2s.pid} end. diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index c1b092bb0..6b3fb659d 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -13,7 +13,9 @@ -behaviour(gen_fsm). %% External exports --export([start/3, start_link/3]). +-export([start/3, + start_link/3, + start_connection/1]). %% gen_fsm callbacks -export([init/1, @@ -84,6 +86,9 @@ start(From, Host, Type) -> start_link(From, Host, Type) -> gen_fsm:start_link(ejabberd_s2s_out, [From, Host, Type], ?FSMOPTS). +start_connection(Pid) -> + gen_fsm:send_event(Pid, init). + %%%---------------------------------------------------------------------- %%% Callback functions from gen_fsm %%%---------------------------------------------------------------------- @@ -97,7 +102,6 @@ start_link(From, Host, Type) -> %%---------------------------------------------------------------------- init([From, Server, Type]) -> ?INFO_MSG("started: ~p", [{From, Server, Type}]), - gen_fsm:send_event(self(), init), TLS = case ejabberd_config:get_local_option(s2s_use_starttls) of undefined -> false; @@ -115,6 +119,7 @@ init([From, Server, Type]) -> {new, Key} -> {Key, false}; {verify, Pid, Key, SID} -> + start_connection(self()), {false, {Pid, Key, SID}} end, Timer = erlang:start_timer(?S2STIMEOUT, self(), []), @@ -140,12 +145,17 @@ open_socket(init, StateData) -> false -> {error, badarg}; ASCIIAddr -> ?DEBUG("s2s_out: connecting to ~s:~p~n", [ASCIIAddr, Port]), - case gen_tcp:connect(ASCIIAddr, Port, - [binary, {packet, 0}, - {active, false}]) of + case catch gen_tcp:connect(ASCIIAddr, Port, + [binary, {packet, 0}, + {active, false}]) of {ok, _Socket} = R -> R; {error, Reason1} -> ?DEBUG("s2s_out: connect return ~p~n", [Reason1]), + catch gen_tcp:connect(Addr, Port, + [binary, {packet, 0}, + {active, false}, inet6]); + {'EXIT', Reason1} -> + ?DEBUG("s2s_out: connect crashed ~p~n", [Reason1]), catch gen_tcp:connect(Addr, Port, [binary, {packet, 0}, {active, false}, inet6])