aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_s2s.erl276
1 files changed, 138 insertions, 138 deletions
diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl
index 0ab117d59..6c8821240 100644
--- a/src/ejabberd_s2s.erl
+++ b/src/ejabberd_s2s.erl
@@ -14,19 +14,19 @@
%% API
-export([start_link/0,
- route/3,
- have_connection/1,
- has_key/2,
- try_register/1,
- remove_connection/3,
- dirty_get_connections/0,
- allow_host/2,
- ctl_process/2
- ]).
+ route/3,
+ have_connection/1,
+ has_key/2,
+ try_register/1,
+ remove_connection/3,
+ dirty_get_connections/0,
+ allow_host/2,
+ ctl_process/2
+ ]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
+ terminate/2, code_change/3]).
-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -49,65 +49,65 @@ start_link() ->
route(From, To, Packet) ->
case catch do_route(From, To, Packet) of
- {'EXIT', Reason} ->
- ?ERROR_MSG("~p~nwhen processing: ~p",
- [Reason, {From, To, Packet}]);
- _ ->
- ok
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p~nwhen processing: ~p",
+ [Reason, {From, To, Packet}]);
+ _ ->
+ ok
end.
remove_connection(FromTo, Pid, Key) ->
?ERROR_MSG("XXXXXXXXXXX ~p~n", [{FromTo, Pid, Key}]),
case catch mnesia:dirty_match_object(s2s, {s2s, FromTo, Pid, '_'}) of
- [#s2s{pid = Pid, key = Key}] ->
- F = fun() ->
- mnesia:delete_object(#s2s{fromto = FromTo,
- pid = Pid,
- key = Key})
- end,
- mnesia:transaction(F);
- _ ->
- ok
+ [#s2s{pid = Pid, key = Key}] ->
+ F = fun() ->
+ mnesia:delete_object(#s2s{fromto = FromTo,
+ pid = Pid,
+ key = Key})
+ end,
+ mnesia:transaction(F);
+ _ ->
+ ok
end.
have_connection(FromTo) ->
case catch mnesia:dirty_read(s2s, FromTo) of
- [_] ->
- true;
- _ ->
- false
+ [_] ->
+ true;
+ _ ->
+ false
end.
has_key(FromTo, Key) ->
case mnesia:dirty_select(s2s,
- [{#s2s{fromto = FromTo, key = Key, _ = '_'},
- [],
- ['$_']}]) of
- [] ->
- false;
- _ ->
- true
+ [{#s2s{fromto = FromTo, key = Key, _ = '_'},
+ [],
+ ['$_']}]) of
+ [] ->
+ false;
+ _ ->
+ true
end.
try_register(FromTo) ->
Key = randoms:get_string(),
Max_S2S_Connexions_Number = max_s2s_connexions_number(element(1, FromTo)),
F = fun() ->
- case mnesia:read({s2s, FromTo}) of
- L when length(L) < Max_S2S_Connexions_Number ->
- mnesia:write(#s2s{fromto = FromTo,
- pid = self(),
- key = Key}),
- {key, Key};
- _ ->
- false
- end
+ case mnesia:read({s2s, FromTo}) of
+ L when length(L) < Max_S2S_Connexions_Number ->
+ mnesia:write(#s2s{fromto = FromTo,
+ pid = self(),
+ key = Key}),
+ {key, Key};
+ _ ->
+ false
+ end
end,
case mnesia:transaction(F) of
- {atomic, Res} ->
- Res;
- _ ->
- false
+ {atomic, Res} ->
+ Res;
+ _ ->
+ false
end.
dirty_get_connections() ->
@@ -127,7 +127,7 @@ dirty_get_connections() ->
init([]) ->
update_tables(),
mnesia:create_table(s2s, [{ram_copies, [node()]}, {type, bag},
- {attributes, record_info(fields, s2s)}]),
+ {attributes, record_info(fields, s2s)}]),
mnesia:add_table_copy(s2s, node(), ram_copies),
mnesia:add_table_index(s2s, key),
mnesia:subscribe(system),
@@ -170,11 +170,11 @@ handle_info({mnesia_system_event, {mnesia_down, Node}}, State) ->
{noreply, State};
handle_info({route, From, To, Packet}, State) ->
case catch do_route(From, To, Packet) of
- {'EXIT', Reason} ->
- ?ERROR_MSG("~p~nwhen processing: ~p",
- [Reason, {From, To, Packet}]);
- _ ->
- ok
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p~nwhen processing: ~p",
+ [Reason, {From, To, Packet}]);
+ _ ->
+ ok
end,
{noreply, State};
handle_info(_Info, State) ->
@@ -202,39 +202,39 @@ code_change(_OldVsn, State, _Extra) ->
%%--------------------------------------------------------------------
clean_table_from_bad_node(Node) ->
F = fun() ->
- Es = mnesia:select(
- s2s,
- [{#s2s{pid = '$1', _ = '_'},
- [{'==', {node, '$1'}, Node}],
- ['$_']}]),
- lists:foreach(fun(E) ->
- mnesia:delete_object(E)
- end, Es)
+ Es = mnesia:select(
+ s2s,
+ [{#s2s{pid = '$1', _ = '_'},
+ [{'==', {node, '$1'}, Node}],
+ ['$_']}]),
+ lists:foreach(fun(E) ->
+ mnesia:delete_object(E)
+ end, Es)
end,
mnesia:transaction(F).
do_route(From, To, Packet) ->
?DEBUG("s2s manager~n\tfrom ~p~n\tto ~p~n\tpacket ~P~n",
- [From, To, Packet, 8]),
+ [From, To, Packet, 8]),
case find_connection(From, To) of
- {atomic, Pid} when pid(Pid) ->
- ?DEBUG("sending to process ~p~n", [Pid]),
- {xmlelement, Name, Attrs, Els} = Packet,
- NewAttrs = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
- jlib:jid_to_string(To),
- Attrs),
- send_element(Pid, {xmlelement, Name, NewAttrs, Els}),
- ok;
- {aborted, _Reason} ->
- case xml:get_tag_attr_s("type", Packet) of
- "error" -> ok;
- "result" -> ok;
- _ ->
- Err = jlib:make_error_reply(
- Packet, ?ERR_SERVICE_UNAVAILABLE),
- ejabberd_router:route(To, From, Err)
- end,
- false
+ {atomic, Pid} when pid(Pid) ->
+ ?DEBUG("sending to process ~p~n", [Pid]),
+ {xmlelement, Name, Attrs, Els} = Packet,
+ NewAttrs = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
+ jlib:jid_to_string(To),
+ Attrs),
+ send_element(Pid, {xmlelement, Name, NewAttrs, Els}),
+ ok;
+ {aborted, _Reason} ->
+ case xml:get_tag_attr_s("type", Packet) of
+ "error" -> ok;
+ "result" -> ok;
+ _ ->
+ Err = jlib:make_error_reply(
+ Packet, ?ERR_SERVICE_UNAVAILABLE),
+ ejabberd_router:route(To, From, Err)
+ end,
+ false
end.
find_connection(From, To) ->
@@ -244,31 +244,31 @@ find_connection(From, To) ->
Max_S2S_Connexions_Number = max_s2s_connexions_number(MyServer),
?ERROR_MSG("XXX Finding connection for ~p~n", [FromTo]),
case catch mnesia:dirty_read(s2s, FromTo) of
- {'EXIT', Reason} ->
- {aborted, Reason};
- [] ->
- %% We try to establish connection if the host is not a
- %% service and if the s2s host is not blacklisted or
- %% is in whitelist:
- case not is_service(From, To) andalso allow_host(MyServer, Server) of
- true ->
- Connections_Result = [new_connection(MyServer, Server, From, FromTo, Max_S2S_Connexions_Number)
- || _N <- lists:seq(1, Max_S2S_Connexions_Number)],
- case [PID || {atomic, PID} <- Connections_Result] of
- [] ->
- hd(Connections_Result);
- PIDs ->
- {atomic, choose_connection(From, PIDs)}
- end;
- false ->
- {aborted, error}
- end;
- L when is_list(L) , length(L) < Max_S2S_Connexions_Number ->
- %% We establish another connection for this pair.
- new_connection(MyServer, Server, From, FromTo, Max_S2S_Connexions_Number);
- L when is_list(L) ->
- %% We choose a connexion from the pool of opened ones.
- {atomic, choose_connection(From, L)}
+ {'EXIT', Reason} ->
+ {aborted, Reason};
+ [] ->
+ %% We try to establish connection if the host is not a
+ %% service and if the s2s host is not blacklisted or
+ %% is in whitelist:
+ case not is_service(From, To) andalso allow_host(MyServer, Server) of
+ true ->
+ Connections_Result = [new_connection(MyServer, Server, From, FromTo, Max_S2S_Connexions_Number)
+ || _N <- lists:seq(1, Max_S2S_Connexions_Number)],
+ case [PID || {atomic, PID} <- Connections_Result] of
+ [] ->
+ hd(Connections_Result);
+ PIDs ->
+ {atomic, choose_connection(From, PIDs)}
+ end;
+ false ->
+ {aborted, error}
+ end;
+ L when is_list(L) , length(L) < Max_S2S_Connexions_Number ->
+ %% We establish another connection for this pair.
+ new_connection(MyServer, Server, From, FromTo, Max_S2S_Connexions_Number);
+ L when is_list(L) ->
+ %% We choose a connexion from the pool of opened ones.
+ {atomic, choose_connection(From, L)}
end.
choose_connection(From, Connections) ->
@@ -325,12 +325,12 @@ max_s2s_connexions_number(Host) ->
is_service(From, To) ->
LFromDomain = From#jid.lserver,
case ejabberd_config:get_local_option({route_subdomains, LFromDomain}) of
- s2s -> % bypass RFC 3920 10.3
- false;
- _ ->
- LDstDomain = To#jid.lserver,
- P = fun(Domain) -> is_subdomain(LDstDomain, Domain) end,
- lists:any(P, ?MYHOSTS)
+ s2s -> % bypass RFC 3920 10.3
+ false;
+ _ ->
+ LDstDomain = To#jid.lserver,
+ P = fun(Domain) -> is_subdomain(LDstDomain, Domain) end,
+ lists:any(P, ?MYHOSTS)
end.
%%--------------------------------------------------------------------
@@ -358,39 +358,39 @@ ctl_process(Val, _Args) ->
update_tables() ->
case catch mnesia:table_info(s2s, type) of
- bag ->
- ok;
- {'EXIT', _} ->
- ok;
- _ ->
- % XXX TODO convert it ?
- mnesia:delete_table(s2s)
+ bag ->
+ ok;
+ {'EXIT', _} ->
+ ok;
+ _ ->
+ % XXX TODO convert it ?
+ mnesia:delete_table(s2s)
end,
case catch mnesia:table_info(s2s, attributes) of
- [fromto, node, key] ->
- mnesia:transform_table(s2s, ignore, [fromto, pid, key]),
- mnesia:clear_table(s2s);
- [fromto, pid, key] ->
- ok;
- {'EXIT', _} ->
- ok
+ [fromto, node, key] ->
+ mnesia:transform_table(s2s, ignore, [fromto, pid, key]),
+ mnesia:clear_table(s2s);
+ [fromto, pid, key] ->
+ ok;
+ {'EXIT', _} ->
+ ok
end,
case lists:member(local_s2s, mnesia:system_info(tables)) of
- true ->
- mnesia:delete_table(local_s2s);
- false ->
- ok
+ true ->
+ mnesia:delete_table(local_s2s);
+ false ->
+ ok
end.
%% Check if host is in blacklist or white list
allow_host(MyServer, S2SHost) ->
case ejabberd_config:get_local_option({{s2s_host, S2SHost},MyServer}) of
- deny -> false;
- allow -> true;
- _ ->
- case ejabberd_config:get_local_option({s2s_default_policy, MyServer}) of
- deny -> false;
- allow -> true;
- _ -> true %% The default s2s policy is allow
- end
+ deny -> false;
+ allow -> true;
+ _ ->
+ case ejabberd_config:get_local_option({s2s_default_policy, MyServer}) of
+ deny -> false;
+ allow -> true;
+ _ -> true %% The default s2s policy is allow
+ end
end.