aboutsummaryrefslogtreecommitdiff
path: root/src/mod_proxy65
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_proxy65')
-rw-r--r--src/mod_proxy65/mod_proxy65_service.erl22
-rw-r--r--src/mod_proxy65/mod_proxy65_stream.erl3
2 files changed, 14 insertions, 11 deletions
diff --git a/src/mod_proxy65/mod_proxy65_service.erl b/src/mod_proxy65/mod_proxy65_service.erl
index ba95ad4a3..ee11e3db0 100644
--- a/src/mod_proxy65/mod_proxy65_service.erl
+++ b/src/mod_proxy65/mod_proxy65_service.erl
@@ -52,6 +52,7 @@
name,
stream_addr,
port,
+ ip,
acl
}).
@@ -65,7 +66,7 @@ start_link(Host, Opts) ->
gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
init([Host, Opts]) ->
- {_IP, State} = parse_options(Host, Opts),
+ State = parse_options(Host, Opts),
ejabberd_router:register_route(State#state.myhost),
{ok, State}.
@@ -89,8 +90,8 @@ handle_info({route, From, To, {xmlelement, "iq", _, _} = Packet}, State) ->
handle_info(_Info, State) ->
{noreply, State}.
-handle_call(get_port, _From, State) ->
- {reply, {port, State#state.port}, State};
+handle_call(get_port_ip, _From, State) ->
+ {reply, {port_ip, State#state.port, State#state.ip}, State};
handle_call(_Request, _From, State) ->
{reply, ok, State}.
@@ -105,14 +106,14 @@ code_change(_OldVsn, State, _Extra) ->
%%%------------------------
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).
+ State = parse_options(Host, Opts),
+ NewOpts = [Host | Opts],
+ ejabberd_listener:add_listener({State#state.port, State#state.ip}, 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).
+ {port_ip, Port, IP} = gen_server:call(Proc, get_port_ip),
+ catch ejabberd_listener:delete_listener({Port, IP}, mod_proxy65_stream).
%%%------------------------
%%% IQ Processing
@@ -219,12 +220,13 @@ parse_options(ServerHost, Opts) ->
end,
StrIP = inet_parse:ntoa(IP),
StreamAddr = [{"jid", MyHost}, {"host", StrIP}, {"port", integer_to_list(Port)}],
- {IP, #state{myhost = MyHost,
+ #state{myhost = MyHost,
serverhost = ServerHost,
name = Name,
port = Port,
+ ip = IP,
stream_addr = StreamAddr,
- acl = ACL}}.
+ acl = ACL}.
%% Return the IP of the proxy host, or if not found, the ip of the xmpp domain
get_proxy_or_domainip(ServerHost, MyHost) ->
diff --git a/src/mod_proxy65/mod_proxy65_stream.erl b/src/mod_proxy65/mod_proxy65_stream.erl
index 40505041b..c6d0103ae 100644
--- a/src/mod_proxy65/mod_proxy65_stream.erl
+++ b/src/mod_proxy65/mod_proxy65_stream.erl
@@ -78,7 +78,8 @@ code_change(_OldVsn, StateName, StateData, _Extra) ->
{ok, StateName, StateData}.
%%-------------------------------
-start({gen_tcp, Socket}, [Host | Opts]) ->
+start({gen_tcp, Socket}, Opts1) ->
+ {[Host], Opts} = lists:partition(fun(O) -> is_list(O) end, Opts1),
Supervisor = gen_mod:get_module_proc(Host, ejabberd_mod_proxy65_sup),
supervisor:start_child(Supervisor, [Socket, Host, Opts]).