aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_router.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_router.erl')
-rw-r--r--src/ejabberd_router.erl20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 5e3127f9f..35c8d621c 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -220,7 +220,6 @@ code_change(_OldVsn, State, _Extra) ->
do_route(OrigFrom, OrigTo, OrigPacket) ->
?DEBUG("route~n\tfrom ~p~n\tto ~p~n\tpacket ~p~n",
[OrigFrom, OrigTo, OrigPacket]),
- LOrigDstDomain = OrigTo#jid.lserver,
case ejabberd_hooks:run_fold(filter_packet,
{OrigFrom, OrigTo, OrigPacket}, []) of
{From, To, Packet} ->
@@ -244,12 +243,25 @@ do_route(OrigFrom, OrigTo, OrigPacket) ->
Rs ->
case [R || R <- Rs, node(R#route.pid) == node()] of
[] ->
- R = lists:nth(erlang:phash(now(), length(Rs)), Rs),
+ Value = case ejabberd_config:get_local_option(
+ {domain_balancing, LDstDomain}) of
+ source -> jlib:jid_tolower(From);
+ destination -> jlib:jid_tolower(To);
+ random -> now();
+ undefined -> now()
+ end,
+ R = lists:nth(erlang:phash(Value, length(Rs)), Rs),
Pid = R#route.pid,
Pid ! {route, From, To, Packet};
LRs ->
- LRs,
- R = lists:nth(erlang:phash(now(), length(LRs)), LRs),
+ Value = case ejabberd_config:get_local_option(
+ {domain_balancing, LDstDomain}) of
+ source -> jlib:jid_tolower(From);
+ destination -> jlib:jid_tolower(To);
+ random -> now();
+ undefined -> now()
+ end,
+ R = lists:nth(erlang:phash(Value, length(LRs)), LRs),
Pid = R#route.pid,
case R#route.local_hint of
{apply, Module, Function} ->