in tchannel-core/src/main/java/com/uber/tchannel/codecs/MessageCodec.java [152:192]
public static Response decodeCallResponse(List<CallFrame> frames) {
if (frames.isEmpty()) {
return null;
}
CallResponseFrame first = (CallResponseFrame) frames.get(0);
ArgScheme scheme = ArgScheme.toScheme(
first.getHeaders().get(TransportHeaders.ARG_SCHEME_KEY));
if (!ArgScheme.isSupported(scheme)) {
return null;
}
List<ByteBuf> args = new ArrayList<>();
for (CallFrame frame : frames) {
CodecUtils.readArgs(args, frame.getPayload());
frame.release();
}
if (args.size() != 3) {
for (ByteBuf arg : args) {
arg.release();
}
throw new UnsupportedOperationException("The arg count is not should be 3 instead of " + args.size());
}
args.get(0).release();
Response response = Response.build(
scheme,
first.getId(),
first.getResponseCode(),
first.getHeaders(),
args.get(1),
args.get(2)
);
if (response != null) {
response.touch("finished MessageCodec.decodeCallResponse(...)");
}
return response;
}