From af2c37483f182bb67fd71a1fbb68f921c839728b Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Mon, 3 Mar 2014 12:46:30 +0000 Subject: QPID-5594: [amqp1.0] missing first-acquirer property support in C++ broker git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1573546 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/Message.cpp | 4 ++-- qpid/cpp/src/qpid/broker/Message.h | 6 ++++-- qpid/cpp/src/qpid/broker/amqp/Header.cpp | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/broker/Message.cpp b/qpid/cpp/src/qpid/broker/Message.cpp index db6149158a..6585466056 100644 --- a/qpid/cpp/src/qpid/broker/Message.cpp +++ b/qpid/cpp/src/qpid/broker/Message.cpp @@ -46,12 +46,12 @@ using std::string; namespace qpid { namespace broker { -Message::Message() : deliveryCount(-1), publisher(0), expiration(FAR_FUTURE), timestamp(0), +Message::Message() : deliveryCount(-1), alreadyAcquired(false), publisher(0), expiration(FAR_FUTURE), timestamp(0), isManagementMessage(false), replicationId(0) {} Message::Message(boost::intrusive_ptr e, boost::intrusive_ptr p) - : encoding(e), persistentContext(p), deliveryCount(-1), publisher(0), + : encoding(e), persistentContext(p), deliveryCount(-1), alreadyAcquired(false), publisher(0), expiration(FAR_FUTURE), timestamp(0), isManagementMessage(false), replicationId(0) { diff --git a/qpid/cpp/src/qpid/broker/Message.h b/qpid/cpp/src/qpid/broker/Message.h index defb6988eb..ecd84901f9 100644 --- a/qpid/cpp/src/qpid/broker/Message.h +++ b/qpid/cpp/src/qpid/broker/Message.h @@ -85,10 +85,11 @@ public: QPID_BROKER_EXTERN ~Message(); bool isRedelivered() const { return deliveryCount > 0; } - void deliver() { ++deliveryCount; } + bool hasBeenAcquired() const { return alreadyAcquired; } + void deliver() { ++deliveryCount; alreadyAcquired |= (deliveryCount>0); } void undeliver() { --deliveryCount; } int getDeliveryCount() const { return deliveryCount; } - void resetDeliveryCount() { deliveryCount = -1; } + void resetDeliveryCount() { deliveryCount = -1; alreadyAcquired = false; } QPID_BROKER_EXTERN void setPublisher(const Connection& p); const Connection* getPublisher() const; @@ -148,6 +149,7 @@ public: boost::intrusive_ptr encoding; boost::intrusive_ptr persistentContext; int deliveryCount; + bool alreadyAcquired; const Connection* publisher; qpid::sys::AbsTime expiration; boost::intrusive_ptr expiryPolicy; diff --git a/qpid/cpp/src/qpid/broker/amqp/Header.cpp b/qpid/cpp/src/qpid/broker/amqp/Header.cpp index 038f0a90cc..e1b3d22553 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Header.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Header.cpp @@ -51,7 +51,7 @@ uint32_t Header::getTtl() const bool Header::isFirstAcquirer() const { - return false;//TODO + return (!message.hasBeenAcquired()); } uint32_t Header::getDeliveryCount() const -- cgit v1.2.1