You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2012/11/17 18:06:56 UTC

svn commit: r1410748 - in /qpid/trunk/qpid/cpp/src/qpid/broker/amqp: NodeProperties.cpp NodeProperties.h Session.cpp

Author: gsim
Date: Sat Nov 17 17:06:55 2012
New Revision: 1410748

URL: http://svn.apache.org/viewvc?rev=1410748&view=rev
Log:
QPID-4368: Added support for some specific AMQP 0-10 derived node options

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Session.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp?rev=1410748&r1=1410747&r2=1410748&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.cpp Sat Nov 17 17:06:55 2012
@@ -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::
     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
 
 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

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h?rev=1410748&r1=1410747&r2=1410748&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/NodeProperties.h Sat Nov 17 17:06:55 2012
@@ -53,8 +53,15 @@ class NodeProperties : public qpid::amqp
     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&);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Session.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Session.cpp?rev=1410748&r1=1410747&r2=1410748&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Session.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Session.cpp Sat Nov 17 17:06:55 2012
@@ -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(c
         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");



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org