summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hood <0x6e6562@gmail.com>2008-10-13 18:26:55 +0100
committerBen Hood <0x6e6562@gmail.com>2008-10-13 18:26:55 +0100
commit14fd2f2fc46b92b625a5a843b1411f7247a81085 (patch)
tree651346141ffa10682ca8da4befe9d3483b6ef9b7
parentb19a9ccca183885e431fd1a0a1646a2e212885ab (diff)
downloadrabbitmq-server-14fd2f2fc46b92b625a5a843b1411f7247a81085.tar.gz
Added arguments field to binding
-rw-r--r--include/rabbit.hrl4
-rw-r--r--src/rabbit_exchange.erl20
2 files changed, 13 insertions, 11 deletions
diff --git a/include/rabbit.hrl b/include/rabbit.hrl
index b0890144..706a92af 100644
--- a/include/rabbit.hrl
+++ b/include/rabbit.hrl
@@ -49,8 +49,8 @@
-record(route, {binding, value = const}).
-record(reverse_route, {reverse_binding, value = const}).
--record(binding, {exchange_name, key, queue_name}).
--record(reverse_binding, {queue_name, key, exchange_name}).
+-record(binding, {exchange_name, key, queue_name, args = []}).
+-record(reverse_binding, {queue_name, key, exchange_name, args = []}).
-record(listener, {node, protocol, host, port}).
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index 2db7758d..808cf8ae 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -289,32 +289,33 @@ call_with_exchange_and_queue(Exchange, Queue, Fun) ->
end
end).
-add_binding(ExchangeName, QueueName, RoutingKey, _Arguments) ->
+add_binding(ExchangeName, QueueName, RoutingKey, Arguments) ->
call_with_exchange_and_queue(
ExchangeName, QueueName,
fun (X, Q) ->
if Q#amqqueue.durable and not(X#exchange.durable) ->
{error, durability_settings_incompatible};
true -> ok = sync_binding(
- ExchangeName, QueueName, RoutingKey,
- Q#amqqueue.durable, fun mnesia:write/3)
+ ExchangeName, QueueName, RoutingKey, Arguments,
+ Q#amqqueue.durable, fun mnesia:write/3)
end
end).
-delete_binding(ExchangeName, QueueName, RoutingKey, _Arguments) ->
+delete_binding(ExchangeName, QueueName, RoutingKey, Arguments) ->
call_with_exchange_and_queue(
ExchangeName, QueueName,
fun (X, Q) ->
ok = sync_binding(
- ExchangeName, QueueName, RoutingKey,
+ ExchangeName, QueueName, RoutingKey, Arguments,
Q#amqqueue.durable, fun mnesia:delete_object/3),
maybe_auto_delete(X)
end).
-sync_binding(ExchangeName, QueueName, RoutingKey, Durable, Fun) ->
+sync_binding(ExchangeName, QueueName, RoutingKey, Arguments, Durable, Fun) ->
Binding = #binding{exchange_name = ExchangeName,
queue_name = QueueName,
- key = RoutingKey},
+ key = RoutingKey,
+ args = Arguments},
ok = case Durable of
true -> Fun(durable_routes, #route{binding = Binding}, write);
false -> ok
@@ -409,7 +410,8 @@ list_exchange_bindings(ExchangeName) ->
Route = #route{binding = #binding{exchange_name = ExchangeName,
queue_name = '_',
key = '_'}},
- [{QueueName, RoutingKey, []} ||
+ [{QueueName, RoutingKey, Args} ||
#route{binding = #binding{queue_name = QueueName,
- key = RoutingKey}}
+ key = RoutingKey,
+ args = Args}}
<- mnesia:dirty_match_object(Route)].