use of com.webpieces.http2.api.dto.lowlevel.UnknownFrame in project webpieces by deanhiller.
the class Http2ParserImpl method parseBody.
private boolean parseBody(Http2MementoImpl state) {
DataWrapper allData = state.getLeftOverData();
FrameHeaderData headerData = state.getFrameHeaderData();
if (headerData == null)
throw new IllegalArgumentException("Bug, this should never be null at this point");
int payloadLen = headerData.getPayloadLength();
if (allData.getReadableSize() < payloadLen)
return false;
List<? extends DataWrapper> split = dataGen.split(allData, payloadLen);
DataWrapper framePayloadData = split.get(0);
AbstractHttp2Frame frame;
Optional<Http2FrameType> optFrameType = Http2FrameType.fromId(headerData.getFrameTypeId());
if (optFrameType.isPresent()) {
Http2FrameType frameType = optFrameType.get();
FrameMarshaller marshaller = dtoToMarshaller.get(frameType);
if (marshaller == null)
throw new IllegalArgumentException("bug, our developer forgot to add marshaller and only added the enum=" + frameType);
frame = marshaller.unmarshal(state, framePayloadData);
} else {
frame = new UnknownFrame(headerData.getFlagsByte(), headerData.getFrameTypeId(), headerData.getStreamId(), framePayloadData);
}
int headerSize = 9;
int size = framePayloadData.getReadableSize() + headerSize;
// reset header data
state.setFrameHeaderData(null);
// subtract out read message
state.setLeftOverData(split.get(1), -size);
state.addParsedFrame(frame);
return true;
}
use of com.webpieces.http2.api.dto.lowlevel.UnknownFrame in project webpieces by deanhiller.
the class HpackParserImpl method processFrameImpl.
private void processFrameImpl(UnmarshalStateImpl state, Http2Frame frame) {
List<HasHeaderFragment> headerFragList = state.getHeadersToCombine();
if (frame instanceof HasHeaderFragment) {
HasHeaderFragment headerFrame = (HasHeaderFragment) frame;
headerFragList.add(headerFrame);
validateHeader(state, headerFrame);
if (headerFrame.isEndHeaders())
combineAndSendHeadersToClient(state);
return;
} else if (headerFragList.size() > 0) {
throw new ConnectionException(CancelReasonCode.HEADERS_MIXED_WITH_FRAMES, state.getLogId(), frame.getStreamId(), "Parser in the middle of accepting headers(spec " + "doesn't allow frames between header fragments). frame=" + frame + " list=" + headerFragList);
}
if (frame instanceof UnknownFrame && ignoreUnkownFrames) {
// do nothing
} else if (frame instanceof Http2Msg) {
state.addParsedMessage((Http2Msg) frame);
} else {
throw new IllegalStateException("bug forgot support for frame=" + frame);
}
}
Aggregations