1 |
|
%%%------------------------------------------------------------------- |
2 |
|
%%% @doc |
3 |
|
%%% A behaviour which should be used by all modules being used in a |
4 |
|
%%% routing pipeline. The pipeline, manage by ejabberd_router:route |
5 |
|
%%% func, calls filter and route for each successful module. |
6 |
|
%%% |
7 |
|
%%% Module has to implement both functions, can be a no-op just returning |
8 |
|
%%% a tuple of its args. |
9 |
|
%%% @end |
10 |
|
%%%------------------------------------------------------------------- |
11 |
|
-module(xmpp_router). |
12 |
|
|
13 |
|
-callback route(From :: jid:jid(), To :: jid:jid(), |
14 |
|
Acc :: mongoose_acc:t(), Packet :: exml:element()) -> |
15 |
|
{done, mongoose_acc:t()} | {jid:jid(), jid:jid(), mongoose_acc:t(), exml:element()}. |
16 |
|
|
17 |
|
-callback filter(From :: jid:jid(), To :: jid:jid(), |
18 |
|
Acc :: mongoose_acc:t(), Packet :: exml:element()) -> |
19 |
|
drop | {jid:jid(), jid:jid(), mongoose_acc:t(), exml:element()}. |
20 |
|
|
21 |
|
|
22 |
|
-export([call_route/5, call_filter/5]). |
23 |
|
|
24 |
|
-spec call_route(Module :: module(), From :: jid:jid(), |
25 |
|
To :: jid:jid(), Acc :: mongoose_acc:t(), Packet :: exml:element()) -> |
26 |
|
{done, mongoose_acc:t()} | {jid:jid(), jid:jid(), mongoose_acc:t(), exml:element()}. |
27 |
|
call_route(Module, From, To, Acc, Packet) -> |
28 |
34015 |
Module:route(From, To, Acc, Packet). |
29 |
|
|
30 |
|
-spec call_filter(Module :: module(), From :: jid:jid(), |
31 |
|
To :: jid:jid(), Acc :: mongoose_acc:t(), Packet :: exml:element()) -> |
32 |
|
drop | {jid:jid(), jid:jid(), mongoose_acc:t(), exml:element()}. |
33 |
|
call_filter(Module, From, To, Acc, Packet) -> |
34 |
34387 |
Module:filter(From, To, Acc, Packet). |