public void write(final RawFrame frame, final WritableByteChannel channel) throws IOException { Args.notNull(frame, "Frame"); final ByteBuffer payload = frame.getPayload(); if (payload != null && payload.remaining() > maxFramePayloadSize) { throw new H2ConnectionException(H2Error.FRAME_SIZE_ERROR, "Frame size exceeds maximum"); } buffer.putInt((payload != null ? payload.remaining() << 8 : 0) | (frame.getType() & 0xff)); buffer.put((byte) (frame.getFlags() & 0xff)); buffer.putInt(frame.getStreamId()); if (payload != null) { if (channel instanceof GatheringByteChannel) { buffer.flip(); ((GatheringByteChannel) channel).write(new ByteBuffer[]{buffer, payload}); buffer.compact(); if (payload.hasRemaining()) { buffer.put(payload); } } else { buffer.put(payload); } } flush(channel); metrics.incrementFramesTransferred(); }
public void printFrameInfo(final RawFrame frame, final Appendable appendable) throws IOException { appendable.append("stream ").append(Integer.toString(frame.getStreamId())).append(" frame: "); final FrameType type = FrameType.valueOf(frame.getType()); appendable.append(Objects.toString(type)) .append(" (0x").append(Integer.toHexString(frame.getType())).append("); flags: "); final int flags = frame.getFlags(); if (flags > 0) {
public void printPayload(final RawFrame frame, final Appendable appendable) throws IOException { final FrameType type = FrameType.valueOf(frame.getType()); final ByteBuffer buf = frame.getPayloadContent(); if (buf != null) {
return; final int type = frame.getType(); final long streamId = frame.getStreamId(); final int flags = frame.getFlags();
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); } }
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));
private void consumeFrame(final RawFrame frame) throws HttpException, IOException { final FrameType frameType = FrameType.valueOf(frame.getType()); final int streamId = frame.getStreamId(); if (continuation != null && frameType != FrameType.CONTINUATION) {