summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-11-01 12:03:59 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-11-01 12:03:59 +0000
commitfdf36355954fee83b9f6ff6d71adfa008f4d4b44 (patch)
treeb1825e26c286d9a2c2a5a8ec59723540c25ea3e7
parent58ba1e08a08debf79f1413e73def76771500b709 (diff)
downloadrabbitmq-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.xml16
-rw-r--r--src/rabbit_control_main.erl2
-rw-r--r--src/rabbit_net.erl49
-rw-r--r--src/rabbit_reader.erl24
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;