diff options
Diffstat (limited to 'cpp/src/qpid/framing/FieldTable.cpp')
| -rw-r--r-- | cpp/src/qpid/framing/FieldTable.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/cpp/src/qpid/framing/FieldTable.cpp b/cpp/src/qpid/framing/FieldTable.cpp index 903c7ed100..1f8ffa72bc 100644 --- a/cpp/src/qpid/framing/FieldTable.cpp +++ b/cpp/src/qpid/framing/FieldTable.cpp @@ -31,7 +31,7 @@ namespace framing { FieldTable::~FieldTable() {} uint32_t FieldTable::size() const { - uint32_t len(4); + uint32_t len(4/*size field*/ + 4/*count field*/); for(ValueMap::const_iterator i = values.begin(); i != values.end(); ++i) { // shortstr_len_byte + key size + value size len += 1 + (i->first).size() + (i->second)->size(); @@ -121,8 +121,9 @@ int FieldTable::getInt(const std::string& name) const { // value = getValue<FieldTable>(name); //} -void FieldTable::encode(Buffer& buffer) const{ +void FieldTable::encode(Buffer& buffer) const{ buffer.putLong(size() - 4); + buffer.putLong(values.size()); for (ValueMap::const_iterator i = values.begin(); i!=values.end(); ++i) { buffer.putShortString(i->first); i->second->encode(buffer); @@ -132,10 +133,11 @@ void FieldTable::encode(Buffer& buffer) const{ void FieldTable::decode(Buffer& buffer){ uint32_t len = buffer.getLong(); uint32_t available = buffer.available(); + uint32_t count = buffer.getLong(); if (available < len) throw IllegalArgumentException(QPID_MSG("Not enough data for field table.")); uint32_t leftover = available - len; - while(buffer.available() > leftover){ + while(buffer.available() > leftover && count--){ std::string name; ValuePtr value(new FieldValue); |
