summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Protocol.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-04-29 18:04:17 +0000
committerGordon Sim <gsim@apache.org>2013-04-29 18:04:17 +0000
commita29b83f08ed76102923a9304dc8c89c68faca97c (patch)
tree05cadd4783165344d510c0c6d6f69f933b36455f /cpp/src/qpid/broker/Protocol.cpp
parentfe17c41b0b6b3e31ad575dfd2ff9a4b007650dbe (diff)
downloadqpid-python-a29b83f08ed76102923a9304dc8c89c68faca97c.tar.gz
QPID-4339: simple paged queue implementation
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1477236 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Protocol.cpp')
-rw-r--r--cpp/src/qpid/broker/Protocol.cpp19
1 files changed, 16 insertions, 3 deletions
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<const qpid::broker::amqp_0_10::MessageTransfer> ProtocolReg
}
boost::shared_ptr<RecoverableMessage> ProtocolRegistry::recover(qpid::framing::Buffer& b)
{
- boost::shared_ptr<RecoverableMessage> 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<RecoverableMessage> msg = i->second->recover(b);
+ if (msg) return msg;
+ else b.setPosition(position);
}
+ boost::intrusive_ptr<qpid::broker::amqp_0_10::MessageTransfer> transfer(new qpid::broker::amqp_0_10::MessageTransfer());
+ transfer->decodeHeader(b);
+ boost::shared_ptr<RecoverableMessage> msg(new RecoverableMessageImpl(Message(transfer, transfer)));
return msg;
}
+Message ProtocolRegistry::decode(qpid::framing::Buffer& buffer)
+{
+ boost::shared_ptr<RecoverableMessage> r = recover(buffer);
+ r->decodeContent(buffer);
+ return r->getMessage();
+}
+
ProtocolRegistry::~ProtocolRegistry()
{
for (Protocols::const_iterator i = protocols.begin(); i != protocols.end(); ++i) {