diff options
author | Alexey Shchepin <alexey@process-one.net> | 2005-06-20 03:18:13 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2005-06-20 03:18:13 +0000 |
commit | 4098c3ecbae91929039410ddf45f400b6e87db39 (patch) | |
tree | 752f096271a724d865377e34d896529229756808 /src/mod_pubsub/mod_pubsub.erl | |
parent | * src/web/ejabberd_web_admin.erl: Bugfix (diff) |
* (all): Enhanced virtual hosting support
SVN Revision: 370
Diffstat (limited to 'src/mod_pubsub/mod_pubsub.erl')
-rw-r--r-- | src/mod_pubsub/mod_pubsub.erl | 84 |
1 files changed, 31 insertions, 53 deletions
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 40cdabc44..ee4ce1c28 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -12,10 +12,10 @@ -behaviour(gen_mod). --export([start/1, - init/3, +-export([start/2, + init/4, loop/2, - stop/0, + stop/1, system_continue/3, system_terminate/4, system_code_change/4]). @@ -37,37 +37,34 @@ -define(PROCNAME, ejabberd_mod_pubsub). -start(Opts) -> +start(Host, Opts) -> mnesia:create_table(pubsub_node, [{disc_only_copies, [node()]}, {attributes, record_info(fields, pubsub_node)}]), - Hosts = gen_mod:get_hosts(Opts, "pubsub."), - Host = hd(Hosts), - update_table(Host), + MyHost = gen_mod:get_opt(host, Opts, "pubsub." ++ Host), + update_table(MyHost), mnesia:add_table_index(pubsub_node, host_parent), ServedHosts = gen_mod:get_opt(served_hosts, Opts, []), - register(?PROCNAME, - proc_lib:spawn_link(?MODULE, init, [Hosts, ServedHosts, self()])). + register(gen_mod:get_module_proc(Host, ?PROCNAME), + proc_lib:spawn_link(?MODULE, init, + [MyHost, Host, ServedHosts, self()])). -define(MYJID, #jid{user = "", server = Host, resource = "", luser = "", lserver = Host, lresource = ""}). -init(Hosts, ServedHosts, Parent) -> - ejabberd_router:register_routes(Hosts), - lists:foreach( - fun(Host) -> - create_new_node(Host, ["pubsub"], ?MYJID), - create_new_node(Host, ["pubsub", "nodes"], ?MYJID), - create_new_node(Host, ["home"], ?MYJID), - create_new_node(Host, ["home", find_my_host(Host)], ?MYJID), - lists:foreach(fun(H) -> - create_new_node(Host, ["home", H], ?MYJID) - end, ServedHosts) - end, Hosts), - loop(Hosts, Parent). - -loop(Hosts, Parent) -> +init(Host, ServerHost, ServedHosts, Parent) -> + ejabberd_router:register_route(Host), + create_new_node(Host, ["pubsub"], ?MYJID), + create_new_node(Host, ["pubsub", "nodes"], ?MYJID), + create_new_node(Host, ["home"], ?MYJID), + create_new_node(Host, ["home", ServerHost], ?MYJID), + lists:foreach(fun(H) -> + create_new_node(Host, ["home", H], ?MYJID) + end, ServedHosts), + loop(Host, Parent). + +loop(Host, Parent) -> receive {route, From, To, Packet} -> case catch do_route(To#jid.lserver, From, To, Packet) of @@ -76,19 +73,19 @@ loop(Hosts, Parent) -> _ -> ok end, - loop(Hosts, Parent); + loop(Host, Parent); {room_destroyed, Room} -> ets:delete(muc_online_room, Room), - loop(Hosts, Parent); + loop(Host, Parent); stop -> - ejabberd_router:unregister_routes(Hosts), + ejabberd_router:unregister_route(Host), ok; reload -> - ?MODULE:loop(Hosts, Parent); + ?MODULE:loop(Host, Parent); {system, From, Request} -> - sys:handle_system_msg(Request, From, Parent, ?MODULE, [], Hosts); + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], Host); _ -> - loop(Hosts, Parent) + loop(Host, Parent) end. @@ -202,9 +199,10 @@ do_route(Host, From, To, Packet) -> -stop() -> - ?PROCNAME ! stop, - {wait, ?PROCNAME}. +stop(Host) -> + Proc = gen_mod:get_module_proc(Host, ?PROCNAME), + Proc ! stop, + {wait, Proc}. @@ -1177,26 +1175,6 @@ system_code_change(State, _Mod, Ver, _Extra) -> -find_my_host(LServer) -> - Parts = string:tokens(LServer, "."), - find_my_host(Parts, ?MYHOSTS). - -find_my_host([], _Hosts) -> - ?MYNAME; -find_my_host([_ | Tail] = Parts, Hosts) -> - Domain = parts_to_string(Parts), - case lists:member(Domain, Hosts) of - true -> - Domain; - false -> - find_my_host(Tail, Hosts) - end. - -parts_to_string(Parts) -> - string:strip(lists:flatten(lists:map(fun(S) -> [S, $.] end, Parts)), - right, $.). - - update_table(Host) -> Fields = record_info(fields, pubsub_node), |