parent
f0427ecab5
commit
dcfaa68b7d
|
@ -0,0 +1 @@
|
||||||
|
*.beam
|
|
@ -21,6 +21,19 @@
|
||||||
{8888, ejabberd_service, start, ["asd.e.localhost", "asdqwe"]}
|
{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_s2s:start(),
|
||||||
ejabberd_local:start(),
|
ejabberd_local:start(),
|
||||||
ejabberd_listener:start(),
|
ejabberd_listener:start(),
|
||||||
|
load_modules(),
|
||||||
loop(Port).
|
loop(Port).
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,3 +54,14 @@ db_init() ->
|
||||||
end,
|
end,
|
||||||
mnesia:start(),
|
mnesia:start(),
|
||||||
mnesia:wait_for_tables(mnesia:system_info(local_tables), infinity).
|
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([start/0, init/0]).
|
||||||
|
|
||||||
-export([register_iq_handler/3]).
|
-export([register_iq_handler/3,
|
||||||
|
register_iq_handler/4]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
|
||||||
|
@ -20,17 +21,17 @@
|
||||||
|
|
||||||
start() ->
|
start() ->
|
||||||
register(ejabberd_local, spawn(ejabberd_local, init, [])),
|
register(ejabberd_local, spawn(ejabberd_local, init, [])),
|
||||||
mod_register:start(),
|
%mod_register:start(one_queue),
|
||||||
mod_roster:start(),
|
%mod_roster:start(one_queue),
|
||||||
mod_configure:start(),
|
%mod_configure:start(one_queue),
|
||||||
mod_disco:start(),
|
%mod_disco:start(one_queue),
|
||||||
mod_stats:start(),
|
%mod_stats:start(one_queue),
|
||||||
mod_vcard:start(),
|
%mod_vcard:start(one_queue),
|
||||||
mod_offline:start(),
|
%mod_offline:start(),
|
||||||
mod_echo:start(),
|
%mod_echo:start(),
|
||||||
mod_private:start(),
|
%mod_private:start(one_queue),
|
||||||
mod_time:start(),
|
%mod_time:start(one_queue),
|
||||||
mod_version:start(),
|
%mod_version:start(one_queue),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
init() ->
|
init() ->
|
||||||
|
@ -47,6 +48,10 @@ loop(State) ->
|
||||||
{register_iq_handler, XMLNS, Module, Function} ->
|
{register_iq_handler, XMLNS, Module, Function} ->
|
||||||
ets:insert(State#state.iqtable, {XMLNS, Module, Function}),
|
ets:insert(State#state.iqtable, {XMLNS, Module, Function}),
|
||||||
mod_disco:register_feature(XMLNS),
|
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)
|
loop(State)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -82,7 +87,6 @@ process_iq(State, From, To, Packet) ->
|
||||||
{iq, ID, Type, XMLNS, SubEl} ->
|
{iq, ID, Type, XMLNS, SubEl} ->
|
||||||
case jlib:is_iq_request_type(Type) of
|
case jlib:is_iq_request_type(Type) of
|
||||||
true ->
|
true ->
|
||||||
% TODO
|
|
||||||
case ets:lookup(State#state.iqtable, XMLNS) of
|
case ets:lookup(State#state.iqtable, XMLNS) of
|
||||||
[{_, Module, Function}] ->
|
[{_, Module, Function}] ->
|
||||||
ResIQ = apply(Module, Function, [From, To, IQ]),
|
ResIQ = apply(Module, Function, [From, To, IQ]),
|
||||||
|
@ -95,6 +99,9 @@ process_iq(State, From, To, Packet) ->
|
||||||
true ->
|
true ->
|
||||||
ok
|
ok
|
||||||
end;
|
end;
|
||||||
|
[{_, Module, Function, Opts}] ->
|
||||||
|
gen_iq_handler:handle(Module, Function, Opts,
|
||||||
|
From, To, IQ);
|
||||||
[] ->
|
[] ->
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
Packet, "501", "Not Implemented"),
|
Packet, "501", "Not Implemented"),
|
||||||
|
@ -118,3 +125,6 @@ process_iq(State, From, To, Packet) ->
|
||||||
|
|
||||||
register_iq_handler(XMLNS, Module, Fun) ->
|
register_iq_handler(XMLNS, Module, Fun) ->
|
||||||
ejabberd_local ! {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,
|
unset_presence/2,
|
||||||
dirty_get_sessions_list/0,
|
dirty_get_sessions_list/0,
|
||||||
dirty_get_my_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_lib("mnemosyne/include/mnemosyne.hrl").
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
@ -73,6 +74,9 @@ loop() ->
|
||||||
{register_iq_handler, XMLNS, Module, Function} ->
|
{register_iq_handler, XMLNS, Module, Function} ->
|
||||||
ets:insert(sm_iqtable, {XMLNS, Module, Function}),
|
ets:insert(sm_iqtable, {XMLNS, Module, Function}),
|
||||||
loop();
|
loop();
|
||||||
|
{register_iq_handler, XMLNS, Module, Function, Opts} ->
|
||||||
|
ets:insert(sm_iqtable, {XMLNS, Module, Function, Opts}),
|
||||||
|
loop();
|
||||||
_ ->
|
_ ->
|
||||||
loop()
|
loop()
|
||||||
end.
|
end.
|
||||||
|
@ -363,6 +367,9 @@ process_iq(From, To, Packet) ->
|
||||||
true ->
|
true ->
|
||||||
ok
|
ok
|
||||||
end;
|
end;
|
||||||
|
[{_, Module, Function, Opts}] ->
|
||||||
|
gen_iq_handler:handle(Module, Function, Opts,
|
||||||
|
From, To, IQ);
|
||||||
[] ->
|
[] ->
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
Packet, "501", "Not Implemented"),
|
Packet, "501", "Not Implemented"),
|
||||||
|
@ -379,3 +386,6 @@ process_iq(From, To, Packet) ->
|
||||||
register_iq_handler(XMLNS, Module, Fun) ->
|
register_iq_handler(XMLNS, Module, Fun) ->
|
||||||
ejabberd_sm ! {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').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0,
|
-export([start/1,
|
||||||
process_local_iq/3,
|
process_local_iq/3,
|
||||||
process_sm_iq/3]).
|
process_sm_iq/3]).
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@
|
||||||
-include("namespaces.hrl").
|
-include("namespaces.hrl").
|
||||||
|
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
ejabberd_local:register_iq_handler(?NS_XDATA,
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_XDATA,
|
||||||
?MODULE, process_local_iq),
|
?MODULE, process_local_iq, Type),
|
||||||
ejabberd_sm:register_iq_handler(?NS_XDATA,
|
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_XDATA,
|
||||||
?MODULE, process_sm_iq),
|
?MODULE, process_sm_iq, Type),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ get_form(["config", "hostname"], Lang) ->
|
||||||
{result, [{xmlelement, "title", [],
|
{result, [{xmlelement, "title", [],
|
||||||
[{xmlcdata,
|
[{xmlcdata,
|
||||||
translate:translate(
|
translate:translate(
|
||||||
Lang, "DB Tables Configuration")}]},
|
Lang, "Hostname Configuration")}]},
|
||||||
{xmlelement, "instructions", [],
|
{xmlelement, "instructions", [],
|
||||||
[{xmlcdata,
|
[{xmlcdata,
|
||||||
translate:translate(
|
translate:translate(
|
||||||
|
@ -175,6 +175,30 @@ get_form(["config", "hostname"], Lang) ->
|
||||||
[{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
|
[{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) ->
|
get_form(_, Lang) ->
|
||||||
{error, "503", "Service Unavailable"}.
|
{error, "503", "Service Unavailable"}.
|
||||||
|
|
||||||
|
@ -324,6 +348,18 @@ get_sm_form(User, [], Lang) ->
|
||||||
% [{xmlcdata,
|
% [{xmlcdata,
|
||||||
% translate:translate(
|
% translate:translate(
|
||||||
% Lang, "Choose host name")}]},
|
% 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",
|
?XFIELD("text-private", "Password", "password",
|
||||||
ejabberd_auth:get_password_s(User))
|
ejabberd_auth:get_password_s(User))
|
||||||
%{xmlelement, "field", [{"type", "text-single"},
|
%{xmlelement, "field", [{"type", "text-single"},
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0, init/0,
|
-export([start/1,
|
||||||
process_local_iq_items/3,
|
process_local_iq_items/3,
|
||||||
process_local_iq_info/3,
|
process_local_iq_info/3,
|
||||||
process_sm_iq_items/3,
|
process_sm_iq_items/3,
|
||||||
|
@ -24,23 +24,28 @@
|
||||||
{iq, ID, result, XMLNS, [{xmlelement, "query",
|
{iq, ID, result, XMLNS, [{xmlelement, "query",
|
||||||
[{"xmlns", ?NS_DISCO_INFO}], []}]}).
|
[{"xmlns", ?NS_DISCO_INFO}], []}]}).
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
ejabberd_local:register_iq_handler(?NS_DISCO_ITEMS,
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_DISCO_ITEMS,
|
||||||
?MODULE, process_local_iq_items),
|
?MODULE, process_local_iq_items, Type),
|
||||||
ejabberd_local:register_iq_handler(?NS_DISCO_INFO,
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_DISCO_INFO,
|
||||||
?MODULE, process_local_iq_info),
|
?MODULE, process_local_iq_info, Type),
|
||||||
ejabberd_sm:register_iq_handler(?NS_DISCO_ITEMS,
|
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_DISCO_ITEMS,
|
||||||
?MODULE, process_sm_iq_items),
|
?MODULE, process_sm_iq_items, Type),
|
||||||
ejabberd_sm:register_iq_handler(?NS_DISCO_INFO,
|
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_DISCO_INFO,
|
||||||
?MODULE, process_sm_iq_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("iq"),
|
||||||
register_feature("presence"),
|
register_feature("presence"),
|
||||||
register_feature("presence-invisible"),
|
register_feature("presence-invisible"),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
init() ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
register_feature(Feature) ->
|
register_feature(Feature) ->
|
||||||
catch ets:new(disco_features, [named_table, ordered_set, public]),
|
catch ets:new(disco_features, [named_table, ordered_set, public]),
|
||||||
ets:insert(disco_features, {Feature}).
|
ets:insert(disco_features, {Feature}).
|
||||||
|
@ -157,9 +162,10 @@ get_local_items([], Server, Lang) ->
|
||||||
|
|
||||||
get_local_items(["config"], Server, Lang) ->
|
get_local_items(["config"], Server, Lang) ->
|
||||||
{result,
|
{result,
|
||||||
[?NODE("Host Name", "config/hostname"),
|
[?NODE("Host Name", "config/hostname"),
|
||||||
?NODE("ACLs", "config/acls"),
|
?NODE("ACLs", "config/acls"),
|
||||||
?NODE("Access Rules", "config/access")
|
?NODE("Access Rules", "config/access"),
|
||||||
|
?NODE("Loaded Modules", "config/modules")
|
||||||
]};
|
]};
|
||||||
|
|
||||||
get_local_items(["config", _], Server, Lang) ->
|
get_local_items(["config", _], Server, Lang) ->
|
||||||
|
@ -174,6 +180,9 @@ get_local_items(["all users"], Server, Lang) ->
|
||||||
get_local_items(["outgoing s2s"], Server, Lang) ->
|
get_local_items(["outgoing s2s"], Server, Lang) ->
|
||||||
{result, get_outgoing_s2s(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) ->
|
get_local_items(["running nodes"], Server, Lang) ->
|
||||||
{result, get_running_nodes(Lang)};
|
{result, get_running_nodes(Lang)};
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0,
|
-export([start/1,
|
||||||
process_local_iq/3]).
|
process_local_iq/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
@ -18,11 +18,12 @@
|
||||||
|
|
||||||
-record(private_storage, {userns, xml}).
|
-record(private_storage, {userns, xml}).
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
mnesia:create_table(private_storage,
|
mnesia:create_table(private_storage,
|
||||||
[{disc_only_copies, [node()]},
|
[{disc_only_copies, [node()]},
|
||||||
{attributes, record_info(fields, private_storage)}]),
|
{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}) ->
|
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||||
|
|
|
@ -10,13 +10,14 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0, init/0, process_iq/3]).
|
-export([start/1, init/0, process_iq/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
-include("namespaces.hrl").
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
ejabberd_local:register_iq_handler("jabber:iq:register",
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_REGISTER,
|
||||||
?MODULE, process_iq),
|
?MODULE, process_iq, Type),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
init() ->
|
init() ->
|
||||||
|
|
|
@ -12,8 +12,9 @@
|
||||||
|
|
||||||
-export([]).
|
-export([]).
|
||||||
|
|
||||||
-export([start/0, init/0,
|
-export([start/1,
|
||||||
process_iq/3,
|
process_iq/3,
|
||||||
|
process_local_iq/3,
|
||||||
get_subscription_lists/1,
|
get_subscription_lists/1,
|
||||||
in_subscription/3,
|
in_subscription/3,
|
||||||
out_subscription/3]).
|
out_subscription/3]).
|
||||||
|
@ -32,40 +33,19 @@
|
||||||
xattrs = [],
|
xattrs = [],
|
||||||
xs = []}).
|
xs = []}).
|
||||||
|
|
||||||
-define(ME, ejabberd_mod_roster).
|
start(Type) ->
|
||||||
|
|
||||||
start() ->
|
|
||||||
register(?ME, spawn(mod_roster, init, [])).
|
|
||||||
|
|
||||||
init() ->
|
|
||||||
mnesia:create_table(roster,[{disc_copies, [node()]},
|
mnesia:create_table(roster,[{disc_copies, [node()]},
|
||||||
{attributes, record_info(fields, roster)}]),
|
{attributes, record_info(fields, roster)}]),
|
||||||
mnesia:add_table_index(roster, user),
|
mnesia:add_table_index(roster, user),
|
||||||
ejabberd_local:register_iq_handler(?NS_ROSTER,
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_ROSTER,
|
||||||
?MODULE, process_iq),
|
?MODULE, process_local_iq, Type).
|
||||||
loop().
|
|
||||||
|
|
||||||
loop() ->
|
process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
|
||||||
receive
|
case Type of
|
||||||
{process_iq, From, To, {iq, ID, Type, XMLNS, SubEl}} ->
|
set ->
|
||||||
case Type of
|
process_iq_set(From, To, IQ);
|
||||||
set ->
|
get ->
|
||||||
ResIQ = process_iq_set(From, To,
|
process_iq_get(From, To, IQ)
|
||||||
{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
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,7 +55,7 @@ process_iq(From, To, IQ) ->
|
||||||
{_, Server, _} = From,
|
{_, Server, _} = From,
|
||||||
case ?MYNAME of
|
case ?MYNAME of
|
||||||
Server ->
|
Server ->
|
||||||
?ME ! {process_iq, From, To, IQ},
|
process_local_iq(From, To, IQ),
|
||||||
ignore;
|
ignore;
|
||||||
_ ->
|
_ ->
|
||||||
{iq, ID, error, XMLNS,
|
{iq, ID, error, XMLNS,
|
||||||
|
|
|
@ -10,13 +10,14 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0,
|
-export([start/1,
|
||||||
process_local_iq/3]).
|
process_local_iq/3]).
|
||||||
|
|
||||||
-include("namespaces.hrl").
|
-include("namespaces.hrl").
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
ejabberd_local:register_iq_handler(?NS_STATS, ?MODULE, process_local_iq).
|
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}) ->
|
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||||
|
|
|
@ -10,19 +10,16 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0,
|
-export([start/1,
|
||||||
process_local_iq/3]).
|
process_local_iq/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
-include("namespaces.hrl").
|
-include("namespaces.hrl").
|
||||||
|
|
||||||
|
|
||||||
|
start(Type) ->
|
||||||
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_TIME,
|
||||||
start() ->
|
?MODULE, process_local_iq, Type).
|
||||||
ejabberd_local:register_iq_handler(?NS_TIME,
|
|
||||||
?MODULE, process_local_iq).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0, init/0,
|
-export([start/1, init/0,
|
||||||
process_local_iq/3,
|
process_local_iq/3,
|
||||||
process_sm_iq/3,
|
process_sm_iq/3,
|
||||||
reindex_vcards/0]).
|
reindex_vcards/0]).
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
-record(vcard, {user, vcard}).
|
-record(vcard, {user, vcard}).
|
||||||
|
|
||||||
|
|
||||||
start() ->
|
start(Type) ->
|
||||||
mnesia:create_table(vcard, [{disc_only_copies, [node()]},
|
mnesia:create_table(vcard, [{disc_only_copies, [node()]},
|
||||||
{attributes, record_info(fields, vcard)}]),
|
{attributes, record_info(fields, vcard)}]),
|
||||||
mnesia:create_table(vcard_search,
|
mnesia:create_table(vcard_search,
|
||||||
|
@ -53,10 +53,10 @@ start() ->
|
||||||
mnesia:add_table_index(vcard_search, lorgname),
|
mnesia:add_table_index(vcard_search, lorgname),
|
||||||
mnesia:add_table_index(vcard_search, lorgunit),
|
mnesia:add_table_index(vcard_search, lorgunit),
|
||||||
|
|
||||||
ejabberd_local:register_iq_handler(?NS_VCARD,
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_VCARD,
|
||||||
?MODULE, process_local_iq),
|
?MODULE, process_local_iq, Type),
|
||||||
ejabberd_sm:register_iq_handler(?NS_VCARD,
|
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_VCARD,
|
||||||
?MODULE, process_sm_iq),
|
?MODULE, process_sm_iq, Type),
|
||||||
spawn(?MODULE, init, []).
|
spawn(?MODULE, init, []).
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([start/0,
|
-export([start/1,
|
||||||
process_local_iq/3]).
|
process_local_iq/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
@ -18,10 +18,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
start(Type) ->
|
||||||
start() ->
|
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_VERSION,
|
||||||
ejabberd_local:register_iq_handler(?NS_VERSION,
|
?MODULE, process_local_iq, Type).
|
||||||
?MODULE, process_local_iq).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue