summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Protocol.cpp
diff options
context:
space:
mode:
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) {