private void processPayloadState( ChannelHandlerContext ctx, ByteBuf in, Http2FrameObserver observer) throws Http2Exception { if (in.readableBytes() < payloadLength) { // Wait until the entire payload has been read. return; } // Get a view of the buffer for the size of the payload. ByteBuf payload = in.readSlice(payloadLength); // Read the payload and fire the frame event to the observer. switch (frameType) { case DATA: readDataFrame(ctx, payload, observer); break; case HEADERS: readHeadersFrame(ctx, payload, observer); break; case PRIORITY: readPriorityFrame(ctx, payload, observer); break; case RST_STREAM: readRstStreamFrame(ctx, payload, observer); break; case SETTINGS: readSettingsFrame(ctx, payload, observer); break; case PUSH_PROMISE: readPushPromiseFrame(ctx, payload, observer); break; case PING: readPingFrame(ctx, payload, observer); break; case GO_AWAY: readGoAwayFrame(ctx, payload, observer); break; case WINDOW_UPDATE: readWindowUpdateFrame(ctx, payload, observer); break; case CONTINUATION: readContinuationFrame(payload, observer); break; case ALT_SVC: readAltSvcFrame(ctx, payload, observer); break; case BLOCKED: observer.onBlockedRead(ctx, streamId); break; default: // Should never happen. throw protocolError("Unsupported frame type: %s", frameType); } // Go back to reading the next frame header. state = State.FRAME_HEADER; }