Author: gsim
Date: Fri Apr 5 17:07:57 2013
New Revision: 1465047
URL: http://svn.apache.org/r1465047
Log:
QPID-4716: set durability on terminus
Modified:
qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h
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=1465047&r1=1465046&r2=1465047&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp Fri Apr 5
17:07:57 2013
@@ -51,6 +51,9 @@ const std::string NODE("node");
const std::string LINK("link");
const std::string CAPABILITIES("capabilities");
const std::string PROPERTIES("properties");
+const std::string MODE("mode");
+const std::string BROWSE("browse");
+const std::string CONSUME("consume");
const std::string TYPE("type");
const std::string TOPIC("topic");
@@ -166,7 +169,13 @@ void flatten(Variant::Map& base, const s
}
}
-AddressHelper::AddressHelper(const Address& address) :
isTemporary(AddressImpl::isTemporary(address)), name(address.getName()),
type(address.getType())
+AddressHelper::AddressHelper(const Address& address) :
+ isTemporary(AddressImpl::isTemporary(address)),
+ name(address.getName()),
+ type(address.getType()),
+ durableNode(false),
+ durableLink(false),
+ browse(false)
{
bind(address, CREATE, createPolicy);
bind(address, DELETE, deletePolicy);
@@ -177,6 +186,15 @@ AddressHelper::AddressHelper(const Addre
bind(node, PROPERTIES, properties);
bind(node, CAPABILITIES, capabilities);
durableNode = test(node, DURABLE);
+ durableLink = test(link, DURABLE);
+ std::string mode;
+ if (bind(address, MODE, mode)) {
+ if (mode == BROWSE) {
+ browse = true;
+ } else if (mode != CONSUME) {
+ throw qpid::messaging::AddressError("Invalid value for mode; must
be 'browse' or 'consume'.");
+ }
+ }
if (!deletePolicy.empty()) {
throw qpid::messaging::AddressError("Delete policies not supported
over AMQP 1.0.");
@@ -289,6 +307,12 @@ void AddressHelper::configure(pn_terminu
}
}
setCapabilities(terminus, createOnDemand);
+ if (durableLink) {
+ pn_terminus_set_durability(terminus, PN_DELIVERIES);
+ }
+ if (mode == FOR_RECEIVER && browse) {
+ //when PROTON-139 is resolved, set the required delivery-mode
+ }
}
void AddressHelper::setCapabilities(pn_terminus_t* terminus, bool create)
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=1465047&r1=1465046&r2=1465047&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h Fri Apr 5
17:07:57 2013
@@ -53,6 +53,8 @@ class AddressHelper
std::string name;
std::string type;
bool durableNode;
+ bool durableLink;
+ bool browse;
bool enabled(const std::string& policy, CheckMode mode) const;
bool createEnabled(CheckMode mode) const;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]