diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2012-11-01 12:03:59 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2012-11-01 12:03:59 +0000 |
commit | fdf36355954fee83b9f6ff6d71adfa008f4d4b44 (patch) | |
tree | b1825e26c286d9a2c2a5a8ec59723540c25ea3e7 | |
parent | 58ba1e08a08debf79f1413e73def76771500b709 (diff) | |
download | rabbitmq-server-fdf36355954fee83b9f6ff6d71adfa008f4d4b44.tar.gz |
Unify address and host. Stick ports in the state, just because we're grabbing them anyway.
-rw-r--r-- | docs/rabbitmqctl.1.xml | 16 | ||||
-rw-r--r-- | src/rabbit_control_main.erl | 2 | ||||
-rw-r--r-- | src/rabbit_net.erl | 49 | ||||
-rw-r--r-- | src/rabbit_reader.erl | 24 |
4 files changed, 42 insertions, 49 deletions
diff --git a/docs/rabbitmqctl.1.xml b/docs/rabbitmqctl.1.xml index 69d137b3..34947b66 100644 --- a/docs/rabbitmqctl.1.xml +++ b/docs/rabbitmqctl.1.xml @@ -1282,21 +1282,14 @@ <listitem><para>Readable name for the connection.</para></listitem> </varlistentry> <varlistentry> - <term>address</term> - <listitem><para>Server IP address.</para></listitem> - </varlistentry> - <varlistentry> <term>port</term> <listitem><para>Server port.</para></listitem> </varlistentry> <varlistentry> <term>host</term> <listitem><para>Server hostname obtained via reverse - DNS, or 'unknown'.</para></listitem> - </varlistentry> - <varlistentry> - <term>peer_address</term> - <listitem><para>Peer address.</para></listitem> + DNS, or its IP address if reverse DNS failed or was + not enabled.</para></listitem> </varlistentry> <varlistentry> <term>peer_port</term> @@ -1305,7 +1298,8 @@ <varlistentry> <term>peer_host</term> <listitem><para>Peer hostname obtained via reverse - DNS, or 'unknown'.</para></listitem> + DNS, or its IP address if reverse DNS failed or was + not enabled.</para></listitem> </varlistentry> <varlistentry> <term>ssl</term> @@ -1424,7 +1418,7 @@ </variablelist> <para> If no <command>connectioninfoitem</command>s are - specified then user, peer address, peer port, time since + specified then user, peer host, peer port, time since flow control and memory block state are displayed. </para> diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index 25f7d758..bd18fa5f 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -386,7 +386,7 @@ action(list_bindings, Node, Args, Opts, Inform) -> action(list_connections, Node, Args, _Opts, Inform) -> Inform("Listing connections", []), - ArgAtoms = default_if_empty(Args, [user, peer_address, peer_port, state]), + ArgAtoms = default_if_empty(Args, [user, peer_host, peer_port, state]), display_info_list(rpc_call(Node, rabbit_networking, connection_info_all, [ArgAtoms]), ArgAtoms); diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index c6fc9742..562fc197 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -20,7 +20,7 @@ -export([is_ssl/1, ssl_info/1, controlling_process/2, getstat/2, recv/1, async_recv/3, port_command/2, getopts/2, setopts/2, send/2, close/1, fast_close/1, sockname/1, peername/1, peercert/1, - tune_buffer_size/1, connection_string/2, rdns/2]). + tune_buffer_size/1, connection_string/2, socket_ends/2]). %%--------------------------------------------------------------------------- @@ -36,7 +36,7 @@ -type(socket() :: port() | #ssl_socket{}). -type(opts() :: [{atom(), any()} | {raw, non_neg_integer(), non_neg_integer(), binary()}]). - +-type(host_or_ip() :: binary() | inet:ip_address()). -spec(is_ssl/1 :: (socket()) -> boolean()). -spec(ssl_info/1 :: (socket()) -> 'nossl' | ok_val_or_error( @@ -72,9 +72,10 @@ -spec(tune_buffer_size/1 :: (socket()) -> ok_or_any_error()). -spec(connection_string/2 :: (socket(), 'inbound' | 'outbound') -> ok_val_or_error(string())). --spec(rdns/2 :: - (socket(), 'inbound' | 'outbound') -> {binary() | 'unknown', - binary() | 'unknown'}). +-spec(socket_ends/2 :: + (socket(), 'inbound' | 'outbound') + -> ok_val_or_error({host_or_ip(), rabbit_networking:ip_port(), + host_or_ip(), rabbit_networking:ip_port()})). -endif. @@ -196,38 +197,36 @@ tune_buffer_size(Sock) -> end. connection_string(Sock, Direction) -> + case socket_ends(Sock, Direction) of + {ok, {FromAddress, FromPort, ToAddress, ToPort}} -> + {ok, rabbit_misc:format( + "~s:~p -> ~s:~p", + [maybe_ntoab(FromAddress), FromPort, + maybe_ntoab(ToAddress), ToPort])}; + Error -> + Error + end. + +socket_ends(Sock, Direction) -> {From, To} = sock_funs(Direction), case {From(Sock), To(Sock)} of {{ok, {FromAddress, FromPort}}, {ok, {ToAddress, ToPort}}} -> - {ok, rabbit_misc:format( - "~s:~p -> ~s:~p", - [maybe_rdns(FromAddress, Sock, From), FromPort, - maybe_rdns(ToAddress, Sock, To), ToPort])}; + {ok, {rdns(FromAddress), FromPort, + rdns(ToAddress), ToPort}}; {{error, _Reason} = Error, _} -> Error; {_, {error, _Reason} = Error} -> Error end. -rdns(Sock, Direction) -> - {From, To} = sock_funs(Direction), - {rdns_lookup(Sock, From), rdns_lookup(Sock, To)}. - -maybe_rdns(Addr, Sock, Fun) -> - case rdns_lookup(Sock, Fun) of - unknown -> rabbit_misc:ntoab(Addr); - Host -> Host - end. +maybe_ntoab(Addr) when is_tuple(Addr) -> rabbit_misc:ntoab(Addr); +maybe_ntoab(Host) -> Host. -rdns_lookup(Sock, Fun) -> +rdns(Addr) -> {ok, Lookup} = application:get_env(rabbit, reverse_dns_lookups), case Lookup of - true -> case Fun(Sock) of - {ok, {IP, _Port}} -> list_to_binary( - rabbit_networking:tcp_host(IP)); - _ -> unknown - end; - _ -> unknown + true -> list_to_binary(rabbit_networking:tcp_host(Addr)); + _ -> Addr end. sock_funs(inbound) -> {fun peername/1, fun sockname/1}; diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 82781ad0..f160b17a 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -39,14 +39,15 @@ connection_state, queue_collector, heartbeater, stats_timer, channel_sup_sup_pid, start_heartbeat_fun, buf, buf_len, auth_mechanism, auth_state, conserve_resources, - last_blocked_by, last_blocked_at, host, peer_host}). + last_blocked_by, last_blocked_at, host, peer_host, + port, peer_port}). -define(STATISTICS_KEYS, [pid, recv_oct, recv_cnt, send_oct, send_cnt, send_pend, state, last_blocked_by, last_blocked_age, channels]). -define(CREATION_EVENT_KEYS, - [pid, name, address, port, peer_address, peer_port, host, + [pid, name, port, peer_port, host, peer_host, ssl, peer_cert_subject, peer_cert_issuer, peer_cert_validity, auth_mechanism, ssl_protocol, ssl_key_exchange, ssl_cipher, ssl_hash, protocol, user, vhost, @@ -191,6 +192,9 @@ socket_op(Sock, Fun) -> name(Sock) -> socket_op(Sock, fun (S) -> rabbit_net:connection_string(S, inbound) end). +socket_ends(Sock) -> + socket_op(Sock, fun (S) -> rabbit_net:socket_ends(S, inbound) end). + start_connection(Parent, ChannelSupSupPid, Collector, StartHeartbeatFun, Deb, Sock, SockTransform) -> process_flag(trap_exit, true), @@ -198,7 +202,7 @@ start_connection(Parent, ChannelSupSupPid, Collector, StartHeartbeatFun, Deb, log(info, "accepting AMQP connection ~p (~s)~n", [self(), Name]), ClientSock = socket_op(Sock, SockTransform), erlang:send_after(?HANDSHAKE_TIMEOUT * 1000, self(), handshake_timeout), - {Host, PeerHost} = rabbit_net:rdns(Sock, inbound), + {Host, Port, PeerHost, PeerPort} = socket_ends(Sock), State = #v1{parent = Parent, sock = ClientSock, name = list_to_binary(Name), @@ -226,7 +230,9 @@ start_connection(Parent, ChannelSupSupPid, Collector, StartHeartbeatFun, Deb, last_blocked_by = none, last_blocked_at = never, host = Host, - peer_host = PeerHost}, + peer_host = PeerHost, + port = Port, + peer_port = PeerPort}, try ok = inet_op(fun () -> rabbit_net:tune_buffer_size(ClientSock) end), recvloop(Deb, switch_callback(rabbit_event:init_stats_timer( @@ -896,14 +902,8 @@ i(pid, #v1{}) -> self(); i(name, #v1{name = Name}) -> Name; i(host, #v1{host = Host}) -> Host; i(peer_host, #v1{peer_host = PeerHost}) -> PeerHost; -i(address, S) -> socket_info(fun rabbit_net:sockname/1, - fun ({A, _}) -> A end, S); -i(port, S) -> socket_info(fun rabbit_net:sockname/1, - fun ({_, P}) -> P end, S); -i(peer_address, S) -> socket_info(fun rabbit_net:peername/1, - fun ({A, _}) -> A end, S); -i(peer_port, S) -> socket_info(fun rabbit_net:peername/1, - fun ({_, P}) -> P end, S); +i(port, #v1{port = Port}) -> Port; +i(peer_port, #v1{peer_port = PeerPort}) -> PeerPort; i(SockStat, S) when SockStat =:= recv_oct; SockStat =:= recv_cnt; SockStat =:= send_oct; |