diff options
Diffstat (limited to 'cpp/lib/common/framing/AMQResponseBody.cpp')
-rw-r--r-- | cpp/lib/common/framing/AMQResponseBody.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/cpp/lib/common/framing/AMQResponseBody.cpp b/cpp/lib/common/framing/AMQResponseBody.cpp index 1e1fbdf4bd..49fdea9242 100644 --- a/cpp/lib/common/framing/AMQResponseBody.cpp +++ b/cpp/lib/common/framing/AMQResponseBody.cpp @@ -22,38 +22,39 @@ namespace qpid { namespace framing { -AMQResponseBody::AMQResponseBody(AMQP_MethodVersionMap& vm, ProtocolVersion v) - : versionMap(vm), version(v) {} - -AMQResponseBody::AMQResponseBody( - AMQP_MethodVersionMap& vm, ProtocolVersion v, - u_int64_t respId, u_int64_t reqId, u_int32_t batch, - AMQMethodBody::shared_ptr m -) : versionMap(vm), version(v), - responseId(respId), requestId(reqId), batchOffset(batch), method(m) -{} - -void -AMQResponseBody::encode(Buffer& buffer) const { - assert(method.get()); +void AMQResponseBody::Data::encode(Buffer& buffer) const { buffer.putLongLong(responseId); buffer.putLongLong(requestId); buffer.putLong(batchOffset); - method->encode(buffer); } -void -AMQResponseBody::decode(Buffer& buffer, u_int32_t /*size*/) { +void AMQResponseBody::Data::decode(Buffer& buffer) { responseId = buffer.getLongLong(); requestId = buffer.getLongLong(); batchOffset = buffer.getLong(); - method = AMQMethodBody::create(versionMap, version, buffer); } -void -AMQResponseBody::print(std::ostream& out) const +void AMQResponseBody::encode(Buffer& buffer) const { + data.encode(buffer); + encodeId(buffer); + encodeContent(buffer); +} + +AMQResponseBody::shared_ptr AMQResponseBody::create( + AMQP_MethodVersionMap& versionMap, ProtocolVersion version, + Buffer& buffer) { - out << "response(" << size() << " bytes) " << *method; + MethodId id; + Data data; + data.decode(buffer); + id.decode(buffer); + AMQResponseBody* body = dynamic_cast<AMQResponseBody*>( + versionMap.createMethodBody( + id.classId, id.methodId, version.getMajor(), version.getMinor())); + assert(body); + body->data = data; + return AMQResponseBody::shared_ptr(body); } + }} // namespace qpid::framing |