1 |
|
%% Just a proxy interface module between the main mod_roster module and |
2 |
|
%% the backend modules (i.e. mod_roster_rdbms, mod_roster_mnesia...). |
3 |
|
-module(mod_roster_backend). |
4 |
|
-export([init/2, |
5 |
|
transaction/2, |
6 |
|
read_roster_version/3, |
7 |
|
write_roster_version/5, |
8 |
|
get_roster/3, |
9 |
|
get_roster_entry/6, |
10 |
|
get_subscription_lists/3, |
11 |
|
roster_subscribe_t/2, |
12 |
|
update_roster_t/2, |
13 |
|
del_roster_t/4, |
14 |
|
remove_user_t/3, |
15 |
|
remove_domain_t/2]). |
16 |
|
|
17 |
|
-define(MAIN_MODULE, mod_roster). |
18 |
|
|
19 |
|
%% ---------------------------------------------------------------------- |
20 |
|
%% Callbacks |
21 |
|
%% (exactly the same as specs in this module) |
22 |
|
|
23 |
|
-callback init(mongooseim:host_type(), gen_mod:module_opts()) -> ok. |
24 |
|
|
25 |
|
-callback transaction(mongooseim:host_type(), fun(() -> any())) -> |
26 |
|
{aborted, any()} | {atomic, any()} | {error, any()}. |
27 |
|
|
28 |
|
-callback read_roster_version(mongooseim:host_type(), jid:luser(), jid:lserver()) -> |
29 |
|
binary() | error. |
30 |
|
|
31 |
|
-callback write_roster_version(mongooseim:host_type(), jid:luser(), jid:lserver(), |
32 |
|
mod_roster:transaction_state(), mod_roster:version()) -> ok. |
33 |
|
|
34 |
|
-callback get_roster(mongooseim:host_type(), jid:luser(), jid:lserver()) -> [mod_roster:roster()]. |
35 |
|
|
36 |
|
-callback get_roster_entry(mongooseim:host_type(), jid:luser(), jid:lserver(), mod_roster:contact(), |
37 |
|
mod_roster:transaction_state(), mod_roster:entry_format()) -> |
38 |
|
mod_roster:roster() | does_not_exist | error. |
39 |
|
|
40 |
|
-callback get_subscription_lists(mongoose_acc:t(), jid:luser(), jid:lserver()) -> [mod_roster:roster()]. |
41 |
|
|
42 |
|
-callback roster_subscribe_t(mongooseim:host_type(), mod_roster:roster()) -> ok. |
43 |
|
|
44 |
|
-callback update_roster_t(mongooseim:host_type(), mod_roster:roster()) -> ok. |
45 |
|
|
46 |
|
-callback del_roster_t(mongooseim:host_type(), jid:luser(), jid:lserver(), mod_roster:contact()) -> ok. |
47 |
|
|
48 |
|
-callback remove_user_t(mongooseim:host_type(), jid:luser(), jid:lserver()) -> ok. |
49 |
|
|
50 |
|
-callback remove_domain_t(mongooseim:host_type(), jid:lserver()) -> ok. |
51 |
|
|
52 |
|
-optional_callbacks([remove_domain_t/2]). |
53 |
|
|
54 |
|
-spec init(mongooseim:host_type(), gen_mod:module_opts()) -> ok. |
55 |
|
init(HostType, Opts) -> |
56 |
436 |
TrackedFuns = [read_roster_version, |
57 |
|
write_roster_version, |
58 |
|
get_roster, |
59 |
|
get_roster_entry, |
60 |
|
get_subscription_lists, |
61 |
|
roster_subscribe_t, |
62 |
|
update_roster_t, |
63 |
|
del_roster_t], |
64 |
436 |
mongoose_backend:init(HostType, ?MAIN_MODULE, TrackedFuns, Opts), |
65 |
436 |
Args = [HostType, Opts], |
66 |
436 |
mongoose_backend:call(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
67 |
|
|
68 |
|
-spec transaction(mongooseim:host_type(), fun(() -> any())) -> |
69 |
|
{aborted, any()} | {atomic, any()} | {error, any()}. |
70 |
|
transaction(HostType, F) -> |
71 |
3761 |
Args = [HostType, F], |
72 |
3761 |
mongoose_backend:call(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
73 |
|
|
74 |
|
|
75 |
|
-spec read_roster_version(mongooseim:host_type(), jid:luser(), jid:lserver()) -> |
76 |
|
binary() | error. |
77 |
|
read_roster_version(HostType, LUser, LServer) -> |
78 |
4 |
Args = [HostType, LUser, LServer], |
79 |
4 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
80 |
|
|
81 |
|
-spec write_roster_version(mongooseim:host_type(), jid:luser(), jid:lserver(), |
82 |
|
mod_roster:transaction_state(), mod_roster:version()) -> ok. |
83 |
|
write_roster_version(HostType, LUser, LServer, TransactionState, Ver) -> |
84 |
2 |
Args = [HostType, LUser, LServer, TransactionState, Ver], |
85 |
2 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
86 |
|
|
87 |
|
-spec get_roster(mongooseim:host_type(), jid:luser(), jid:lserver()) -> [mod_roster:roster()]. |
88 |
|
get_roster(HostType, LUser, LServer) -> |
89 |
3173 |
Args = [HostType, LUser, LServer], |
90 |
3173 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
91 |
|
|
92 |
|
-spec get_roster_entry(mongooseim:host_type(), jid:luser(), jid:lserver(), mod_roster:contact(), |
93 |
|
mod_roster:transaction_state(), mod_roster:entry_format()) -> |
94 |
|
mod_roster:roster() | does_not_exist | error. |
95 |
|
get_roster_entry(HostType, LUser, LServer, LJid, TransactionState, Format) -> |
96 |
920 |
Args = [HostType, LUser, LServer, LJid, TransactionState, Format], |
97 |
920 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
98 |
|
|
99 |
|
-spec get_subscription_lists(mongoose_acc:t(), jid:luser(), jid:lserver()) -> [mod_roster:roster()]. |
100 |
|
get_subscription_lists(Acc, LUser, LServer) -> |
101 |
3059 |
Args = [Acc, LUser, LServer], |
102 |
3059 |
mongoose_backend:call_tracked(mongoose_acc:host_type(Acc), ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
103 |
|
|
104 |
|
-spec roster_subscribe_t(mongooseim:host_type(), mod_roster:roster()) -> ok. |
105 |
|
roster_subscribe_t(HostType, Roster) -> |
106 |
606 |
Args = [HostType, Roster], |
107 |
606 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
108 |
|
|
109 |
|
-spec update_roster_t(mongooseim:host_type(), mod_roster:roster()) -> ok. |
110 |
|
update_roster_t(HostType, Roster) -> |
111 |
120 |
Args = [HostType, Roster], |
112 |
120 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
113 |
|
|
114 |
|
-spec del_roster_t(mongooseim:host_type(), jid:luser(), jid:lserver(), mod_roster:contact()) -> ok. |
115 |
|
del_roster_t(HostType, LUser, LServer, LJid) -> |
116 |
27 |
Args = [HostType, LUser, LServer, LJid], |
117 |
27 |
mongoose_backend:call_tracked(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
118 |
|
|
119 |
|
-spec remove_user_t(mongooseim:host_type(), jid:luser(), jid:lserver()) -> ok. |
120 |
|
remove_user_t(HostType, LUser, LServer) -> |
121 |
3044 |
Args = [HostType, LUser, LServer], |
122 |
3044 |
mongoose_backend:call(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args). |
123 |
|
|
124 |
|
-spec remove_domain_t(mongooseim:host_type(), jid:lserver()) -> ok. |
125 |
|
remove_domain_t(HostType, LServer) -> |
126 |
1 |
Args = [HostType, LServer], |
127 |
1 |
case mongoose_backend:is_exported(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, 2) of |
128 |
|
true -> |
129 |
:-( |
mongoose_backend:call(HostType, ?MAIN_MODULE, ?FUNCTION_NAME, Args); |
130 |
|
false -> |
131 |
1 |
ok |
132 |
|
end. |