diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/framing/AMQHeaderBody.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/framing/AMQHeaderBody.h | 19 | ||||
-rw-r--r-- | cpp/src/qpid/framing/StructHelper.h | 4 |
3 files changed, 19 insertions, 6 deletions
diff --git a/cpp/src/qpid/framing/AMQHeaderBody.cpp b/cpp/src/qpid/framing/AMQHeaderBody.cpp index 7083709fde..93568f5f46 100644 --- a/cpp/src/qpid/framing/AMQHeaderBody.cpp +++ b/cpp/src/qpid/framing/AMQHeaderBody.cpp @@ -29,7 +29,7 @@ qpid::framing::AMQHeaderBody::~AMQHeaderBody() {} uint32_t qpid::framing::AMQHeaderBody::size() const{ CalculateSize visitor; for_each(properties.begin(), properties.end(), boost::apply_visitor(visitor)); - return visitor.totalSize() + (properties.size() * (2/*type codes*/ + 4/*size*/)); + return visitor.totalSize(); } void qpid::framing::AMQHeaderBody::encode(Buffer& buffer) const { diff --git a/cpp/src/qpid/framing/AMQHeaderBody.h b/cpp/src/qpid/framing/AMQHeaderBody.h index 76bd60559e..9fd99bd2d9 100644 --- a/cpp/src/qpid/framing/AMQHeaderBody.h +++ b/cpp/src/qpid/framing/AMQHeaderBody.h @@ -41,8 +41,13 @@ class AMQHeaderBody : public AMQBody PropertyList properties; + void decode(BasicHeaderProperties s, Buffer& b, uint32_t size) { + s.decode(b, size); + properties.push_back(s); + } + template <class T> void decode(T t, Buffer& b, uint32_t size) { - t.decode(b, size); + t.decodeStructBody(b, size); properties.push_back(t); } @@ -52,10 +57,14 @@ class AMQHeaderBody : public AMQBody Encode(Buffer& b) : buffer(b) {} template <class T> void operator()(T& t) const { - buffer.putLong(t.size() + 2/*typecode*/); - buffer.putShort(T::TYPE); t.encode(buffer); } + + void operator()(const BasicHeaderProperties& s) const { + buffer.putLong(s.size() + 2/*typecode*/); + buffer.putShort(BasicHeaderProperties::TYPE); + s.encode(buffer); + } }; class CalculateSize : public boost::static_visitor<> { @@ -67,6 +76,10 @@ class AMQHeaderBody : public AMQBody size += t.size(); } + void operator()(const BasicHeaderProperties& s) { + size += s.size() + 2/*typecode*/ + 4/*size field*/; + } + uint32_t totalSize() { return size; } diff --git a/cpp/src/qpid/framing/StructHelper.h b/cpp/src/qpid/framing/StructHelper.h index 7fc1d2e22b..ad6ba89906 100644 --- a/cpp/src/qpid/framing/StructHelper.h +++ b/cpp/src/qpid/framing/StructHelper.h @@ -38,14 +38,14 @@ public: data.resize(size); Buffer wbuffer(const_cast<char*>(data.data()), size); wbuffer.putShort(T::TYPE); - t.encode(wbuffer); + t.encodeStructBody(wbuffer); } template <class T> void decode(T& t, const std::string& data) { Buffer rbuffer(const_cast<char*>(data.data()), data.length()); uint16_t type = rbuffer.getShort(); if (type == T::TYPE) { - t.decode(rbuffer); + t.decodeStructBody(rbuffer); } else { throw Exception("Type code does not match"); } |