summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2010-07-06 00:22:29 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2010-07-06 00:22:29 +0100
commitbd82f6fd37569adcf1602ae01366cd3fef523416 (patch)
treed9bdf4199143c9e597ef1417493ab144c185651e
parentd84e67b9e089c41eab143045f37183e87d46534d (diff)
downloadrabbitmq-server-bd82f6fd37569adcf1602ae01366cd3fef523416.tar.gz
moved common types rabbit_types; move net types to rabbit_networking
-rw-r--r--include/rabbit_backing_queue_spec.hrl14
-rw-r--r--include/rabbit_exchange_type_spec.hrl2
-rw-r--r--src/rabbit.erl54
-rw-r--r--src/rabbit_access_control.erl16
-rw-r--r--src/rabbit_amqqueue.erl42
-rw-r--r--src/rabbit_basic.erl16
-rw-r--r--src/rabbit_binary_generator.erl6
-rw-r--r--src/rabbit_binary_parser.erl4
-rw-r--r--src/rabbit_channel.erl16
-rw-r--r--src/rabbit_exchange.erl18
-rw-r--r--src/rabbit_misc.erl16
-rw-r--r--src/rabbit_net.erl6
-rw-r--r--src/rabbit_networking.erl24
-rw-r--r--src/rabbit_persister.erl10
-rw-r--r--src/rabbit_reader.erl6
-rw-r--r--src/rabbit_router.erl2
-rw-r--r--src/rabbit_types.erl89
-rw-r--r--src/rabbit_writer.erl8
18 files changed, 194 insertions, 155 deletions
diff --git a/include/rabbit_backing_queue_spec.hrl b/include/rabbit_backing_queue_spec.hrl
index 0cef2379..05dc1464 100644
--- a/include/rabbit_backing_queue_spec.hrl
+++ b/include/rabbit_backing_queue_spec.hrl
@@ -31,7 +31,7 @@
-type(fetch_result() ::
%% Message, IsDelivered, AckTag, Remaining_Len
- ('empty'|{rabbit:basic_message(), boolean(), ack(), non_neg_integer()})).
+ ('empty'|{rabbit_types:basic_message(), boolean(), ack(), non_neg_integer()})).
-type(is_durable() :: boolean()).
-type(attempt_recovery() :: boolean()).
-type(purged_msg_count() :: non_neg_integer()).
@@ -42,15 +42,15 @@
-spec(terminate/1 :: (state()) -> state()).
-spec(delete_and_terminate/1 :: (state()) -> state()).
-spec(purge/1 :: (state()) -> {purged_msg_count(), state()}).
--spec(publish/2 :: (rabbit:basic_message(), state()) -> state()).
+-spec(publish/2 :: (rabbit_types:basic_message(), state()) -> state()).
-spec(publish_delivered/3 ::
- (ack_required(), rabbit:basic_message(), state()) -> {ack(), state()}).
+ (ack_required(), rabbit_types:basic_message(), state()) -> {ack(), state()}).
-spec(fetch/2 :: (ack_required(), state()) -> {fetch_result(), state()}).
-spec(ack/2 :: ([ack()], state()) -> state()).
--spec(tx_publish/3 :: (rabbit:txn(), rabbit:basic_message(), state()) -> state()).
--spec(tx_ack/3 :: (rabbit:txn(), [ack()], state()) -> state()).
--spec(tx_rollback/2 :: (rabbit:txn(), state()) -> {[ack()], state()}).
--spec(tx_commit/3 :: (rabbit:txn(), fun (() -> any()), state()) -> {[ack()], state()}).
+-spec(tx_publish/3 :: (rabbit_types:txn(), rabbit_types:basic_message(), state()) -> state()).
+-spec(tx_ack/3 :: (rabbit_types:txn(), [ack()], state()) -> state()).
+-spec(tx_rollback/2 :: (rabbit_types:txn(), state()) -> {[ack()], state()}).
+-spec(tx_commit/3 :: (rabbit_types:txn(), fun (() -> any()), state()) -> {[ack()], state()}).
-spec(requeue/2 :: ([ack()], state()) -> state()).
-spec(len/1 :: (state()) -> non_neg_integer()).
-spec(is_empty/1 :: (state()) -> boolean()).
diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl
index dbbe74f0..5a010c0d 100644
--- a/include/rabbit_exchange_type_spec.hrl
+++ b/include/rabbit_exchange_type_spec.hrl
@@ -31,7 +31,7 @@
-ifdef(use_specs).
-spec(description/0 :: () -> [{atom(), any()}]).
--spec(publish/2 :: (rabbit_exchange:exchange(), rabbit:delivery())
+-spec(publish/2 :: (rabbit_exchange:exchange(), rabbit_types:delivery())
-> {rabbit_router:routing_result(), [pid()]}).
-spec(validate/1 :: (rabbit_exchange:exchange()) -> 'ok').
-spec(create/1 :: (rabbit_exchange:exchange()) -> 'ok').
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 9f3481d2..3ebbd072 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -176,7 +176,6 @@
-include("rabbit_framing.hrl").
-include("rabbit.hrl").
--include_lib("kernel/include/inet.hrl").
-define(APPS, [os_mon, mnesia, rabbit]).
@@ -184,60 +183,9 @@
-ifdef(use_specs).
--export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0,
- delivery/0, content/0, decoded_content/0, undecoded_content/0,
- unencoded_content/0, encoded_content/0, vhost/0, ctag/0,
- ip_port/0, hostname/0]).
-
--type(maybe(T) :: T | 'none').
--type(vhost() :: binary()).
--type(ctag() :: binary()).
-
-%% TODO: make this more precise by tying specific class_ids to
-%% specific properties
--type(undecoded_content() ::
- #content{class_id :: rabbit_framing:amqp_class_id(),
- properties :: 'none',
- properties_bin :: binary(),
- payload_fragments_rev :: [binary()]} |
- #content{class_id :: rabbit_framing:amqp_class_id(),
- properties :: rabbit_framing:amqp_property_record(),
- properties_bin :: 'none',
- payload_fragments_rev :: [binary()]}).
--type(unencoded_content() :: undecoded_content()).
--type(decoded_content() ::
- #content{class_id :: rabbit_framing:amqp_class_id(),
- properties :: rabbit_framing:amqp_property_record(),
- properties_bin :: rabbit:maybe(binary()),
- payload_fragments_rev :: [binary()]}).
--type(encoded_content() ::
- #content{class_id :: rabbit_framing:amqp_class_id(),
- properties :: rabbit:maybe(rabbit_framing:amqp_property_record()),
- properties_bin :: binary(),
- payload_fragments_rev :: [binary()]}).
--type(content() :: undecoded_content() | decoded_content()).
--type(basic_message() ::
- #basic_message{exchange_name :: rabbit_exchange:name(),
- routing_key :: rabbit_router:routing_key(),
- content :: content(),
- guid :: rabbit_guid:guid(),
- is_persistent :: boolean()}).
--type(message() :: basic_message()).
--type(delivery() ::
- #delivery{mandatory :: boolean(),
- immediate :: boolean(),
- txn :: rabbit:maybe(rabbit:txn()),
- sender :: pid(),
- message :: message()}).
-
-%% this is really an abstract type, but dialyzer does not support them
--type(txn() :: rabbit_guid:guid()).
+-type(file_suffix() :: binary()).
%% this really should be an abstract type
-type(log_location() :: 'tty' | 'undefined' | file:filename()).
--type(file_suffix() :: binary()).
-
--type(info_key() :: atom()).
--type(info() :: {info_key(), any()}).
-spec(prepare/0 :: () -> 'ok').
-spec(start/0 :: () -> 'ok').
diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl
index f9fd2c31..973851a4 100644
--- a/src/rabbit_access_control.erl
+++ b/src/rabbit_access_control.erl
@@ -57,7 +57,7 @@
-spec(check_login/2 :: (binary(), binary()) -> user()).
-spec(user_pass_login/2 :: (username(), password()) -> user()).
--spec(check_vhost_access/2 :: (user(), rabbit:vhost()) -> 'ok').
+-spec(check_vhost_access/2 :: (user(), rabbit_types:vhost()) -> 'ok').
-spec(check_resource_access/3 ::
(username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok').
-spec(add_user/2 :: (username(), password()) -> 'ok').
@@ -66,16 +66,16 @@
-spec(list_users/0 :: () -> [username()]).
-spec(lookup_user/1 :: (username()) ->
{'ok', user()} | rabbit_misc:not_found()).
--spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok').
--spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok').
--spec(list_vhosts/0 :: () -> [rabbit:vhost()]).
--spec(set_permissions/5 ::(username(), rabbit:vhost(), regexp(),
+-spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok').
+-spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok').
+-spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]).
+-spec(set_permissions/5 ::(username(), rabbit_types:vhost(), regexp(),
regexp(), regexp()) -> 'ok').
--spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok').
+-spec(clear_permissions/2 :: (username(), rabbit_types:vhost()) -> 'ok').
-spec(list_vhost_permissions/1 ::
- (rabbit:vhost()) -> [{username(), regexp(), regexp(), regexp()}]).
+ (rabbit_types:vhost()) -> [{username(), regexp(), regexp(), regexp()}]).
-spec(list_user_permissions/1 ::
- (username()) -> [{rabbit:vhost(), regexp(), regexp(), regexp()}]).
+ (username()) -> [{rabbit_types:vhost(), regexp(), regexp(), regexp()}]).
-endif.
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index e1bb413e..9e271c8e 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -66,38 +66,38 @@
#amqqueue{name :: name(),
durable :: boolean(),
auto_delete :: boolean(),
- exclusive_owner :: rabbit:maybe(pid()),
+ exclusive_owner :: rabbit_types:maybe(pid()),
arguments :: rabbit_framing:amqp_table(),
- pid :: rabbit:maybe(pid())}).
+ pid :: rabbit_types:maybe(pid())}).
-type(qlen() :: {'ok', non_neg_integer()}).
-type(qfun(A) :: fun ((amqqueue()) -> A)).
--type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit:message()}).
+-type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit_types:message()}).
-type(msg_id() :: non_neg_integer()).
-type(ok_or_errors() ::
'ok' | {'error', [{'error' | 'exit' | 'throw', any()}]}).
-spec(start/0 :: () -> 'ok').
-spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(),
- rabbit:maybe(pid())) -> {'new' | 'existing', amqqueue()}).
+ rabbit_types:maybe(pid())) -> {'new' | 'existing', amqqueue()}).
-spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit_misc:not_found()).
-spec(with/2 :: (name(), qfun(A)) -> A | rabbit_misc:not_found()).
-spec(with_or_die/2 :: (name(), qfun(A)) -> A).
-spec(assert_equivalence/5 :: (amqqueue(), boolean(), boolean(),
- rabbit_framing:amqp_table(), rabbit:maybe(pid))
+ rabbit_framing:amqp_table(), rabbit_types:maybe(pid))
-> ok).
-spec(check_exclusive_access/2 :: (amqqueue(), pid()) -> 'ok').
-spec(with_exclusive_access_or_die/3 :: (name(), pid(), qfun(A)) -> A).
--spec(list/1 :: (rabbit:vhost()) -> [amqqueue()]).
--spec(info_keys/0 :: () -> [rabbit:info_key()]).
--spec(info/1 :: (amqqueue()) -> [rabbit:info()]).
--spec(info/2 :: (amqqueue(), [rabbit:info_key()]) -> [rabbit:info()]).
--spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]).
--spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()])
- -> [[rabbit:info()]]).
--spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit:ctag(), boolean()}]).
--spec(consumers_all/1 :: (rabbit:vhost())
- -> [{name(), pid(), rabbit:ctag(), boolean()}]).
+-spec(list/1 :: (rabbit_types:vhost()) -> [amqqueue()]).
+-spec(info_keys/0 :: () -> [rabbit_types:info_key()]).
+-spec(info/1 :: (amqqueue()) -> [rabbit_types:info()]).
+-spec(info/2 :: (amqqueue(), [rabbit_types:info_key()]) -> [rabbit_types:info()]).
+-spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]).
+-spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()])
+ -> [[rabbit_types:info()]]).
+-spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit_types:ctag(), boolean()}]).
+-spec(consumers_all/1 :: (rabbit_types:vhost())
+ -> [{name(), pid(), rabbit_types:ctag(), boolean()}]).
-spec(stat/1 ::
(amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}).
-spec(delete/3 ::
@@ -108,21 +108,21 @@
{'error', 'in_use'} |
{'error', 'not_empty'}).
-spec(purge/1 :: (amqqueue()) -> qlen()).
--spec(deliver/2 :: (pid(), rabbit:delivery()) -> boolean()).
+-spec(deliver/2 :: (pid(), rabbit_types:delivery()) -> boolean()).
-spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok').
--spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [msg_id()], pid())
+-spec(ack/4 :: (pid(), rabbit_types:maybe(rabbit_types:txn()), [msg_id()], pid())
-> 'ok').
--spec(commit_all/3 :: ([pid()], rabbit:txn(), pid()) -> ok_or_errors()).
--spec(rollback_all/3 :: ([pid()], rabbit:txn(), pid()) -> 'ok').
+-spec(commit_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> ok_or_errors()).
+-spec(rollback_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> 'ok').
-spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()).
-spec(limit_all/3 :: ([pid()], pid(), pid() | 'undefined') -> ok_or_errors()).
-spec(basic_get/3 :: (amqqueue(), pid(), boolean()) ->
{'ok', non_neg_integer(), qmsg()} | 'empty').
-spec(basic_consume/7 ::
(amqqueue(), boolean(), pid(), pid() | 'undefined',
- rabbit:ctag(), boolean(), any())
+ rabbit_types:ctag(), boolean(), any())
-> 'ok' | {'error', 'exclusive_consume_unavailable'}).
--spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit:ctag(), any()) -> 'ok').
+-spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok').
-spec(notify_sent/2 :: (pid(), pid()) -> 'ok').
-spec(unblock/2 :: (pid(), pid()) -> 'ok').
-spec(flush_all/2 :: ([pid()], pid()) -> 'ok').
diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl
index fb6f85dd..b4e685b2 100644
--- a/src/rabbit_basic.erl
+++ b/src/rabbit_basic.erl
@@ -46,24 +46,24 @@
-type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]}
| rabbit_misc:not_found())).
--spec(publish/1 :: (rabbit:delivery()) -> publish_result()).
--spec(delivery/4 :: (boolean(), boolean(), rabbit:maybe(rabbit:txn()),
- rabbit:message()) -> rabbit:delivery()).
+-spec(publish/1 :: (rabbit_types:delivery()) -> publish_result()).
+-spec(delivery/4 :: (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()),
+ rabbit_types:message()) -> rabbit_types:delivery()).
-spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(),
properties_input(), binary())
- -> (rabbit:message() | {'error', any()})).
+ -> (rabbit_types:message() | {'error', any()})).
-spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_property_record()).
-spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(),
properties_input(), binary()) -> publish_result()).
-spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(),
- rabbit:maybe(rabbit:txn()), properties_input(), binary()) ->
+ rabbit_types:maybe(rabbit_types:txn()), properties_input(), binary()) ->
publish_result()).
-spec(build_content/2 ::
- (rabbit_framing:amqp_property_record(), binary()) -> rabbit:content()).
--spec(from_content/1 :: (rabbit:content())
+ (rabbit_framing:amqp_property_record(), binary()) -> rabbit_types:content()).
+-spec(from_content/1 :: (rabbit_types:content())
-> {rabbit_framing:amqp_property_record(), binary()}).
-spec(is_message_persistent/1 ::
- (rabbit:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})).
+ (rabbit_types:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})).
-endif.
diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl
index a2af46c9..7b43a6a7 100644
--- a/src/rabbit_binary_generator.erl
+++ b/src/rabbit_binary_generator.erl
@@ -60,15 +60,15 @@
(rabbit_channel:channel_number(), rabbit_framing:amqp_method_record())
-> frame()).
-spec(build_simple_content_frames/3 ::
- (rabbit_channel:channel_number(), rabbit:content(), non_neg_integer())
+ (rabbit_channel:channel_number(), rabbit_types:content(), non_neg_integer())
-> [frame()]).
-spec(build_heartbeat_frame/0 :: () -> frame()).
-spec(generate_table/1 :: (rabbit_framing:amqp_table()) -> binary()).
-spec(encode_properties/2 :: ([rabbit_framing:amqp_property_type()], [any()])
-> binary()).
-spec(check_empty_content_body_frame_size/0 :: () -> 'ok').
--spec(ensure_content_encoded/1 :: (rabbit:content()) -> rabbit:encoded_content()).
--spec(clear_encoded_content/1 :: (rabbit:content()) -> rabbit:unencoded_content()).
+-spec(ensure_content_encoded/1 :: (rabbit_types:content()) -> rabbit_types:encoded_content()).
+-spec(clear_encoded_content/1 :: (rabbit_types:content()) -> rabbit_types:unencoded_content()).
-endif.
diff --git a/src/rabbit_binary_parser.erl b/src/rabbit_binary_parser.erl
index a8879bea..69e34440 100644
--- a/src/rabbit_binary_parser.erl
+++ b/src/rabbit_binary_parser.erl
@@ -46,9 +46,9 @@
-spec(parse_properties/2 ::
([rabbit_framing:amqp_property_type()], binary()) -> [any()]).
-spec(ensure_content_decoded/1 ::
- (rabbit:content()) -> rabbit:decoded_content()).
+ (rabbit_types:content()) -> rabbit_types:decoded_content()).
-spec(clear_decoded_content/1 ::
- (rabbit:content()) -> rabbit:undecoded_content()).
+ (rabbit_types:content()) -> rabbit_types:undecoded_content()).
-endif.
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index a0f09f4c..b5d4e2af 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -78,22 +78,22 @@
-spec(start_link/6 ::
(channel_number(), pid(), pid(), rabbit_access_control:username(),
- rabbit:vhost(), pid()) -> pid()).
+ rabbit_types:vhost(), pid()) -> pid()).
-spec(do/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok').
-spec(do/3 :: (pid(), rabbit_framing:amqp_method_record(),
- rabbit:maybe(rabbit:content())) -> 'ok').
+ rabbit_types:maybe(rabbit_types:content())) -> 'ok').
-spec(shutdown/1 :: (pid()) -> 'ok').
-spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok').
--spec(deliver/4 ::(pid(), rabbit:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok').
+-spec(deliver/4 ::(pid(), rabbit_types:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok').
-spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok').
-spec(flushed/2 :: (pid(), pid()) -> 'ok').
-spec(flow_timeout/2 :: (pid(), ref()) -> 'ok').
-spec(list/0 :: () -> [pid()]).
--spec(info_keys/0 :: () -> [rabbit:info_key()]).
--spec(info/1 :: (pid()) -> [rabbit:info()]).
--spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]).
--spec(info_all/0 :: () -> [[rabbit:info()]]).
--spec(info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]).
+-spec(info_keys/0 :: () -> [rabbit_types:info_key()]).
+-spec(info/1 :: (pid()) -> [rabbit_types:info()]).
+-spec(info/2 :: (pid(), [rabbit_types:info_key()]) -> [rabbit_types:info()]).
+-spec(info_all/0 :: () -> [[rabbit_types:info()]]).
+-spec(info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]).
-endif.
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index de29ccb3..ae45f64a 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -90,14 +90,14 @@
-spec(lookup/1 :: (name())
-> {'ok', exchange()} | rabbit_misc:not_found()).
-spec(lookup_or_die/1 :: (name()) -> exchange()).
--spec(list/1 :: (rabbit:vhost()) -> [exchange()]).
--spec(info_keys/0 :: () -> [rabbit:info_key()]).
--spec(info/1 :: (exchange()) -> [rabbit:info()]).
--spec(info/2 :: (exchange(), [rabbit:info_key()]) -> [rabbit:info()]).
--spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]).
--spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()])
- -> [[rabbit:info()]]).
--spec(publish/2 :: (exchange(), rabbit:delivery())
+-spec(list/1 :: (rabbit_types:vhost()) -> [exchange()]).
+-spec(info_keys/0 :: () -> [rabbit_types:info_key()]).
+-spec(info/1 :: (exchange()) -> [rabbit_types:info()]).
+-spec(info/2 :: (exchange(), [rabbit_types:info_key()]) -> [rabbit_types:info()]).
+-spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]).
+-spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()])
+ -> [[rabbit_types:info()]]).
+-spec(publish/2 :: (exchange(), rabbit_types:delivery())
-> {rabbit_router:routing_result(), [pid()]}).
-spec(add_binding/5 ::
(name(), rabbit_amqqueue:name(), rabbit_router:routing_key(),
@@ -106,7 +106,7 @@
(name(), rabbit_amqqueue:name(), rabbit_router:routing_key(),
rabbit_framing:amqp_table(), inner_fun())
-> bind_res() | {'error', 'binding_not_found'}).
--spec(list_bindings/1 :: (rabbit:vhost()) ->
+-spec(list_bindings/1 :: (rabbit_types:vhost()) ->
[{name(), rabbit_amqqueue:name(),
rabbit_router:routing_key(), rabbit_framing:amqp_table()}]).
-spec(delete_queue_bindings/1 ::
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index 88a5e505..3d94d952 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -82,7 +82,7 @@
-type(not_found() :: {'error', 'not_found'}).
-type(resource_name() :: binary()).
-type(r(Kind) ::
- #resource{virtual_host :: rabbit:vhost(),
+ #resource{virtual_host :: rabbit_types:vhost(),
kind :: Kind,
name :: resource_name()}).
-type(thunk(T) :: fun(() -> T)).
@@ -106,14 +106,14 @@
-spec(get_config/2 :: (atom(), A) -> A).
-spec(set_config/2 :: (atom(), any()) -> 'ok').
-spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()).
--spec(r/3 :: (rabbit:vhost() | r(atom()), K, resource_name())
+-spec(r/3 :: (rabbit_types:vhost() | r(atom()), K, resource_name())
-> r(K) when is_subtype(K, atom())).
--spec(r/2 :: (rabbit:vhost(), K)
- -> #resource{virtual_host :: rabbit:vhost(),
+-spec(r/2 :: (rabbit_types:vhost(), K)
+ -> #resource{virtual_host :: rabbit_types:vhost(),
kind :: K,
name :: '_'}
when is_subtype(K, atom())).
--spec(r_arg/4 :: (rabbit:vhost() | r(atom()), K,
+-spec(r_arg/4 :: (rabbit_types:vhost() | r(atom()), K,
rabbit_framing:amqp_table(), binary())
-> undefined | r(K) when is_subtype(K, atom())).
-spec(rs/1 :: (r(atom())) -> string()).
@@ -126,15 +126,15 @@
-spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A).
-spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]).
-spec(with_user/2 :: (rabbit_access_control:username(), thunk(A)) -> A).
--spec(with_vhost/2 :: (rabbit:vhost(), thunk(A)) -> A).
+-spec(with_vhost/2 :: (rabbit_types:vhost(), thunk(A)) -> A).
-spec(with_user_and_vhost/3 :: (rabbit_access_control:username(),
- rabbit:vhost(), thunk(A)) -> A).
+ rabbit_types:vhost(), thunk(A)) -> A).
-spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A).
-spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok').
-spec(makenode/1 :: ({string(), string()} | string()) -> node()).
-spec(nodeparts/1 :: (node() | string()) -> {string(), string()}).
-spec(cookie_hash/0 :: () -> string()).
--spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit:ip_port()) -> atom()).
+-spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit_networking:ip_port()) -> atom()).
-spec(intersperse/2 :: (A, [A]) -> [A]).
-spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]).
-spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]).
diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl
index 1892e498..5379d3a1 100644
--- a/src/rabbit_net.erl
+++ b/src/rabbit_net.erl
@@ -47,7 +47,7 @@
'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend').
-type(error() :: {'error', any()}).
-type(ssl_socket() :: #ssl_socket{}).
--type(socket() :: rabbit:ip_port() | ssl_socket()).
+-type(socket() :: rabbit_networking:ip_port() | ssl_socket()).
-spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}).
-spec(close/1 :: (socket()) -> 'ok' | error()).
@@ -55,9 +55,9 @@
-spec(port_command/2 :: (socket(), iolist()) -> 'true').
-spec(send/2 :: (socket(), binary() | iolist()) -> 'ok' | error()).
-spec(peername/1 :: (socket()) ->
- {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()).
+ {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()).
-spec(sockname/1 :: (socket()) ->
- {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()).
+ {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()).
-spec(getstat/2 :: (socket(), [stat_option()]) ->
{'ok', [{stat_option(), integer()}]} | error()).
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index 6213811c..d182810a 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -63,30 +63,32 @@
-ifdef(use_specs).
+-export_type([ip_port/0, hostname/0]).
+
-type(connection() :: pid()).
-type(listener() ::
#listener{node :: node(),
protocol :: atom(),
- host :: rabbit:hostname(),
- port :: rabbit:ip_port()}).
+ host :: hostname(),
+ port :: ip_port()}).
-spec(start/0 :: () -> 'ok').
--spec(start_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok').
--spec(start_ssl_listener/3 :: (rabbit:hostname(), rabbit:ip_port(), [rabbit:info()])
+-spec(start_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok').
+-spec(start_ssl_listener/3 :: (hostname(), ip_port(), [rabbit_types:info()])
-> 'ok').
--spec(stop_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok').
+-spec(stop_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok').
-spec(active_listeners/0 :: () -> [listener()]).
-spec(node_listeners/1 :: (node()) -> [listener()]).
-spec(connections/0 :: () -> [connection()]).
--spec(connection_info_keys/0 :: () -> [rabbit:info_key()]).
--spec(connection_info/1 :: (connection()) -> [rabbit:info()]).
--spec(connection_info/2 :: (connection(), [rabbit:info_key()]) -> [rabbit:info()]).
--spec(connection_info_all/0 :: () -> [[rabbit:info()]]).
--spec(connection_info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]).
+-spec(connection_info_keys/0 :: () -> [rabbit_types:info_key()]).
+-spec(connection_info/1 :: (connection()) -> [rabbit_types:info()]).
+-spec(connection_info/2 :: (connection(), [rabbit_types:info_key()]) -> [rabbit_types:info()]).
+-spec(connection_info_all/0 :: () -> [[rabbit_types:info()]]).
+-spec(connection_info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]).
-spec(close_connection/2 :: (pid(), string()) -> 'ok').
-spec(on_node_down/1 :: (node()) -> 'ok').
--spec(check_tcp_listener_address/3 :: (atom(), rabbit:hostname(), rabbit:ip_port()) ->
+-spec(check_tcp_listener_address/3 :: (atom(), hostname(), ip_port()) ->
{inet:ip_address(), atom()}).
-endif.
diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl
index 727fcd1b..ea290b37 100644
--- a/src/rabbit_persister.erl
+++ b/src/rabbit_persister.erl
@@ -69,19 +69,19 @@
-type(pmsg() :: {rabbit_amqqueue:name(), pkey()}).
-type(work_item() ::
- {publish, rabbit:message(), pmsg()} |
+ {publish, rabbit_types:message(), pmsg()} |
{deliver, pmsg()} |
{ack, pmsg()}).
-spec(start_link/1 :: ([rabbit_amqqueue:name()]) ->
{'ok', pid()} | 'ignore' | {'error', any()}).
-spec(transaction/1 :: ([work_item()]) -> 'ok').
--spec(extend_transaction/2 :: ({rabbit:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok').
+-spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok').
-spec(dirty_work/1 :: ([work_item()]) -> 'ok').
--spec(commit_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok').
--spec(rollback_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok').
+-spec(commit_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok').
+-spec(rollback_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok').
-spec(force_snapshot/0 :: () -> 'ok').
--spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit:message(), boolean()}]).
+-spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit_types:message(), boolean()}]).
-endif.
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 81798c5a..e355cd26 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -138,9 +138,9 @@
-ifdef(use_specs).
--spec(info_keys/0 :: () -> [rabbit:info_key()]).
--spec(info/1 :: (pid()) -> [rabbit:info()]).
--spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]).
+-spec(info_keys/0 :: () -> [rabbit_types:info_key()]).
+-spec(info/1 :: (pid()) -> [rabbit_types:info()]).
+-spec(info/2 :: (pid(), [rabbit_types:info_key()]) -> [rabbit_types:info()]).
-spec(shutdown/2 :: (pid(), string()) -> 'ok').
-spec(server_properties/0 :: () -> rabbit_framing:amqp_table()).
diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl
index eb5beb2a..bc9b3891 100644
--- a/src/rabbit_router.erl
+++ b/src/rabbit_router.erl
@@ -46,7 +46,7 @@
-type(routing_key() :: binary()).
-type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered').
--spec(deliver/2 :: ([pid()], rabbit:delivery()) -> {routing_result(), [pid()]}).
+-spec(deliver/2 :: ([pid()], rabbit_types:delivery()) -> {routing_result(), [pid()]}).
-endif.
diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl
new file mode 100644
index 00000000..b8c3884e
--- /dev/null
+++ b/src/rabbit_types.erl
@@ -0,0 +1,89 @@
+%% The contents of this file are subject to the Mozilla Public License
+%% Version 1.1 (the "License"); you may not use this file except in
+%% compliance with the License. You may obtain a copy of the License at
+%% http://www.mozilla.org/MPL/
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+%% License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% The Original Code is RabbitMQ.
+%%
+%% The Initial Developers of the Original Code are LShift Ltd,
+%% Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd.
+%%
+%% Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd,
+%% Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd
+%% are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial
+%% Technologies LLC, and Rabbit Technologies Ltd.
+%%
+%% Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift
+%% Ltd. Portions created by Cohesive Financial Technologies LLC are
+%% Copyright (C) 2007-2010 Cohesive Financial Technologies
+%% LLC. Portions created by Rabbit Technologies Ltd are Copyright
+%% (C) 2007-2010 Rabbit Technologies Ltd.
+%%
+%% All Rights Reserved.
+%%
+%% Contributor(s): ______________________________________.
+%%
+
+-module(rabbit_types).
+
+-include("rabbit.hrl").
+
+-ifdef(use_specs).
+
+-export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0,
+ delivery/0, content/0, decoded_content/0, undecoded_content/0,
+ unencoded_content/0, encoded_content/0, vhost/0, ctag/0]).
+
+-type(maybe(T) :: T | 'none').
+-type(vhost() :: binary()).
+-type(ctag() :: binary()).
+
+%% TODO: make this more precise by tying specific class_ids to
+%% specific properties
+-type(undecoded_content() ::
+ #content{class_id :: rabbit_framing:amqp_class_id(),
+ properties :: 'none',
+ properties_bin :: binary(),
+ payload_fragments_rev :: [binary()]} |
+ #content{class_id :: rabbit_framing:amqp_class_id(),
+ properties :: rabbit_framing:amqp_property_record(),
+ properties_bin :: 'none',
+ payload_fragments_rev :: [binary()]}).
+-type(unencoded_content() :: undecoded_content()).
+-type(decoded_content() ::
+ #content{class_id :: rabbit_framing:amqp_class_id(),
+ properties :: rabbit_framing:amqp_property_record(),
+ properties_bin :: maybe(binary()),
+ payload_fragments_rev :: [binary()]}).
+-type(encoded_content() ::
+ #content{class_id :: rabbit_framing:amqp_class_id(),
+ properties :: maybe(rabbit_framing:amqp_property_record()),
+ properties_bin :: binary(),
+ payload_fragments_rev :: [binary()]}).
+-type(content() :: undecoded_content() | decoded_content()).
+-type(basic_message() ::
+ #basic_message{exchange_name :: rabbit_exchange:name(),
+ routing_key :: rabbit_router:routing_key(),
+ content :: content(),
+ guid :: rabbit_guid:guid(),
+ is_persistent :: boolean()}).
+-type(message() :: basic_message()).
+-type(delivery() ::
+ #delivery{mandatory :: boolean(),
+ immediate :: boolean(),
+ txn :: maybe(txn()),
+ sender :: pid(),
+ message :: message()}).
+
+%% this is really an abstract type, but dialyzer does not support them
+-type(txn() :: rabbit_guid:guid()).
+
+-type(info_key() :: atom()).
+-type(info() :: {info_key(), any()}).
+
+-endif. % use_specs
diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl
index 7c826d98..2b3082bc 100644
--- a/src/rabbit_writer.erl
+++ b/src/rabbit_writer.erl
@@ -56,20 +56,20 @@
-> pid()).
-spec(send_command/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok').
-spec(send_command/3 ::
- (pid(), rabbit_framing:amqp_method_record(), rabbit:content()) -> 'ok').
+ (pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) -> 'ok').
-spec(send_command_and_signal_back/3 ::
(pid(), rabbit_framing:amqp_method(), pid()) -> 'ok').
-spec(send_command_and_signal_back/4 ::
- (pid(), rabbit_framing:amqp_method(), rabbit:content(), pid()) -> 'ok').
+ (pid(), rabbit_framing:amqp_method(), rabbit_types:content(), pid()) -> 'ok').
-spec(send_command_and_notify/5 ::
- (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit:content())
+ (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit_types:content())
-> 'ok').
-spec(internal_send_command/3 ::
(rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record())
-> 'ok').
-spec(internal_send_command/5 ::
(rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record(),
- rabbit:content(), non_neg_integer()) -> 'ok').
+ rabbit_types:content(), non_neg_integer()) -> 'ok').
-endif.