in frontend/server/src/main/java/com/amazonaws/ml/mms/util/codec/ModelResponseDecoder.java [32:99]
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
int size = in.readableBytes();
if (size < 9) {
return;
}
in.markReaderIndex();
boolean completed = false;
try {
ModelWorkerResponse resp = new ModelWorkerResponse();
// Get Response overall Code
resp.setCode(in.readInt());
int len = CodecUtils.readLength(in, maxBufferSize);
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
resp.setMessage(CodecUtils.readString(in, len));
List<Predictions> predictions = new ArrayList<>();
while ((len = CodecUtils.readLength(in, maxBufferSize)) != CodecUtils.END) {
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
Predictions prediction = new Predictions();
// Set response RequestId
prediction.setRequestId(CodecUtils.readString(in, len));
len = CodecUtils.readLength(in, maxBufferSize);
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
// Set content type
prediction.setContentType(CodecUtils.readString(in, len));
// Set per request response code
int httpStatusCode = in.readInt();
prediction.setStatusCode(httpStatusCode);
// Set the actual message
len = CodecUtils.readLength(in, maxBufferSize);
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
prediction.setReasonPhrase(CodecUtils.readString(in, len));
len = CodecUtils.readLength(in, maxBufferSize);
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
prediction.setHeaders(CodecUtils.readMap(in, len));
len = CodecUtils.readLength(in, maxBufferSize);
if (len == CodecUtils.BUFFER_UNDER_RUN) {
return;
}
prediction.setResp(CodecUtils.read(in, len));
predictions.add(prediction);
}
resp.setPredictions(predictions);
out.add(resp);
completed = true;
} finally {
if (!completed) {
in.resetReaderIndex();
}
}
}