From b0376ce7dba7f2db3c948e4c41fb401d2f44ef7e Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 21 Nov 2012 19:31:08 +0000 Subject: QPID-4448: fix credit checking on 0-10 path when message is of 1.0 format git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1412239 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/Protocol.cpp | 1 + qpid/cpp/src/qpid/broker/SemanticState.cpp | 8 +++++--- qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp | 5 ----- qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.h | 1 - 4 files changed, 6 insertions(+), 9 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/broker/Protocol.cpp b/qpid/cpp/src/qpid/broker/Protocol.cpp index 90d4d7833f..e236698142 100644 --- a/qpid/cpp/src/qpid/broker/Protocol.cpp +++ b/qpid/cpp/src/qpid/broker/Protocol.cpp @@ -42,6 +42,7 @@ boost::intrusive_ptr ProtocolReg for (Protocols::const_iterator i = protocols.begin(); !transfer && i != protocols.end(); ++i) { transfer = i->second->translate(m); } + if (!transfer) throw new Exception("Could not convert message into 0-10"); return transfer; } boost::shared_ptr ProtocolRegistry::recover(qpid::framing::Buffer& b) diff --git a/qpid/cpp/src/qpid/broker/SemanticState.cpp b/qpid/cpp/src/qpid/broker/SemanticState.cpp index 4a3f31a7c0..0dc8d6cdfe 100644 --- a/qpid/cpp/src/qpid/broker/SemanticState.cpp +++ b/qpid/cpp/src/qpid/broker/SemanticState.cpp @@ -398,7 +398,8 @@ ostream& operator<<(ostream& o, const ConsumerName& pc) { void SemanticState::ConsumerImpl::allocateCredit(const Message& msg) { Credit original = credit; - credit.consume(1, qpid::broker::amqp_0_10::MessageTransfer::getRequiredCredit(msg)); + boost::intrusive_ptr transfer = protocols.translate(msg); + credit.consume(1, transfer->getRequiredCredit()); QPID_LOG(debug, "Credit allocated for " << ConsumerName(*this) << ", was " << original << " now " << credit); @@ -406,9 +407,10 @@ void SemanticState::ConsumerImpl::allocateCredit(const Message& msg) bool SemanticState::ConsumerImpl::checkCredit(const Message& msg) { - bool enoughCredit = credit.check(1, qpid::broker::amqp_0_10::MessageTransfer::getRequiredCredit(msg)); + boost::intrusive_ptr transfer = protocols.translate(msg); + bool enoughCredit = credit.check(1, transfer->getRequiredCredit()); QPID_LOG(debug, "Subscription " << ConsumerName(*this) << " has " << (enoughCredit ? "sufficient " : "insufficient") - << " credit for message of " << qpid::broker::amqp_0_10::MessageTransfer::getRequiredCredit(msg) << " bytes: " + << " credit for message of " << transfer->getRequiredCredit() << " bytes: " << credit); return enoughCredit; } diff --git a/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp b/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp index cac4434c48..db7a0f02d5 100644 --- a/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp +++ b/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.cpp @@ -116,11 +116,6 @@ void MessageTransfer::computeRequiredCredit() requiredCredit = sum.getSize(); cachedRequiredCredit = true; } -uint32_t MessageTransfer::getRequiredCredit(const qpid::broker::Message& msg) -{ - //TODO: may need to reflect annotations and other modifications in this also - return get(msg).getRequiredCredit(); -} qpid::framing::FrameSet& MessageTransfer::getFrames() { diff --git a/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.h b/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.h index 590e389518..9e432235e6 100644 --- a/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.h +++ b/qpid/cpp/src/qpid/broker/amqp_0_10/MessageTransfer.h @@ -109,7 +109,6 @@ class MessageTransfer : public qpid::broker::Message::Encoding, public qpid::bro QPID_BROKER_EXTERN bool isLastQMFResponse(const std::string correlation) const; static bool isImmediateDeliveryRequired(const qpid::broker::Message& message); - static uint32_t getRequiredCredit(const qpid::broker::Message&); static MessageTransfer& get(qpid::broker::Message& message) { return *dynamic_cast(&message.getEncoding()); } -- cgit v1.2.1