1 |
|
-module(mongoose_router). |
2 |
|
|
3 |
|
-define(TABLE, ?MODULE). |
4 |
|
|
5 |
|
-export([start/0, default_routing_modules/0]). |
6 |
|
|
7 |
|
-export([get_all_domains/0, lookup_route/1, is_registered_route/1, |
8 |
|
register_route/2, unregister_route/1]). |
9 |
|
|
10 |
|
-spec get_all_domains() -> [jid:lserver()]. |
11 |
|
get_all_domains() -> |
12 |
2 |
ets:select(?TABLE, [{{'$1', '_'}, [], ['$1']}]). |
13 |
|
|
14 |
|
-spec lookup_route(jid:lserver()) -> no_route | mongoose_packet_handler:t(). |
15 |
|
lookup_route(LDomain) -> |
16 |
4252 |
case ets:lookup(?TABLE, LDomain) of |
17 |
38 |
[] -> no_route; |
18 |
|
[{_, Handler}] -> |
19 |
4214 |
Handler |
20 |
|
end. |
21 |
|
|
22 |
|
-spec register_route(jid:server(), mongoose_packet_handler:t()) -> any(). |
23 |
|
register_route(Domain, Handler) -> |
24 |
14 |
case jid:nameprep(Domain) of |
25 |
|
error -> |
26 |
:-( |
{error, invalid_domain, Domain}; |
27 |
|
LDomain -> |
28 |
14 |
ets:insert(?TABLE, {LDomain, Handler}), |
29 |
14 |
mongoose_hooks:register_subhost(LDomain, false) |
30 |
|
end. |
31 |
|
|
32 |
|
-spec unregister_route(jid:server()) -> any(). |
33 |
|
unregister_route(Domain) -> |
34 |
7 |
case jid:nameprep(Domain) of |
35 |
|
error -> |
36 |
:-( |
{error, invalid_domain, Domain}; |
37 |
|
LDomain -> |
38 |
7 |
ets:delete(?TABLE, LDomain), |
39 |
7 |
mongoose_hooks:unregister_subhost(LDomain) |
40 |
|
end. |
41 |
|
|
42 |
|
-spec is_registered_route(jid:lserver()) -> boolean(). |
43 |
|
is_registered_route(LDomain) -> |
44 |
:-( |
ets:member(?TABLE, LDomain). |
45 |
|
|
46 |
|
%% start/stop |
47 |
|
start() -> |
48 |
51 |
ets:new(?TABLE, [named_table, public, set, {read_concurrency, true}]), |
49 |
51 |
mongoose_metrics:ensure_metric(global, routingErrors, spiral). |
50 |
|
|
51 |
|
default_routing_modules() -> |
52 |
51 |
[mongoose_router_global, |
53 |
|
mongoose_router_localdomain, |
54 |
|
mongoose_router_external_localnode, |
55 |
|
mongoose_router_external, |
56 |
|
mongoose_router_dynamic_domains, |
57 |
|
ejabberd_s2s]. |