in http2/src/main/java/org/apache/mina/http2/impl/Http2Connection.java [60:117]
public Http2Frame decode(ByteBuffer input) {
Http2Frame frame = null;
switch (decoderState) {
case HEADER:
if (headerDecoder.consume(input)) {
Http2FrameHeader header = headerDecoder.getValue();
headerDecoder.reset();
decoderState = DecoderState.FRAME;
switch (header.getType()) {
case FRAME_TYPE_DATA:
frameDecoder = new Http2DataFrameDecoder(header);
break;
case FRAME_TYPE_HEADERS:
frameDecoder = new Http2HeadersFrameDecoder(header);
break;
case FRAME_TYPE_PRIORITY:
frameDecoder = new Http2PriorityFrameDecoder(header);
break;
case FRAME_TYPE_RST_STREAM:
frameDecoder = new Http2RstStreamFrameDecoder(header);
break;
case FRAME_TYPE_SETTINGS:
frameDecoder =new Http2SettingsFrameDecoder(header);
break;
case FRAME_TYPE_PUSH_PROMISE:
frameDecoder = new Http2PushPromiseFrameDecoder(header);
break;
case FRAME_TYPE_PING:
frameDecoder = new Http2PingFrameDecoder(header);
break;
case FRAME_TYPE_GOAWAY:
frameDecoder = new Http2GoAwayFrameDecoder(header);
break;
case FRAME_TYPE_WINDOW_UPDATE:
frameDecoder = new Http2WindowUpdateFrameDecoder(header);
break;
case FRAME_TYPE_CONTINUATION:
frameDecoder = new Http2ContinuationFrameDecoder(header);
break;
default:
frameDecoder = new Http2UnknownFrameDecoder(header);
break;
}
if (frameDecoder.consume(input)) {
frame = frameDecoder.getValue();
decoderState = DecoderState.HEADER;
}
}
break;
case FRAME:
if (frameDecoder.consume(input)) {
frame = frameDecoder.getValue();
decoderState = DecoderState.HEADER;
}
break;
}
return frame;
}