ceph_msg_header& header,
ceph_msg_footer& footer,
bufferlist& front, bufferlist& middle,
- bufferlist& data)
+ bufferlist& data, Connection* conn)
{
// verify crc
if (crcflags & MSG_CRC_HEADER) {
return 0;
}
+ m->set_connection(conn);
m->set_header(header);
m->set_footer(footer);
m->set_payload(front);
::decode(fr, p);
::decode(mi, p);
::decode(da, p);
- return decode_message(cct, crcflags, h, f, fr, mi, da);
+ return decode_message(cct, crcflags, h, f, fr, mi, da, nullptr);
}
extern Message *decode_message(CephContext *cct, int crcflags,
ceph_msg_header &header,
ceph_msg_footer& footer, bufferlist& front,
- bufferlist& middle, bufferlist& data);
-inline ostream& operator<<(ostream &out, const Message &m) {
+ bufferlist& middle, bufferlist& data,
+ Connection* conn);
+inline ostream& operator<<(ostream& out, const Message& m) {
m.print(out);
if (m.get_header().version)
out << " v" << m.get_header().version;
ldout(async_msgr->cct, 20) << __func__ << " got " << front.length() << " + " << middle.length()
<< " + " << data.length() << " byte message" << dendl;
- Message *message = decode_message(async_msgr->cct, async_msgr->crcflags, current_header, footer, front, middle, data);
+ Message *message = decode_message(async_msgr->cct, async_msgr->crcflags, current_header, footer,
+ front, middle, data, this);
if (!message) {
ldout(async_msgr->cct, 1) << __func__ << " decode message failed " << dendl;
goto fail;
ldout(msgr->cct,20) << "reader got " << front.length() << " + " << middle.length() << " + " << data.length()
<< " byte message" << dendl;
- message = decode_message(msgr->cct, msgr->crcflags, header, footer, front, middle, data);
+ message = decode_message(msgr->cct, msgr->crcflags, header, footer,
+ front, middle, data, connection_state.get());
if (!message) {
ret = -EINVAL;
goto out_dethrottle;
/* update connection timestamp */
recv.set(tmsg->timestamp);
- Message *m =
- decode_message(msgr->cct, msgr->crcflags, header, footer, payload, middle,
- data);
+ Message *m = decode_message(msgr->cct, msgr->crcflags, header, footer,
+ payload, middle, data, this);
if (m) {
/* completion */