public boolean isPadded() { return isFlagSet(FrameFlag.PADDED); }
private void consumeHeaderFrame(final RawFrame frame, final Http2Stream stream) throws HttpException, IOException { final int streamId = stream.getId(); if (!frame.isFlagSet(FrameFlag.END_HEADERS)) { continuation = new Continuation(streamId, frame.getType(), frame.isFlagSet(FrameFlag.END_STREAM)); if (frame.isFlagSet(FrameFlag.PRIORITY)) { throw new H2StreamResetException(H2Error.PROTOCOL_ERROR, "Stream refused"); if (frame.isFlagSet(FrameFlag.END_STREAM)) { stream.setRemoteEndStream();
private void consumePushPromiseFrame(final RawFrame frame, final ByteBuffer payload, final Http2Stream promisedStream) throws HttpException, IOException { final int promisedStreamId = promisedStream.getId(); if (!frame.isFlagSet(FrameFlag.END_HEADERS)) { continuation = new Continuation(promisedStreamId, frame.getType(), true); } if (continuation == null) { final List<Header> headers = hPackDecoder.decodeHeaders(payload); if (promisedStreamId > processedRemoteStreamId) { processedRemoteStreamId = promisedStreamId; } if (streamListener != null) { streamListener.onHeaderInput(this, promisedStreamId, headers); } if (connState == ConnectionHandshake.GRACEFUL_SHUTDOWN) { throw new H2StreamResetException(H2Error.REFUSED_STREAM, "Stream refused"); } promisedStream.consumePromise(headers); } else { continuation.copyPayload(payload); } }
throw new H2ConnectionException(H2Error.FRAME_SIZE_ERROR, "Invalid PING frame payload"); if (frame.isFlagSet(FrameFlag.ACK)) { final AsyncPingHandler pingHandler = pingHandlers.poll(); if (pingHandler != null) { throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Illegal stream id"); if (frame.isFlagSet(FrameFlag.ACK)) { if (localSettingState == SettingsHandshake.TRANSMITTED) { localSettingState = SettingsHandshake.ACKED;
final ByteBuffer payload = frame.getPayload(); continuation.copyPayload(payload); if (frame.isFlagSet(FrameFlag.END_HEADERS)) { final List<Header> headers = hPackDecoder.decodeHeaders(continuation.getContent()); if (stream.isRemoteInitiated() && streamId > processedRemoteStreamId) {
private void consumeDataFrame(final RawFrame frame, final Http2Stream stream) throws HttpException, IOException { final int streamId = stream.getId(); final ByteBuffer payload = frame.getPayloadContent(); if (payload != null) { final int frameLength = frame.getLength(); final int streamWinSize = updateInputWindow(streamId, stream.getInputWindow(), -frameLength); if (streamWinSize < lowMark && !stream.isRemoteClosed()) { stream.produceInputCapacityUpdate(); } final int connWinSize = updateInputWindow(0, connInputWindow, -frameLength); if (connWinSize < lowMark) { final int chunk = Integer.MAX_VALUE - connWinSize; if (chunk > 0) { final RawFrame windowUpdateFrame = frameFactory.createWindowUpdate(0, chunk); commitFrame(windowUpdateFrame); updateInputWindow(0, connInputWindow, chunk); } } } if (stream.isRemoteClosed()) { throw new H2StreamResetException(H2Error.STREAM_CLOSED, "Stream already closed"); } if (stream.isLocalReset()) { return; } if (frame.isFlagSet(FrameFlag.END_STREAM)) { stream.setRemoteEndStream(); } stream.consumeData(payload); }