summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2005-07-27 00:54:53 +0000
committerAlexey Shchepin <alexey@process-one.net>2005-07-27 00:54:53 +0000
commite9e1893b01c28ccad14fa3dbb392eeed8ed9c817 (patch)
treee2704705442ceb3f9a0d7904f4ae10face0e32e7
parent* src/jd2ejd.erl: Updated to work with ODBC (diff)
* src/ejabberd_router.erl: Added route_packet hook
SVN Revision: 380
-rw-r--r--ChangeLog4
-rw-r--r--src/ejabberd_router.erl73
2 files changed, 44 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index ceb238f9..bc1a2e4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-07-27 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/ejabberd_router.erl: Added route_packet hook
+
2005-07-26 Alexey Shchepin <alexey@sevcom.net>
* src/jd2ejd.erl: Updated to work with ODBC
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 31d35554..95c8f674 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -80,45 +80,52 @@ loop() ->
loop()
end.
-do_route(From, To, Packet) ->
- ?DEBUG("route~n\tfrom ~p~n\tto ~p~n\tpacket ~p~n", [From, To, Packet]),
- LDstDomain = To#jid.lserver,
- case mnesia:dirty_read(route, LDstDomain) of
- [] ->
- ejabberd_s2s:route(From, To, Packet);
- [R] ->
- Pid = R#route.pid,
- if
- node(Pid) == node() ->
- case R#route.local_hint of
- {apply, Module, Function} ->
- Module:Function(From, To, Packet);
- _ ->
- Pid ! {route, From, To, Packet}
- end;
- true ->
- Pid ! {route, From, To, Packet}
- end;
- Rs ->
- case [R || R <- Rs, node(R#route.pid) == node()] of
+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(
+ route_packet, LOrigDstDomain, {OrigFrom, OrigTo, OrigPacket}, []) of
+ {From, To, Packet} ->
+ LDstDomain = To#jid.lserver,
+ case mnesia:dirty_read(route, LDstDomain) of
[] ->
- R = lists:nth(erlang:phash(now(), length(Rs)), Rs),
- Pid = R#route.pid,
- Pid ! {route, From, To, Packet};
- LRs ->
- LRs,
- R = lists:nth(erlang:phash(now(), length(LRs)), LRs),
+ ejabberd_s2s:route(From, To, Packet);
+ [R] ->
Pid = R#route.pid,
- case R#route.local_hint of
- {apply, Module, Function} ->
- Module:Function(From, To, Packet);
- _ ->
+ if
+ node(Pid) == node() ->
+ case R#route.local_hint of
+ {apply, Module, Function} ->
+ Module:Function(From, To, Packet);
+ _ ->
+ Pid ! {route, From, To, Packet}
+ end;
+ true ->
Pid ! {route, From, To, Packet}
+ end;
+ Rs ->
+ case [R || R <- Rs, node(R#route.pid) == node()] of
+ [] ->
+ R = lists:nth(erlang:phash(now(), length(Rs)), Rs),
+ Pid = R#route.pid,
+ Pid ! {route, From, To, Packet};
+ LRs ->
+ LRs,
+ R = lists:nth(erlang:phash(now(), length(LRs)), LRs),
+ Pid = R#route.pid,
+ case R#route.local_hint of
+ {apply, Module, Function} ->
+ Module:Function(From, To, Packet);
+ _ ->
+ Pid ! {route, From, To, Packet}
+ end
end
- end
+ end;
+ drop ->
+ ok
end.
-
%route(From, To, Packet) ->
% ejabberd_router ! {route, From, To, Packet}.