]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_proxy65/mod_proxy65.erl: Update so the listener starts
authorBadlop <badlop@process-one.net>
Sun, 12 Oct 2008 11:17:35 +0000 (11:17 +0000)
committerBadlop <badlop@process-one.net>
Sun, 12 Oct 2008 11:17:35 +0000 (11:17 +0000)
correctly (EJAB-303)
* src/mod_proxy65/mod_proxy65_service.erl: Likewise

SVN Revision: 1632

ChangeLog
src/mod_proxy65/mod_proxy65.erl
src/mod_proxy65/mod_proxy65_service.erl

index f1a23e5ccecaa96e49a657cb88026d1363496c26..ecbe9cf747fac24d344b6a0752a4fc4ed3870a84 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2008-10-12  Badlop  <badlop@process-one.net>
 
+       * src/mod_proxy65/mod_proxy65.erl: Update so the listener starts
+       correctly (EJAB-303)
+       * src/mod_proxy65/mod_proxy65_service.erl: Likewise
+
        * src/ejabberd_app.erl: Start listeners explicitely at server
        start after everything else (EJAB-303). Implement support in
        ejabberd for 'independent listeners', which handle their
index 67f900520999a6aad75405bea2e772bac6518d02..cf00777af00badb7f027b55b9b3290833c62c1de 100644 (file)
@@ -42,6 +42,7 @@
 -define(PROCNAME, ejabberd_mod_proxy65).
 
 start(Host, Opts) ->
+    mod_proxy65_service:add_listener(Host, Opts),
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
     ChildSpec = {
       Proc, {?MODULE, start_link, [Host, Opts]},
@@ -50,6 +51,7 @@ start(Host, Opts) ->
     supervisor:start_child(ejabberd_sup, ChildSpec).
 
 stop(Host) ->
+    mod_proxy65_service:delete_listener(Host),
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
     supervisor:terminate_child(ejabberd_sup, Proc),
     supervisor:delete_child(ejabberd_sup, Proc).
index 36d01b9c34262da1eb0aa4772a40ae38f011450f..2b252c1222a9f23386e8ae234f34bb810b741c34 100644 (file)
@@ -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").
          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
 %%%------------------------