private void commitFrameInternal(final RawFrame frame) throws IOException { if (outputBuffer.isEmpty() && outputQueue.isEmpty()) { if (streamListener != null) { streamListener.onFrameOutput(this, frame.getStreamId(), frame); } outputBuffer.write(frame, ioSession.channel()); } else { outputQueue.addLast(frame); } ioSession.setEvent(SelectionKey.OP_WRITE); }
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))
final long streamId = frame.getStreamId(); final int flags = frame.getFlags(); final ByteBuffer payload = frame.getPayload();
public final void onInput() throws HttpException, IOException { if (connState == ConnectionHandshake.SHUTDOWN) { ioSession.clearEvent(SelectionKey.OP_READ); } else { RawFrame frame; while ((frame = inputBuffer.read(ioSession.channel())) != null) { if (streamListener != null) { streamListener.onFrameInput(this, frame.getStreamId(), frame); } consumeFrame(frame); } } }
if (frame != null) { if (streamListener != null) { streamListener.onFrameOutput(this, frame.getStreamId(), frame);
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) { throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "CONTINUATION frame expected");
private void consumeContinuationFrame(final RawFrame frame, final Http2Stream stream) throws HttpException, IOException { final int streamId = frame.getStreamId(); final ByteBuffer payload = frame.getPayload(); continuation.copyPayload(payload);