summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Message.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-11-08 14:05:38 +0000
committerGordon Sim <gsim@apache.org>2007-11-08 14:05:38 +0000
commit604a216da725da2770978756de763caa5c66e5c7 (patch)
tree194340aa45f23efb6fc037d11f61ff63d47ffc7f /cpp/src/qpid/broker/Message.cpp
parentcb5d95fba16cbe2a0e03eae6ba6c9ce776b88327 (diff)
downloadqpid-python-604a216da725da2770978756de763caa5c66e5c7.tar.gz
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
Diffstat (limited to 'cpp/src/qpid/broker/Message.cpp')
-rw-r--r--cpp/src/qpid/broker/Message.cpp24
1 files changed, 16 insertions, 8 deletions
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<AMQContentBody>()->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<AMQContentBody>()->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;
}