diff options
author | Badlop <badlop@process-one.net> | 2008-10-12 11:17:35 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2008-10-12 11:17:35 +0000 |
commit | be2f6e05177e04b8364445c3aa6e907fa52c0e35 (patch) | |
tree | f56fdc5bee6018ec87d90571f7a25a6ec73f1a0e /src/mod_proxy65/mod_proxy65_service.erl | |
parent | * src/ejabberd_app.erl: Start listeners explicitely at server (diff) |
* src/mod_proxy65/mod_proxy65.erl: Update so the listener starts
correctly (EJAB-303)
* src/mod_proxy65/mod_proxy65_service.erl: Likewise
SVN Revision: 1632
Diffstat (limited to 'src/mod_proxy65/mod_proxy65_service.erl')
-rw-r--r-- | src/mod_proxy65/mod_proxy65_service.erl | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/mod_proxy65/mod_proxy65_service.erl b/src/mod_proxy65/mod_proxy65_service.erl index 36d01b9c3..2b252c122 100644 --- a/src/mod_proxy65/mod_proxy65_service.erl +++ b/src/mod_proxy65/mod_proxy65_service.erl @@ -39,7 +39,7 @@ ]). %% API. --export([start_link/2]). +-export([start_link/2, add_listener/2, delete_listener/1]). -include("ejabberd.hrl"). -include("jlib.hrl"). @@ -55,28 +55,21 @@ acl }). -%% Unused callbacks. -handle_cast(_Request, State) -> - {noreply, State}. -code_change(_OldVsn, State, _Extra) -> - {ok, State}. -handle_call(_Request, _From, State) -> - {reply, ok, State}. -%%---------------- + +%%%------------------------ +%%% gen_server callbacks +%%%------------------------ start_link(Host, Opts) -> Proc = gen_mod:get_module_proc(Host, ?PROCNAME), gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []). init([Host, Opts]) -> - {IP, State} = parse_options(Host, Opts), - NewOpts = [Host, {ip, IP} | Opts], - ejabberd_listener:add_listener(State#state.port, mod_proxy65_stream, NewOpts), + {_IP, State} = parse_options(Host, Opts), ejabberd_router:register_route(State#state.myhost), {ok, State}. -terminate(_Reason, #state{myhost=MyHost, port=Port}) -> - catch ejabberd_listener:delete_listener(Port), +terminate(_Reason, #state{myhost=MyHost}) -> ejabberd_router:unregister_route(MyHost), ok. @@ -93,10 +86,34 @@ handle_info({route, From, To, {xmlelement, "iq", _, _} = Packet}, State) -> ok end, {noreply, State}; - handle_info(_Info, State) -> {noreply, State}. +handle_call(get_port, _From, State) -> + {reply, {port, State#state.port}, State}; +handle_call(_Request, _From, State) -> + {reply, ok, State}. + +handle_cast(_Request, State) -> + {noreply, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%------------------------ +%%% Listener management +%%%------------------------ + +add_listener(Host, Opts) -> + {IP, State} = parse_options(Host, Opts), + NewOpts = [Host, {ip, IP} | Opts], + ejabberd_listener:add_listener(State#state.port,mod_proxy65_stream,NewOpts). + +delete_listener(Host) -> + Proc = gen_mod:get_module_proc(Host, ?PROCNAME), + {port, Port} = gen_server:call(Proc, get_port), + catch ejabberd_listener:delete_listener(Port, mod_proxy65_stream). + %%%------------------------ %%% IQ Processing %%%------------------------ |