summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing/AMQHeaderBody.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/framing/AMQHeaderBody.h')
-rw-r--r--cpp/src/qpid/framing/AMQHeaderBody.h19
1 files changed, 16 insertions, 3 deletions
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;
}