in finagle-mux/src/main/scala/com/twitter/finagle/mux/transport/Message.scala [627:652]
def decodeMessageBody(typ: Byte, tag: Int, byteReader: ByteReader): Message = {
if (Tags.isFragment(tag)) Fragment(typ, tag, byteReader.readAll())
else
typ match {
case Types.Tinit =>
val (version, ctx) = Init.decode(byteReader)
Tinit(tag, version, ctx)
case Types.Rinit =>
val (version, ctx) = Init.decode(byteReader)
Rinit(tag, version, ctx)
case Types.Treq => decodeTreq(tag, byteReader)
case Types.Rreq => decodeRreq(tag, byteReader)
case Types.Tdispatch => decodeTdispatch(tag, byteReader)
case Types.Rdispatch => decodeRdispatch(tag, byteReader)
case Types.Tdrain => Tdrain(tag)
case Types.Rdrain => Rdrain(tag)
case Types.Tping => Tping(tag)
case Types.Rping => Rping(tag)
case Types.Rerr | Types.BAD_Rerr => Rerr(tag, decodeUtf8(byteReader.readAll()))
case Types.Rdiscarded => Rdiscarded(tag)
case Types.Tdiscarded | Types.BAD_Tdiscarded => decodeTdiscarded(byteReader)
case Types.Tlease => decodeTlease(byteReader)
case unknown =>
throwBadMessageException(unknownMessageDescription(unknown, tag, byteReader))
}
}