From a29b83f08ed76102923a9304dc8c89c68faca97c Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 29 Apr 2013 18:04:17 +0000 Subject: QPID-4339: simple paged queue implementation git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1477236 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Protocol.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'cpp/src/qpid/broker/Protocol.cpp') diff --git a/cpp/src/qpid/broker/Protocol.cpp b/cpp/src/qpid/broker/Protocol.cpp index e236698142..a98160e502 100644 --- a/cpp/src/qpid/broker/Protocol.cpp +++ b/cpp/src/qpid/broker/Protocol.cpp @@ -20,6 +20,7 @@ */ #include "Protocol.h" #include "qpid/sys/ConnectionCodec.h" +#include "qpid/broker/RecoverableMessageImpl.h" #include "qpid/broker/amqp_0_10/MessageTransfer.h" #include "qpid/log/Statement.h" @@ -47,13 +48,25 @@ boost::intrusive_ptr ProtocolReg } boost::shared_ptr ProtocolRegistry::recover(qpid::framing::Buffer& b) { - boost::shared_ptr msg; - for (Protocols::const_iterator i = protocols.begin(); !msg && i != protocols.end(); ++i) { - msg = i->second->recover(b); + uint32_t position = b.getPosition(); + for (Protocols::const_iterator i = protocols.begin(); i != protocols.end(); ++i) { + boost::shared_ptr msg = i->second->recover(b); + if (msg) return msg; + else b.setPosition(position); } + boost::intrusive_ptr transfer(new qpid::broker::amqp_0_10::MessageTransfer()); + transfer->decodeHeader(b); + boost::shared_ptr msg(new RecoverableMessageImpl(Message(transfer, transfer))); return msg; } +Message ProtocolRegistry::decode(qpid::framing::Buffer& buffer) +{ + boost::shared_ptr r = recover(buffer); + r->decodeContent(buffer); + return r->getMessage(); +} + ProtocolRegistry::~ProtocolRegistry() { for (Protocols::const_iterator i = protocols.begin(); i != protocols.end(); ++i) { -- cgit v1.2.1