Exemplo n.º 1
0
  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;
  }