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 2013/07/31 14:35:13 UTC

svn commit: r1508832 - in /qpid/trunk/qpid/cpp/src/qpid/messaging/amqp: AddressHelper.cpp AddressHelper.h ReceiverContext.cpp SenderContext.cpp

Author: gsim
Date: Wed Jul 31 12:35:12 2013
New Revision: 1508832

URL: http://svn.apache.org/r1508832
Log:
QPID-5026: make receivers target and senders source configurable, defaulting to the named node if not specified

Modified:
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp?rev=1508832&r1=1508831&r2=1508832&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp Wed Jul 31 12:35:12 2013
@@ -70,6 +70,8 @@ const std::string FILTER("filter");
 const std::string DESCRIPTOR("descriptor");
 const std::string VALUE("value");
 const std::string SUBJECT_FILTER("subject-filter");
+const std::string SOURCE("sender-source");
+const std::string TARGET("receiver-target");
 
 //distribution modes:
 const std::string MOVE("move");
@@ -516,6 +518,27 @@ const qpid::types::Variant::Map& Address
     return link;
 }
 
+bool AddressHelper::getLinkSource(std::string& out) const
+{
+    return getLinkOption(SOURCE, out);
+}
+
+bool AddressHelper::getLinkTarget(std::string& out) const
+{
+    return getLinkOption(TARGET, out);
+}
+
+bool AddressHelper::getLinkOption(const std::string& name, std::string& out) const
+{
+    qpid::types::Variant::Map::const_iterator i = link.find(name);
+    if (i != link.end()) {
+        out = i->second.asString();
+        return true;
+    } else {
+        return false;
+    }
+}
+
 void AddressHelper::configure(pn_terminus_t* terminus, CheckMode mode)
 {
     bool createOnDemand(false);
@@ -532,6 +555,7 @@ void AddressHelper::configure(pn_terminu
             createOnDemand = true;
         }
     }
+
     setCapabilities(terminus, createOnDemand);
     if (durableLink) {
         pn_terminus_set_durability(terminus, PN_DELIVERIES);
@@ -651,6 +675,8 @@ Verifier::Verifier()
     link[DURABLE] = true;
     link[RELIABILITY] = true;
     link[TIMEOUT] = true;
+    link[SOURCE] = true;
+    link[TARGET] = true;
     link[X_SUBSCRIBE] = true;
     link[X_DECLARE] = true;
     link[X_BINDINGS] = true;

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h?rev=1508832&r1=1508831&r2=1508832&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h Wed Jul 31 12:35:12 2013
@@ -40,6 +40,8 @@ class AddressHelper
     void checkAssertion(pn_terminus_t* terminus, CheckMode mode);
 
     const qpid::types::Variant::Map& getNodeProperties() const;
+    bool getLinkSource(std::string& out) const;
+    bool getLinkTarget(std::string& out) const;
     const qpid::types::Variant::Map& getLinkProperties() const;
     static std::string getLinkName(const Address& address);
   private:
@@ -83,6 +85,7 @@ class AddressHelper
     void addFilters(const qpid::types::Variant::List&);
     void confirmFilter(const std::string& descriptor);
     void confirmFilter(uint64_t descriptor);
+    bool getLinkOption(const std::string& name, std::string& out) const;
 };
 }}} // namespace qpid::messaging::amqp
 

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp?rev=1508832&r1=1508831&r2=1508832&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp Wed Jul 31 12:35:12 2013
@@ -96,11 +96,16 @@ void ReceiverContext::verify(pn_terminus
 void ReceiverContext::configure()
 {
     configure(pn_link_source(receiver));
-    pn_terminus_set_address(pn_link_target(receiver), pn_terminus_get_address(pn_link_source(receiver)));
 }
 void ReceiverContext::configure(pn_terminus_t* source)
 {
     helper.configure(source, AddressHelper::FOR_RECEIVER);
+    std::string option;
+    if (helper.getLinkTarget(option)) {
+        pn_terminus_set_address(pn_link_target(receiver), option.c_str());
+    } else {
+        pn_terminus_set_address(pn_link_target(receiver), pn_terminus_get_address(pn_link_source(receiver)));
+    }
 }
 
 Address ReceiverContext::getAddress() const

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp?rev=1508832&r1=1508831&r2=1508832&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp Wed Jul 31 12:35:12 2013
@@ -506,7 +506,12 @@ void SenderContext::configure()
 void SenderContext::configure(pn_terminus_t* target)
 {
     helper.configure(target, AddressHelper::FOR_SENDER);
-    pn_terminus_set_address(pn_link_source(sender), pn_terminus_get_address(pn_link_target(sender)));
+    std::string option;
+    if (helper.getLinkSource(option)) {
+        pn_terminus_set_address(pn_link_source(sender), option.c_str());
+    } else {
+        pn_terminus_set_address(pn_link_source(sender), pn_terminus_get_address(pn_link_target(sender)));
+    }
 }
 
 bool SenderContext::settled()



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