@@ -723,6 +723,8 @@ void readLoop() {
723723 }
724724 //System.err.printf("TestServer: received frame %s\n", frame);
725725 int stream = frame .streamid ();
726+ int next = nextstream ;
727+ int nextPush = nextPushStreamId ;
726728 if (stream == 0 ) {
727729 if (frame .type () == WindowUpdateFrame .TYPE ) {
728730 WindowUpdateFrame wup = (WindowUpdateFrame ) frame ;
@@ -770,6 +772,16 @@ void readLoop() {
770772 // but the continuation, even after a reset
771773 // should be handle gracefully by the client
772774 // anyway.
775+ } else if (isClientStreamId (stream ) && stream < next ) {
776+ // We may receive a reset on a client stream that has already
777+ // been closed. Just ignore it.
778+ System .err .println ("TestServer: received ResetFrame on closed stream: " + stream );
779+ System .err .println (frame );
780+ } else if (isServerStreamId (stream ) && stream < nextPush ) {
781+ // We may receive a reset on a push stream that has already
782+ // been closed. Just ignore it.
783+ System .err .println ("TestServer: received ResetFrame on closed push stream: " + stream );
784+ System .err .println (frame );
773785 } else {
774786 System .err .println ("TestServer: Unexpected frame on: " + stream );
775787 System .err .println (frame );
@@ -790,6 +802,14 @@ void readLoop() {
790802 }
791803 }
792804
805+ static boolean isClientStreamId (int streamid ) {
806+ return (streamid & 0x01 ) == 0x01 ;
807+ }
808+
809+ static boolean isServerStreamId (int streamid ) {
810+ return (streamid & 0x01 ) == 0x00 ;
811+ }
812+
793813 /** Encodes an group of headers, without any ordering guarantees. */
794814 List <ByteBuffer > encodeHeaders (HttpHeaders headers ) {
795815 List <ByteBuffer > buffers = new LinkedList <>();
0 commit comments