*** empty log message ***

SVN Revision: 47
This commit is contained in:
Alexey Shchepin 2003-01-22 20:40:40 +00:00
parent f0427ecab5
commit dcfaa68b7d
15 changed files with 241 additions and 97 deletions

1
src/.cvsignore Normal file
View File

@ -0,0 +1 @@
*.beam

View File

@ -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]}
]}.

View File

@ -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.

View File

@ -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}.

View File

@ -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}.

74
src/gen_iq_handler.erl Normal file
View File

@ -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.

View File

@ -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"},

View File

@ -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)};

View File

@ -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}) ->

View File

@ -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() ->

View File

@ -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,

View File

@ -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}) ->

View File

@ -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}) ->

View File

@ -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, []).

View File

@ -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).