]> granicus.if.org Git - ejabberd/commitdiff
Make sure all hooks are called with proper host
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 22 Feb 2017 16:45:12 +0000 (19:45 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 22 Feb 2017 16:45:12 +0000 (19:45 +0300)
src/ejabberd_s2s_out.erl

index 909177266537c7e5fdde6abcca8201216e85315e..32dda56ad554453aa3f073b55b968ed1c11ba540 100644 (file)
@@ -216,46 +216,48 @@ dns_timeout(#{server := LServer}) ->
 handle_auth_success(Mech, #{sockmod := SockMod,
                            socket := Socket, ip := IP,
                            remote_server := RServer,
+                           server_host := ServerHost,
                            server := LServer} = State) ->
     ?INFO_MSG("(~s) Accepted outbound s2s ~s authentication ~s -> ~s (~s)",
              [SockMod:pp(Socket), Mech, LServer, RServer,
               ejabberd_config:may_hide_data(jlib:ip_to_list(IP))]),
-    ejabberd_hooks:run_fold(s2s_out_auth_result, LServer, State, [true]).
+    ejabberd_hooks:run_fold(s2s_out_auth_result, ServerHost, State, [true]).
 
 handle_auth_failure(Mech, Reason,
                    #{sockmod := SockMod,
                      socket := Socket, ip := IP,
                      remote_server := RServer,
+                     server_host := ServerHost,
                      server := LServer} = State) ->
     ?INFO_MSG("(~s) Failed outbound s2s ~s authentication ~s -> ~s (~s): ~s",
              [SockMod:pp(Socket), Mech, LServer, RServer,
               ejabberd_config:may_hide_data(jlib:ip_to_list(IP)),
               xmpp_stream_out:format_error(Reason)]),
-    ejabberd_hooks:run_fold(s2s_out_auth_result, LServer, State, [{false, Reason}]).
+    ejabberd_hooks:run_fold(s2s_out_auth_result, ServerHost, State, [{false, Reason}]).
 
-handle_packet(Pkt, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_packet, LServer, State, [Pkt]).
+handle_packet(Pkt, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_packet, ServerHost, State, [Pkt]).
 
-handle_stream_end(Reason, #{server := LServer} = State) ->
+handle_stream_end(Reason, #{server_host := ServerHost} = State) ->
     State1 = State#{stop_reason => Reason},
-    ejabberd_hooks:run_fold(s2s_out_closed, LServer, State1, [Reason]).
+    ejabberd_hooks:run_fold(s2s_out_closed, ServerHost, State1, [Reason]).
 
-handle_stream_downgraded(StreamStart, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_downgraded, LServer, State, [StreamStart]).
+handle_stream_downgraded(StreamStart, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_downgraded, ServerHost, State, [StreamStart]).
 
 handle_stream_established(State) ->
     State1 = State#{on_route => send},
     State2 = resend_queue(State1),
     set_idle_timeout(State2).
 
-handle_cdata(Data, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_cdata, LServer, State, [Data]).
+handle_cdata(Data, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_cdata, ServerHost, State, [Data]).
 
-handle_recv(El, Pkt, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_recv, LServer, State, [El, Pkt]).
+handle_recv(El, Pkt, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_recv, ServerHost, State, [El, Pkt]).
 
-handle_send(El, Pkt, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_send, LServer, State, [El, Pkt]).
+handle_send(El, Pkt, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_send, ServerHost, State, [El, Pkt]).
 
 handle_timeout(#{on_route := Action} = State) ->
     case Action of
@@ -264,25 +266,27 @@ handle_timeout(#{on_route := Action} = State) ->
     end.
 
 init([#{server := LServer, remote_server := RServer} = State, Opts]) ->
+    ServerHost = ejabberd_router:host_of_route(LServer),
     State1 = State#{on_route => queue,
                    queue => queue:new(),
                    xmlns => ?NS_SERVER,
                    lang => ?MYLANG,
+                   server_host => ServerHost,
                    shaper => none},
     ?INFO_MSG("Outbound s2s connection started: ~s -> ~s",
              [LServer, RServer]),
-    ejabberd_hooks:run_fold(s2s_out_init, LServer, {ok, State1}, [Opts]).
+    ejabberd_hooks:run_fold(s2s_out_init, ServerHost, {ok, State1}, [Opts]).
 
-handle_call(Request, From, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_call, LServer, State, [Request, From]).
+handle_call(Request, From, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_call, ServerHost, State, [Request, From]).
 
 handle_cast({update_state, Fun}, State) ->
     case Fun of
        {M, F, A} -> erlang:apply(M, F, [State|A]);
        _ when is_function(Fun) -> Fun(State)
          end;
-handle_cast(Msg, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_cast, LServer, State, [Msg]).
+handle_cast(Msg, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_cast, ServerHost, State, [Msg]).
 
 handle_info({route, Pkt}, #{queue := Q, on_route := Action} = State) ->
     case Action of
@@ -290,8 +294,8 @@ handle_info({route, Pkt}, #{queue := Q, on_route := Action} = State) ->
        bounce -> bounce_packet(Pkt, State);
        send -> set_idle_timeout(send(State, Pkt))
     end;
-handle_info(Info, #{server := LServer} = State) ->
-    ejabberd_hooks:run_fold(s2s_out_handle_info, LServer, State, [Info]).
+handle_info(Info, #{server_host := ServerHost} = State) ->
+    ejabberd_hooks:run_fold(s2s_out_handle_info, ServerHost, State, [Info]).
 
 terminate(Reason, #{server := LServer,
                    remote_server := RServer} = State) ->