summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/ExchangeRegistry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/ExchangeRegistry.cpp')
-rw-r--r--cpp/src/qpid/broker/ExchangeRegistry.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/cpp/src/qpid/broker/ExchangeRegistry.cpp b/cpp/src/qpid/broker/ExchangeRegistry.cpp
index 03863673df..3bf211b960 100644
--- a/cpp/src/qpid/broker/ExchangeRegistry.cpp
+++ b/cpp/src/qpid/broker/ExchangeRegistry.cpp
@@ -27,21 +27,30 @@
using namespace qpid::broker;
using namespace qpid::sys;
using std::pair;
+using qpid::framing::FieldTable;
-pair<Exchange::shared_ptr, bool> ExchangeRegistry::declare(const string& name, const string& type) throw(UnknownExchangeTypeException){
+pair<Exchange::shared_ptr, bool> ExchangeRegistry::declare(const string& name, const string& type)
+ throw(UnknownExchangeTypeException){
+
+ return declare(name, type, false, FieldTable());
+}
+
+pair<Exchange::shared_ptr, bool> ExchangeRegistry::declare(const string& name, const string& type,
+ bool durable, const FieldTable& args)
+ throw(UnknownExchangeTypeException){
Mutex::ScopedLock locker(lock);
ExchangeMap::iterator i = exchanges.find(name);
if (i == exchanges.end()) {
Exchange::shared_ptr exchange;
if(type == TopicExchange::typeName){
- exchange = Exchange::shared_ptr(new TopicExchange(name));
+ exchange = Exchange::shared_ptr(new TopicExchange(name, durable, args));
}else if(type == DirectExchange::typeName){
- exchange = Exchange::shared_ptr(new DirectExchange(name));
+ exchange = Exchange::shared_ptr(new DirectExchange(name, durable, args));
}else if(type == FanOutExchange::typeName){
- exchange = Exchange::shared_ptr(new FanOutExchange(name));
+ exchange = Exchange::shared_ptr(new FanOutExchange(name, durable, args));
}else if (type == HeadersExchange::typeName) {
- exchange = Exchange::shared_ptr(new HeadersExchange(name));
+ exchange = Exchange::shared_ptr(new HeadersExchange(name, durable, args));
}else{
throw UnknownExchangeTypeException();
}
@@ -54,7 +63,10 @@ pair<Exchange::shared_ptr, bool> ExchangeRegistry::declare(const string& name, c
void ExchangeRegistry::destroy(const string& name){
Mutex::ScopedLock locker(lock);
- exchanges.erase(name);
+ ExchangeMap::iterator i = exchanges.find(name);
+ if (i != exchanges.end()) {
+ exchanges.erase(i);
+ }
}
Exchange::shared_ptr ExchangeRegistry::get(const string& name){