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