From 604a216da725da2770978756de763caa5c66e5c7 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 8 Nov 2007 14:05:38 +0000 Subject: Make standard exchanges durable Ensure flags are set correctly for recovered messages with no content git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@593159 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Message.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'cpp/src/qpid/broker/Message.cpp') diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp index 78d6cd3891..6e3e6a55f7 100644 --- a/cpp/src/qpid/broker/Message.cpp +++ b/cpp/src/qpid/broker/Message.cpp @@ -36,7 +36,7 @@ using std::string; TransferAdapter Message::TRANSFER; PublishAdapter Message::PUBLISH; -Message::Message(const SequenceNumber& id) : frames(id), persistenceId(0), redelivered(false), publisher(0), adapter(0) {} +Message::Message(const SequenceNumber& id) : frames(id), persistenceId(0), redelivered(false), loaded(false), publisher(0), adapter(0) {} std::string Message::getRoutingKey() const { @@ -121,12 +121,20 @@ void Message::decodeHeader(framing::Buffer& buffer) void Message::decodeContent(framing::Buffer& buffer) { - //get the data as a string and set that as the content - //body on a frame then add that frame to the frameset - AMQFrame frame; - frame.setBody(AMQContentBody()); - frame.castBody()->decode(buffer, buffer.available()); - frames.append(frame); + if (buffer.available()) { + //get the data as a string and set that as the content + //body on a frame then add that frame to the frameset + AMQFrame frame; + frame.setBody(AMQContentBody()); + frame.castBody()->decode(buffer, buffer.available()); + frames.append(frame); + } else { + //adjust header flags + MarkLastSegment f; + frames.map_if(f, TypeFilter(HEADER_BODY)); + } + //mark content loaded + loaded = true; } void Message::releaseContent(MessageStore* _store) @@ -205,5 +213,5 @@ uint64_t Message::contentSize() const bool Message::isContentLoaded() const { - return contentSize() > 0; + return loaded; } -- cgit v1.2.1