summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-01-23 12:03:47 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2012-01-23 12:03:47 +0000
commit4c4962645d91cf326bcbdbeaac74a23a204a652b (patch)
tree54a72afe573556cb0e97d41e929f6b9d1050cfd3
parentfde2cce6c3c159c531bbfd530cfe387bc82f5036 (diff)
downloadrabbitmq-server-4c4962645d91cf326bcbdbeaac74a23a204a652b.tar.gz
helper function for constructing tcp listener sup child specs
useful in e.g. stomp
-rw-r--r--src/rabbit_networking.erl37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index f654d6d3..e81f8134 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -24,7 +24,8 @@
close_connection/2, force_connection_event_refresh/0]).
%%used by TCP-based transports, e.g. STOMP adapter
--export([tcp_listener_addresses/1, ensure_ssl/0, ssl_transform_fun/1]).
+-export([tcp_listener_addresses/1, tcp_listener_spec/6,
+ ensure_ssl/0, ssl_transform_fun/1]).
-export([tcp_listener_started/3, tcp_listener_stopped/3,
start_client/1, start_ssl_client/2]).
@@ -52,6 +53,10 @@
-type(listener_config() :: ip_port() |
{hostname(), ip_port()} |
{hostname(), ip_port(), family()}).
+-type(address() :: {inet:ip_address(), ip_port(), family()}).
+-type(name_prefix() :: atom()).
+-type(protocol() :: atom()).
+-type(label() :: string()).
-spec(start/0 :: () -> 'ok').
-spec(start_tcp_listener/1 :: (listener_config()) -> 'ok').
@@ -75,8 +80,10 @@
-spec(force_connection_event_refresh/0 :: () -> 'ok').
-spec(on_node_down/1 :: (node()) -> 'ok').
--spec(tcp_listener_addresses/1 :: (listener_config())
- -> [{inet:ip_address(), ip_port(), family()}]).
+-spec(tcp_listener_addresses/1 :: (listener_config()) -> [address()]).
+-spec(tcp_listener_spec/6 ::
+ (name_prefix(), address(), [gen_tcp:listen_option()], protocol(),
+ label(), rabbit_types:mfargs()) -> supervisor:child_spec()).
-spec(ensure_ssl/0 :: () -> rabbit_types:infos()).
-spec(ssl_transform_fun/1 ::
(rabbit_types:infos())
@@ -187,6 +194,16 @@ tcp_listener_addresses_auto(Port) ->
lists:append([tcp_listener_addresses(Listener) ||
Listener <- port_to_listeners(Port)]).
+tcp_listener_spec(NamePrefix, {IPAddress, Port, Family}, SocketOpts,
+ Protocol, Label, OnConnect) ->
+ {rabbit_misc:tcp_name(NamePrefix, IPAddress, Port),
+ {tcp_listener_sup, start_link,
+ [IPAddress, Port, [Family | SocketOpts],
+ {?MODULE, tcp_listener_started, [Protocol]},
+ {?MODULE, tcp_listener_stopped, [Protocol]},
+ OnConnect, Label]},
+ transient, infinity, supervisor, [tcp_listener_sup]}.
+
start_tcp_listener(Listener) ->
start_listener(Listener, amqp, "TCP Listener",
{?MODULE, start_client, []}).
@@ -200,16 +217,10 @@ start_listener(Listener, Protocol, Label, OnConnect) ->
Address <- tcp_listener_addresses(Listener)],
ok.
-start_listener0({IPAddress, Port, Family}, Protocol, Label, OnConnect) ->
- {ok,_} = supervisor:start_child(
- rabbit_sup,
- {rabbit_misc:tcp_name(rabbit_tcp_listener_sup, IPAddress, Port),
- {tcp_listener_sup, start_link,
- [IPAddress, Port, [Family | tcp_opts()],
- {?MODULE, tcp_listener_started, [Protocol]},
- {?MODULE, tcp_listener_stopped, [Protocol]},
- OnConnect, Label]},
- transient, infinity, supervisor, [tcp_listener_sup]}).
+start_listener0(Address, Protocol, Label, OnConnect) ->
+ Spec = tcp_listener_spec(rabbit_tcp_listener_sup, Address, tcp_opts(),
+ Protocol, Label, OnConnect),
+ {ok,_} = supervisor:start_child(rabbit_sup, Spec).
stop_tcp_listener(Listener) ->
[stop_tcp_listener0(Address) ||