@@ -604,8 +604,8 @@ public void onUnknownFrame(
604
604
// Ignore unknown frames on connection stream, for example: HTTP/2 GREASE testing
605
605
return ;
606
606
}
607
- onHttp2Frame ( ctx , newHttp2UnknownFrame ( frameType , streamId , flags , payload . retain ())
608
- . stream ( requireStream ( streamId ) ));
607
+ Http2FrameStream stream = requireStream ( streamId );
608
+ onHttp2Frame ( ctx , newHttp2UnknownFrame ( frameType , streamId , flags , payload . retain ()). stream ( stream ));
609
609
}
610
610
611
611
@ Override
@@ -625,7 +625,8 @@ public void onPingAckRead(ChannelHandlerContext ctx, long data) {
625
625
626
626
@ Override
627
627
public void onRstStreamRead (ChannelHandlerContext ctx , int streamId , long errorCode ) {
628
- onHttp2Frame (ctx , new DefaultHttp2ResetFrame (errorCode ).stream (requireStream (streamId )));
628
+ Http2FrameStream stream = requireStream (streamId );
629
+ onHttp2Frame (ctx , new DefaultHttp2ResetFrame (errorCode ).stream (stream ));
629
630
}
630
631
631
632
@ Override
@@ -634,7 +635,8 @@ public void onWindowUpdateRead(ChannelHandlerContext ctx, int streamId, int wind
634
635
// Ignore connection window updates.
635
636
return ;
636
637
}
637
- onHttp2Frame (ctx , new DefaultHttp2WindowUpdateFrame (windowSizeIncrement ).stream (requireStream (streamId )));
638
+ Http2FrameStream stream = requireStream (streamId );
639
+ onHttp2Frame (ctx , new DefaultHttp2WindowUpdateFrame (windowSizeIncrement ).stream (stream ));
638
640
}
639
641
640
642
@ Override
@@ -647,22 +649,31 @@ public void onHeadersRead(ChannelHandlerContext ctx, int streamId,
647
649
@ Override
648
650
public void onHeadersRead (ChannelHandlerContext ctx , int streamId , Http2Headers headers ,
649
651
int padding , boolean endOfStream ) {
650
- onHttp2Frame ( ctx , new DefaultHttp2HeadersFrame ( headers , endOfStream , padding )
651
- .stream (requireStream ( streamId ) ));
652
+ Http2FrameStream stream = requireStream ( streamId );
653
+ onHttp2Frame ( ctx , new DefaultHttp2HeadersFrame ( headers , endOfStream , padding ) .stream (stream ));
652
654
}
653
655
654
656
@ Override
655
657
public int onDataRead (ChannelHandlerContext ctx , int streamId , ByteBuf data , int padding ,
656
658
boolean endOfStream ) {
657
- onHttp2Frame (ctx , new DefaultHttp2DataFrame (data , endOfStream , padding )
658
- .stream (requireStream (streamId )).retain ());
659
+ Http2FrameStream stream = requireStream (streamId );
660
+ final Http2DataFrame dataframe ;
661
+ try {
662
+ dataframe = new DefaultHttp2DataFrame (data .retain (), endOfStream , padding );
663
+ } catch (IllegalArgumentException e ) {
664
+ // Might be thrown in case of invalid padding / length.
665
+ data .release ();
666
+ throw e ;
667
+ }
668
+ dataframe .stream (stream );
669
+ onHttp2Frame (ctx , dataframe );
659
670
// We return the bytes in consumeBytes() once the stream channel consumed the bytes.
660
671
return 0 ;
661
672
}
662
673
663
674
@ Override
664
675
public void onGoAwayRead (ChannelHandlerContext ctx , int lastStreamId , long errorCode , ByteBuf debugData ) {
665
- onHttp2Frame (ctx , new DefaultHttp2GoAwayFrame (lastStreamId , errorCode , debugData ) .retain ());
676
+ onHttp2Frame (ctx , new DefaultHttp2GoAwayFrame (lastStreamId , errorCode , debugData .retain () ));
666
677
}
667
678
668
679
@ Override
@@ -674,8 +685,9 @@ public void onPriorityRead(ChannelHandlerContext ctx, int streamId, int streamDe
674
685
// The stream was not opened yet, let's just ignore this for now.
675
686
return ;
676
687
}
688
+ Http2FrameStream frameStream = requireStream (streamId );
677
689
onHttp2Frame (ctx , new DefaultHttp2PriorityFrame (streamDependency , weight , exclusive )
678
- .stream (requireStream ( streamId ) ));
690
+ .stream (frameStream ));
679
691
}
680
692
681
693
@ Override
@@ -686,10 +698,11 @@ public void onSettingsAckRead(ChannelHandlerContext ctx) {
686
698
@ Override
687
699
public void onPushPromiseRead (ChannelHandlerContext ctx , int streamId , int promisedStreamId ,
688
700
Http2Headers headers , int padding ) {
701
+ Http2FrameStream stream = requireStream (streamId );
689
702
onHttp2Frame (ctx , new DefaultHttp2PushPromiseFrame (headers , padding , promisedStreamId )
690
703
.pushStream (new DefaultHttp2FrameStream ()
691
704
.setStreamAndProperty (streamKey , connection ().stream (promisedStreamId )))
692
- .stream (requireStream ( streamId ) ));
705
+ .stream (stream ));
693
706
}
694
707
695
708
private Http2FrameStream requireStream (int streamId ) {
0 commit comments