summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2012-11-17 17:06:55 +0000
committerGordon Sim <gsim@apache.org>2012-11-17 17:06:55 +0000
commit2b87d88b857e666ef81d31bcde3db0b17bb72ef3 (patch)
treea611d2fccb579de660cbee6a2d7a16467022886e
parent421e03c1ac19405d4d756f1b34e3ca7225a865a8 (diff)
downloadqpid-python-2b87d88b857e666ef81d31bcde3db0b17bb72ef3.tar.gz
QPID-4368: Added support for some specific AMQP 0-10 derived node options
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1410748 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp31
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/NodeProperties.h7
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Session.cpp8
3 files changed, 38 insertions, 8 deletions
diff --git a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp
index c12b161e8b..eea7612cb9 100644
--- a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp
@@ -35,11 +35,16 @@ namespace {
//distribution modes:
const std::string MOVE("move");
const std::string COPY("copy");
-
const std::string SUPPORTED_DIST_MODES("supported-dist-modes");
+
+//AMQP 0-10 standard parameters:
+const std::string DURABLE("durable");
+const std::string AUTO_DELETE("auto-delete");
+const std::string ALTERNATE_EXCHANGE("alternate-exchange");
+const std::string EXCHANGE_TYPE("exchange-type");
}
-NodeProperties::NodeProperties() : queue(true) {}
+NodeProperties::NodeProperties() : queue(true), durable(false), autoDelete(false), exchangeType("topic") {}
void NodeProperties::read(pn_data_t* data)
{
@@ -53,6 +58,14 @@ void NodeProperties::process(const std::string& key, const qpid::types::Variant&
if (key == SUPPORTED_DIST_MODES) {
if (value == MOVE) queue = true;
else if (value == COPY) queue = false;
+ } else if (key == DURABLE) {
+ durable = value;
+ } else if (key == AUTO_DELETE) {
+ autoDelete = value;
+ } else if (key == ALTERNATE_EXCHANGE) {
+ alternateExchange = value.asString();
+ } else if (key == EXCHANGE_TYPE) {
+ exchangeType = value.asString();
} else {
properties[key] = value;
}
@@ -140,7 +153,7 @@ void NodeProperties::onSymbolValue(const CharSequence& key, const CharSequence&
QueueSettings NodeProperties::getQueueSettings()
{
- QueueSettings settings(false/*durable*/, false/*auto-delete*/);
+ QueueSettings settings(durable, autoDelete);
qpid::types::Variant::Map unused;
settings.populate(properties, unused);
return settings;
@@ -150,5 +163,17 @@ bool NodeProperties::isQueue() const
{
return queue;
}
+bool NodeProperties::isDurable() const
+{
+ return durable;
+}
+std::string NodeProperties::getExchangeType() const
+{
+ return exchangeType;
+}
+std::string NodeProperties::getAlternateExchange() const
+{
+ return alternateExchange;
+}
}}} // namespace qpid::broker::amqp
diff --git a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h
index 2b3a98b6bd..b81d1d712c 100644
--- a/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h
+++ b/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h
@@ -53,8 +53,15 @@ class NodeProperties : public qpid::amqp::MapReader
void onSymbolValue(const qpid::amqp::CharSequence&, const qpid::amqp::CharSequence&, const qpid::amqp::Descriptor*);
bool isQueue() const;
QueueSettings getQueueSettings();
+ bool isDurable() const;
+ std::string getExchangeType() const;
+ std::string getAlternateExchange() const;
private:
bool queue;
+ bool durable;
+ bool autoDelete;
+ std::string exchangeType;
+ std::string alternateExchange;
qpid::types::Variant::Map properties;
void process(const std::string&, const qpid::types::Variant&);
diff --git a/qpid/cpp/src/qpid/broker/amqp/Session.cpp b/qpid/cpp/src/qpid/broker/amqp/Session.cpp
index f0756bc14d..93b8a747dc 100644
--- a/qpid/cpp/src/qpid/broker/amqp/Session.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/Session.cpp
@@ -22,9 +22,6 @@
#include "Outgoing.h"
#include "Message.h"
#include "ManagedConnection.h"
-#include "qpid/amqp/CharSequence.h"
-#include "qpid/amqp/Descriptor.h"
-#include "qpid/amqp/descriptors.h"
#include "qpid/broker/AsyncCompletion.h"
#include "qpid/broker/Broker.h"
#include "qpid/broker/DeliverableMessage.h"
@@ -99,10 +96,11 @@ Session::ResolvedNode Session::resolve(const std::string name, pn_terminus_t* te
NodeProperties properties;
properties.read(pn_terminus_properties(terminus));
if (properties.isQueue()) {
- node.queue = broker.createQueue(name, properties.getQueueSettings(), this, "", connection.getUserid(), connection.getId()).first;
+ node.queue = broker.createQueue(name, properties.getQueueSettings(), this, properties.getAlternateExchange(), connection.getUserid(), connection.getId()).first;
} else {
qpid::framing::FieldTable args;
- node.exchange = broker.createExchange(name, "topic"/*type*/, false/*durable*/, ""/*alternateExchange*/, args, connection.getUserid(), connection.getId()).first;
+ node.exchange = broker.createExchange(name, properties.getExchangeType(), properties.isDurable(), properties.getAlternateExchange(),
+ args, connection.getUserid(), connection.getId()).first;
}
} else if (node.queue && node.exchange) {
QPID_LOG_CAT(warning, protocol, "Ambiguous node name; " << name << " could be queue or exchange, assuming queue");