parent
f0427ecab5
commit
dcfaa68b7d
|
@ -0,0 +1 @@
|
|||
*.beam
|
|
@ -21,6 +21,19 @@
|
|||
{8888, ejabberd_service, start, ["asd.e.localhost", "asdqwe"]}
|
||||
]}.
|
||||
|
||||
{modules, [
|
||||
{mod_register, [one_queue]},
|
||||
{mod_roster, [one_queue]},
|
||||
{mod_configure, [one_queue]},
|
||||
{mod_disco, [one_queue]},
|
||||
{mod_stats, [one_queue]},
|
||||
{mod_vcard, [one_queue]},
|
||||
{mod_offline, []},
|
||||
{mod_echo, []},
|
||||
{mod_private, [one_queue]},
|
||||
{mod_time, [one_queue]},
|
||||
{mod_version, [one_queue]}
|
||||
]}.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ init() ->
|
|||
ejabberd_s2s:start(),
|
||||
ejabberd_local:start(),
|
||||
ejabberd_listener:start(),
|
||||
load_modules(),
|
||||
loop(Port).
|
||||
|
||||
|
||||
|
@ -53,3 +54,14 @@ db_init() ->
|
|||
end,
|
||||
mnesia:start(),
|
||||
mnesia:wait_for_tables(mnesia:system_info(local_tables), infinity).
|
||||
|
||||
load_modules() ->
|
||||
case ejabberd_config:get_local_option(modules) of
|
||||
undefined ->
|
||||
ok;
|
||||
Modules ->
|
||||
lists:foreach(fun({Module, Args}) ->
|
||||
apply(Module, start, Args)
|
||||
end, Modules)
|
||||
end.
|
||||
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
|
||||
-export([start/0, init/0]).
|
||||
|
||||
-export([register_iq_handler/3]).
|
||||
-export([register_iq_handler/3,
|
||||
register_iq_handler/4]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
||||
|
@ -20,17 +21,17 @@
|
|||
|
||||
start() ->
|
||||
register(ejabberd_local, spawn(ejabberd_local, init, [])),
|
||||
mod_register:start(),
|
||||
mod_roster:start(),
|
||||
mod_configure:start(),
|
||||
mod_disco:start(),
|
||||
mod_stats:start(),
|
||||
mod_vcard:start(),
|
||||
mod_offline:start(),
|
||||
mod_echo:start(),
|
||||
mod_private:start(),
|
||||
mod_time:start(),
|
||||
mod_version:start(),
|
||||
%mod_register:start(one_queue),
|
||||
%mod_roster:start(one_queue),
|
||||
%mod_configure:start(one_queue),
|
||||
%mod_disco:start(one_queue),
|
||||
%mod_stats:start(one_queue),
|
||||
%mod_vcard:start(one_queue),
|
||||
%mod_offline:start(),
|
||||
%mod_echo:start(),
|
||||
%mod_private:start(one_queue),
|
||||
%mod_time:start(one_queue),
|
||||
%mod_version:start(one_queue),
|
||||
ok.
|
||||
|
||||
init() ->
|
||||
|
@ -47,6 +48,10 @@ loop(State) ->
|
|||
{register_iq_handler, XMLNS, Module, Function} ->
|
||||
ets:insert(State#state.iqtable, {XMLNS, Module, Function}),
|
||||
mod_disco:register_feature(XMLNS),
|
||||
loop(State);
|
||||
{register_iq_handler, XMLNS, Module, Function, Opts} ->
|
||||
ets:insert(State#state.iqtable, {XMLNS, Module, Function, Opts}),
|
||||
mod_disco:register_feature(XMLNS),
|
||||
loop(State)
|
||||
end.
|
||||
|
||||
|
@ -82,7 +87,6 @@ process_iq(State, From, To, Packet) ->
|
|||
{iq, ID, Type, XMLNS, SubEl} ->
|
||||
case jlib:is_iq_request_type(Type) of
|
||||
true ->
|
||||
% TODO
|
||||
case ets:lookup(State#state.iqtable, XMLNS) of
|
||||
[{_, Module, Function}] ->
|
||||
ResIQ = apply(Module, Function, [From, To, IQ]),
|
||||
|
@ -95,6 +99,9 @@ process_iq(State, From, To, Packet) ->
|
|||
true ->
|
||||
ok
|
||||
end;
|
||||
[{_, Module, Function, Opts}] ->
|
||||
gen_iq_handler:handle(Module, Function, Opts,
|
||||
From, To, IQ);
|
||||
[] ->
|
||||
Err = jlib:make_error_reply(
|
||||
Packet, "501", "Not Implemented"),
|
||||
|
@ -118,3 +125,6 @@ process_iq(State, From, To, Packet) ->
|
|||
|
||||
register_iq_handler(XMLNS, Module, Fun) ->
|
||||
ejabberd_local ! {register_iq_handler, XMLNS, Module, Fun}.
|
||||
|
||||
register_iq_handler(XMLNS, Module, Fun, Opts) ->
|
||||
ejabberd_local ! {register_iq_handler, XMLNS, Module, Fun, Opts}.
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
unset_presence/2,
|
||||
dirty_get_sessions_list/0,
|
||||
dirty_get_my_sessions_list/0,
|
||||
register_iq_handler/3]).
|
||||
register_iq_handler/3,
|
||||
register_iq_handler/4]).
|
||||
|
||||
-include_lib("mnemosyne/include/mnemosyne.hrl").
|
||||
-include("ejabberd.hrl").
|
||||
|
@ -73,6 +74,9 @@ loop() ->
|
|||
{register_iq_handler, XMLNS, Module, Function} ->
|
||||
ets:insert(sm_iqtable, {XMLNS, Module, Function}),
|
||||
loop();
|
||||
{register_iq_handler, XMLNS, Module, Function, Opts} ->
|
||||
ets:insert(sm_iqtable, {XMLNS, Module, Function, Opts}),
|
||||
loop();
|
||||
_ ->
|
||||
loop()
|
||||
end.
|
||||
|
@ -363,6 +367,9 @@ process_iq(From, To, Packet) ->
|
|||
true ->
|
||||
ok
|
||||
end;
|
||||
[{_, Module, Function, Opts}] ->
|
||||
gen_iq_handler:handle(Module, Function, Opts,
|
||||
From, To, IQ);
|
||||
[] ->
|
||||
Err = jlib:make_error_reply(
|
||||
Packet, "501", "Not Implemented"),
|
||||
|
@ -379,3 +386,6 @@ process_iq(From, To, Packet) ->
|
|||
register_iq_handler(XMLNS, Module, Fun) ->
|
||||
ejabberd_sm ! {register_iq_handler, XMLNS, Module, Fun}.
|
||||
|
||||
register_iq_handler(XMLNS, Module, Fun, Opts) ->
|
||||
ejabberd_sm ! {register_iq_handler, XMLNS, Module, Fun, Opts}.
|
||||
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%% File : gen_iq_handler.erl
|
||||
%%% Author : Alexey Shchepin <alexey@sevcom.net>
|
||||
%%% Purpose :
|
||||
%%% Created : 22 Jan 2003 by Alexey Shchepin <alexey@sevcom.net>
|
||||
%%% Id : $Id$
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-module(gen_iq_handler).
|
||||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
add_iq_handler/5,
|
||||
handle/6,
|
||||
process_iq/5,
|
||||
queue_init/2]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
||||
start() ->
|
||||
ok.
|
||||
|
||||
add_iq_handler(Component, NS, Module, Function, Type) ->
|
||||
case Type of
|
||||
no_queue ->
|
||||
Component:register_iq_handler(NS, Module, Function, no_queue);
|
||||
one_queue ->
|
||||
Pid = spawn(?MODULE, queue_init, [Module, Function]),
|
||||
Component:register_iq_handler(NS, Module, Function,
|
||||
{one_queue, Pid});
|
||||
parallel ->
|
||||
Component:register_iq_handler(NS, Module, Function, parallel)
|
||||
end.
|
||||
|
||||
handle(Module, Function, Opts, From, To, IQ) ->
|
||||
case Opts of
|
||||
no_queue ->
|
||||
process_iq(Module, Function, From, To, IQ);
|
||||
{one_queue, Pid} ->
|
||||
Pid ! {process_iq, From, To, IQ};
|
||||
parallel ->
|
||||
spawn(?MODULE, process_iq, [Module, Function, From, To, IQ]);
|
||||
_ ->
|
||||
todo
|
||||
end.
|
||||
|
||||
|
||||
process_iq(Module, Function, From, To, IQ) ->
|
||||
case catch Module:Function(From, To, IQ) of
|
||||
{'EXIT', Reason} ->
|
||||
?ERROR_MSG("~p", [Reason]);
|
||||
ResIQ ->
|
||||
if
|
||||
ResIQ /= ignore ->
|
||||
ejabberd_router:route(To, From,
|
||||
jlib:iq_to_xml(ResIQ));
|
||||
true ->
|
||||
ok
|
||||
end
|
||||
end.
|
||||
|
||||
queue_init(Module, Function) ->
|
||||
queue_loop(Module, Function).
|
||||
|
||||
% TODO: use gen_event
|
||||
queue_loop(Module, Function) ->
|
||||
receive
|
||||
{process_iq, From, To, IQ} ->
|
||||
process_iq(Module, Function, From, To, IQ),
|
||||
queue_loop(Module, Function);
|
||||
_ ->
|
||||
queue_loop(Module, Function)
|
||||
end.
|
|
@ -10,7 +10,7 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
-export([start/1,
|
||||
process_local_iq/3,
|
||||
process_sm_iq/3]).
|
||||
|
||||
|
@ -18,11 +18,11 @@
|
|||
-include("namespaces.hrl").
|
||||
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler(?NS_XDATA,
|
||||
?MODULE, process_local_iq),
|
||||
ejabberd_sm:register_iq_handler(?NS_XDATA,
|
||||
?MODULE, process_sm_iq),
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_XDATA,
|
||||
?MODULE, process_local_iq, Type),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_XDATA,
|
||||
?MODULE, process_sm_iq, Type),
|
||||
ok.
|
||||
|
||||
|
||||
|
@ -163,7 +163,7 @@ get_form(["config", "hostname"], Lang) ->
|
|||
{result, [{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
translate:translate(
|
||||
Lang, "DB Tables Configuration")}]},
|
||||
Lang, "Hostname Configuration")}]},
|
||||
{xmlelement, "instructions", [],
|
||||
[{xmlcdata,
|
||||
translate:translate(
|
||||
|
@ -175,6 +175,30 @@ get_form(["config", "hostname"], Lang) ->
|
|||
[{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
|
||||
]};
|
||||
|
||||
get_form(["config", "acls"], Lang) ->
|
||||
{result, [{xmlelement, "title", [],
|
||||
[{xmlcdata,
|
||||
translate:translate(
|
||||
Lang, "ACLs Configuration")}]},
|
||||
%{xmlelement, "instructions", [],
|
||||
% [{xmlcdata,
|
||||
% translate:translate(
|
||||
% Lang, "")}]},
|
||||
{xmlelement, "field", [{"type", "text-multi"},
|
||||
{"label",
|
||||
translate:translate(Lang, "ACLs")},
|
||||
{"var", "acls"}],
|
||||
lists:map(fun(S) ->
|
||||
{xmlelement, "value", [], [{xmlcdata, S}]}
|
||||
end,
|
||||
string:tokens(
|
||||
lists:flatten(io_lib:format("~p",
|
||||
[ets:tab2list(acls)])),
|
||||
"\n"))
|
||||
%{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}
|
||||
}
|
||||
]};
|
||||
|
||||
get_form(_, Lang) ->
|
||||
{error, "503", "Service Unavailable"}.
|
||||
|
||||
|
@ -324,6 +348,18 @@ get_sm_form(User, [], Lang) ->
|
|||
% [{xmlcdata,
|
||||
% translate:translate(
|
||||
% Lang, "Choose host name")}]},
|
||||
{xmlelement, "field",
|
||||
[{"type", "list-single"},
|
||||
{"label", translate:translate(Lang, "Action on user")},
|
||||
{"var", "action"}],
|
||||
[{xmlelement, "value", [], [{xmlcdata, "edit"}]},
|
||||
{xmlelement, "option",
|
||||
[{"label", translate:translate(Lang, "Edit Properties")}],
|
||||
[{xmlelement, "value", [], [{xmlcdata, "edit"}]}]},
|
||||
{xmlelement, "option",
|
||||
[{"label", translate:translate(Lang, "Remove User")}],
|
||||
[{xmlelement, "value", [], [{xmlcdata, "remove"}]}]}
|
||||
]},
|
||||
?XFIELD("text-private", "Password", "password",
|
||||
ejabberd_auth:get_password_s(User))
|
||||
%{xmlelement, "field", [{"type", "text-single"},
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0, init/0,
|
||||
-export([start/1,
|
||||
process_local_iq_items/3,
|
||||
process_local_iq_info/3,
|
||||
process_sm_iq_items/3,
|
||||
|
@ -24,23 +24,28 @@
|
|||
{iq, ID, result, XMLNS, [{xmlelement, "query",
|
||||
[{"xmlns", ?NS_DISCO_INFO}], []}]}).
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler(?NS_DISCO_ITEMS,
|
||||
?MODULE, process_local_iq_items),
|
||||
ejabberd_local:register_iq_handler(?NS_DISCO_INFO,
|
||||
?MODULE, process_local_iq_info),
|
||||
ejabberd_sm:register_iq_handler(?NS_DISCO_ITEMS,
|
||||
?MODULE, process_sm_iq_items),
|
||||
ejabberd_sm:register_iq_handler(?NS_DISCO_INFO,
|
||||
?MODULE, process_sm_iq_info),
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_DISCO_ITEMS,
|
||||
?MODULE, process_local_iq_items, Type),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_DISCO_INFO,
|
||||
?MODULE, process_local_iq_info, Type),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_DISCO_ITEMS,
|
||||
?MODULE, process_sm_iq_items, Type),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_DISCO_INFO,
|
||||
?MODULE, process_sm_iq_info, Type),
|
||||
%ejabberd_local:register_iq_handler(?NS_DISCO_ITEMS,
|
||||
% ?MODULE, process_local_iq_items),
|
||||
%ejabberd_local:register_iq_handler(?NS_DISCO_INFO,
|
||||
% ?MODULE, process_local_iq_info),
|
||||
%ejabberd_sm:register_iq_handler(?NS_DISCO_ITEMS,
|
||||
% ?MODULE, process_sm_iq_items),
|
||||
%ejabberd_sm:register_iq_handler(?NS_DISCO_INFO,
|
||||
% ?MODULE, process_sm_iq_info),
|
||||
register_feature("iq"),
|
||||
register_feature("presence"),
|
||||
register_feature("presence-invisible"),
|
||||
ok.
|
||||
|
||||
init() ->
|
||||
ok.
|
||||
|
||||
register_feature(Feature) ->
|
||||
catch ets:new(disco_features, [named_table, ordered_set, public]),
|
||||
ets:insert(disco_features, {Feature}).
|
||||
|
@ -157,9 +162,10 @@ get_local_items([], Server, Lang) ->
|
|||
|
||||
get_local_items(["config"], Server, Lang) ->
|
||||
{result,
|
||||
[?NODE("Host Name", "config/hostname"),
|
||||
?NODE("ACLs", "config/acls"),
|
||||
?NODE("Access Rules", "config/access")
|
||||
[?NODE("Host Name", "config/hostname"),
|
||||
?NODE("ACLs", "config/acls"),
|
||||
?NODE("Access Rules", "config/access"),
|
||||
?NODE("Loaded Modules", "config/modules")
|
||||
]};
|
||||
|
||||
get_local_items(["config", _], Server, Lang) ->
|
||||
|
@ -174,6 +180,9 @@ get_local_items(["all users"], Server, Lang) ->
|
|||
get_local_items(["outgoing s2s"], Server, Lang) ->
|
||||
{result, get_outgoing_s2s(Lang)};
|
||||
|
||||
get_local_items(["outgoing s2s", To], Server, Lang) ->
|
||||
{result, get_outgoing_s2s(Lang, To)};
|
||||
|
||||
get_local_items(["running nodes"], Server, Lang) ->
|
||||
{result, get_running_nodes(Lang)};
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
-export([start/1,
|
||||
process_local_iq/3]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
@ -18,11 +18,12 @@
|
|||
|
||||
-record(private_storage, {userns, xml}).
|
||||
|
||||
start() ->
|
||||
start(Type) ->
|
||||
mnesia:create_table(private_storage,
|
||||
[{disc_only_copies, [node()]},
|
||||
{attributes, record_info(fields, private_storage)}]),
|
||||
ejabberd_local:register_iq_handler(?NS_PRIVATE, ?MODULE, process_local_iq).
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_PRIVATE,
|
||||
?MODULE, process_local_iq, Type).
|
||||
|
||||
|
||||
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||
|
|
|
@ -10,13 +10,14 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0, init/0, process_iq/3]).
|
||||
-export([start/1, init/0, process_iq/3]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
-include("namespaces.hrl").
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler("jabber:iq:register",
|
||||
?MODULE, process_iq),
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_REGISTER,
|
||||
?MODULE, process_iq, Type),
|
||||
ok.
|
||||
|
||||
init() ->
|
||||
|
|
|
@ -12,8 +12,9 @@
|
|||
|
||||
-export([]).
|
||||
|
||||
-export([start/0, init/0,
|
||||
-export([start/1,
|
||||
process_iq/3,
|
||||
process_local_iq/3,
|
||||
get_subscription_lists/1,
|
||||
in_subscription/3,
|
||||
out_subscription/3]).
|
||||
|
@ -32,40 +33,19 @@
|
|||
xattrs = [],
|
||||
xs = []}).
|
||||
|
||||
-define(ME, ejabberd_mod_roster).
|
||||
|
||||
start() ->
|
||||
register(?ME, spawn(mod_roster, init, [])).
|
||||
|
||||
init() ->
|
||||
start(Type) ->
|
||||
mnesia:create_table(roster,[{disc_copies, [node()]},
|
||||
{attributes, record_info(fields, roster)}]),
|
||||
mnesia:add_table_index(roster, user),
|
||||
ejabberd_local:register_iq_handler(?NS_ROSTER,
|
||||
?MODULE, process_iq),
|
||||
loop().
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_ROSTER,
|
||||
?MODULE, process_local_iq, Type).
|
||||
|
||||
loop() ->
|
||||
receive
|
||||
{process_iq, From, To, {iq, ID, Type, XMLNS, SubEl}} ->
|
||||
case Type of
|
||||
set ->
|
||||
ResIQ = process_iq_set(From, To,
|
||||
{iq, ID, Type, XMLNS, SubEl}),
|
||||
ejabberd_router ! {route,
|
||||
To,
|
||||
From,
|
||||
jlib:iq_to_xml(ResIQ)},
|
||||
loop();
|
||||
get ->
|
||||
ResIQ = process_iq_get(From, To,
|
||||
{iq, ID, Type, XMLNS, SubEl}),
|
||||
ejabberd_router ! {route,
|
||||
To,
|
||||
From,
|
||||
jlib:iq_to_xml(ResIQ)},
|
||||
loop()
|
||||
end
|
||||
process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
|
||||
case Type of
|
||||
set ->
|
||||
process_iq_set(From, To, IQ);
|
||||
get ->
|
||||
process_iq_get(From, To, IQ)
|
||||
end.
|
||||
|
||||
|
||||
|
@ -75,7 +55,7 @@ process_iq(From, To, IQ) ->
|
|||
{_, Server, _} = From,
|
||||
case ?MYNAME of
|
||||
Server ->
|
||||
?ME ! {process_iq, From, To, IQ},
|
||||
process_local_iq(From, To, IQ),
|
||||
ignore;
|
||||
_ ->
|
||||
{iq, ID, error, XMLNS,
|
||||
|
|
|
@ -10,13 +10,14 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
-export([start/1,
|
||||
process_local_iq/3]).
|
||||
|
||||
-include("namespaces.hrl").
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler(?NS_STATS, ?MODULE, process_local_iq).
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_STATS,
|
||||
?MODULE, process_local_iq, Type).
|
||||
|
||||
|
||||
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||
|
|
|
@ -10,19 +10,16 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
-export([start/1,
|
||||
process_local_iq/3]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
-include("namespaces.hrl").
|
||||
|
||||
|
||||
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler(?NS_TIME,
|
||||
?MODULE, process_local_iq).
|
||||
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_TIME,
|
||||
?MODULE, process_local_iq, Type).
|
||||
|
||||
|
||||
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0, init/0,
|
||||
-export([start/1, init/0,
|
||||
process_local_iq/3,
|
||||
process_sm_iq/3,
|
||||
reindex_vcards/0]).
|
||||
|
@ -35,7 +35,7 @@
|
|||
-record(vcard, {user, vcard}).
|
||||
|
||||
|
||||
start() ->
|
||||
start(Type) ->
|
||||
mnesia:create_table(vcard, [{disc_only_copies, [node()]},
|
||||
{attributes, record_info(fields, vcard)}]),
|
||||
mnesia:create_table(vcard_search,
|
||||
|
@ -53,10 +53,10 @@ start() ->
|
|||
mnesia:add_table_index(vcard_search, lorgname),
|
||||
mnesia:add_table_index(vcard_search, lorgunit),
|
||||
|
||||
ejabberd_local:register_iq_handler(?NS_VCARD,
|
||||
?MODULE, process_local_iq),
|
||||
ejabberd_sm:register_iq_handler(?NS_VCARD,
|
||||
?MODULE, process_sm_iq),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_VCARD,
|
||||
?MODULE, process_local_iq, Type),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_VCARD,
|
||||
?MODULE, process_sm_iq, Type),
|
||||
spawn(?MODULE, init, []).
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-author('alexey@sevcom.net').
|
||||
-vsn('$Revision$ ').
|
||||
|
||||
-export([start/0,
|
||||
-export([start/1,
|
||||
process_local_iq/3]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
@ -18,10 +18,9 @@
|
|||
|
||||
|
||||
|
||||
|
||||
start() ->
|
||||
ejabberd_local:register_iq_handler(?NS_VERSION,
|
||||
?MODULE, process_local_iq).
|
||||
start(Type) ->
|
||||
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_VERSION,
|
||||
?MODULE, process_local_iq, Type).
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue