Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2005-11-12 06:42:12 +0300
committerAlexey Shchepin <alexey@process-one.net>2005-11-12 06:42:12 +0300
commitbbfd58a822a7ec5c9bcdc111d833e7ba3fd03c05 (patch)
treef30f4f90bf5087b893deebf7346e763b14a33406
parent719cd49e593090d4fe972733034502fca91dcc00 (diff)
* src/ejabberd_s2s_out.erl: Fixed invalid behaviour upon
connecting to host with invalid domain * src/ejabberd_s2s.erl: Likewise SVN Revision: 433
-rw-r--r--ChangeLog6
-rw-r--r--src/ejabberd_s2s.erl4
-rw-r--r--src/ejabberd_s2s_out.erl20
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 <alexey@sevcom.net>
+
+ * 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 <alexey@sevcom.net>
* 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,14 +145,19 @@ 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])
end
end,