@Override protected void emptyBody(ByteBuffer buffer) { if (isPadding()) connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_data_frame"); else onData(BufferUtil.EMPTY_BUFFER, false, 0); }
private void onData(ByteBuffer buffer, boolean fragment, int padding) { DataFrame frame = new DataFrame(getStreamId(), buffer, !fragment && isEndStream(), padding); notifyData(frame); }
if (getStreamId() == 0) return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_data_frame"); length = getBodyLength(); state = isPadding() ? State.PADDING_LENGTH : State.DATA; break; loop = length == 0; if (length < 0) return connectionFailure(buffer, ErrorCode.FRAME_SIZE_ERROR.code, "invalid_data_frame_padding"); break; onData(slice, false, padding + paddingLength); onData(slice, true, 0); if (paddingLength == 0) reset(); return true;
public void init(UnaryOperator<Listener> wrapper) { Listener listener = wrapper.apply(this.listener); unknownBodyParser = new UnknownBodyParser(headerParser, listener); HeaderBlockParser headerBlockParser = new HeaderBlockParser(headerParser, byteBufferPool, hpackDecoder, unknownBodyParser); HeaderBlockFragments headerBlockFragments = new HeaderBlockFragments(); bodyParsers[FrameType.DATA.getType()] = new DataBodyParser(headerParser, listener); bodyParsers[FrameType.HEADERS.getType()] = new HeadersBodyParser(headerParser, listener, headerBlockParser, headerBlockFragments); bodyParsers[FrameType.PRIORITY.getType()] = new PriorityBodyParser(headerParser, listener); bodyParsers[FrameType.RST_STREAM.getType()] = new ResetBodyParser(headerParser, listener); bodyParsers[FrameType.SETTINGS.getType()] = new SettingsBodyParser(headerParser, listener, getMaxSettingsKeys()); bodyParsers[FrameType.PUSH_PROMISE.getType()] = new PushPromiseBodyParser(headerParser, listener, headerBlockParser); bodyParsers[FrameType.PING.getType()] = new PingBodyParser(headerParser, listener); bodyParsers[FrameType.GO_AWAY.getType()] = new GoAwayBodyParser(headerParser, listener); bodyParsers[FrameType.WINDOW_UPDATE.getType()] = new WindowUpdateBodyParser(headerParser, listener); bodyParsers[FrameType.CONTINUATION.getType()] = new ContinuationBodyParser(headerParser, listener, headerBlockParser, headerBlockFragments); }
if (getStreamId() == 0) return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_data_frame"); length = getBodyLength(); state = isPadding() ? State.PADDING_LENGTH : State.DATA; break; loop = length == 0; if (length < 0) return connectionFailure(buffer, ErrorCode.FRAME_SIZE_ERROR.code, "invalid_data_frame_padding"); break; onData(slice, false, padding + paddingLength); onData(slice, true, 0); if (paddingLength == 0) reset(); return true;
public void init(UnaryOperator<Listener> wrapper) { Listener listener = wrapper.apply(this.listener); unknownBodyParser = new UnknownBodyParser(headerParser, listener); HeaderBlockParser headerBlockParser = new HeaderBlockParser(headerParser, byteBufferPool, hpackDecoder, unknownBodyParser); HeaderBlockFragments headerBlockFragments = new HeaderBlockFragments(); bodyParsers[FrameType.DATA.getType()] = new DataBodyParser(headerParser, listener); bodyParsers[FrameType.HEADERS.getType()] = new HeadersBodyParser(headerParser, listener, headerBlockParser, headerBlockFragments); bodyParsers[FrameType.PRIORITY.getType()] = new PriorityBodyParser(headerParser, listener); bodyParsers[FrameType.RST_STREAM.getType()] = new ResetBodyParser(headerParser, listener); bodyParsers[FrameType.SETTINGS.getType()] = new SettingsBodyParser(headerParser, listener, getMaxSettingsKeys()); bodyParsers[FrameType.PUSH_PROMISE.getType()] = new PushPromiseBodyParser(headerParser, listener, headerBlockParser); bodyParsers[FrameType.PING.getType()] = new PingBodyParser(headerParser, listener); bodyParsers[FrameType.GO_AWAY.getType()] = new GoAwayBodyParser(headerParser, listener); bodyParsers[FrameType.WINDOW_UPDATE.getType()] = new WindowUpdateBodyParser(headerParser, listener); bodyParsers[FrameType.CONTINUATION.getType()] = new ContinuationBodyParser(headerParser, listener, headerBlockParser, headerBlockFragments); }
@Override protected void emptyBody(ByteBuffer buffer) { if (isPadding()) connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_data_frame"); else onData(BufferUtil.EMPTY_BUFFER, false, 0); }
private void onData(ByteBuffer buffer, boolean fragment, int padding) { DataFrame frame = new DataFrame(getStreamId(), buffer, !fragment && isEndStream(), padding); notifyData(frame); }