@@ -439,10 +439,6 @@ public final void onInput(final ByteBuffer src) throws HttpException, IOExceptio
439439 for (;;) {
440440 final RawFrame frame = inputBuffer .read (src , ioSession );
441441 if (frame != null ) {
442- if (connState .compareTo (ConnectionHandshake .SHUTDOWN ) < 0 ) {
443- checkStreamTimeouts (System .nanoTime ());
444- }
445-
446442 if (streamListener != null ) {
447443 streamListener .onFrameInput (this , frame .getStreamId (), frame );
448444 }
@@ -655,7 +651,6 @@ private void executeRequest(final RequestExecutionCommand requestExecutionComman
655651 requestExecutionCommand .getExchangeHandler (),
656652 requestExecutionCommand .getPushHandlerFactory (),
657653 requestExecutionCommand .getContext ()));
658- initializeStreamTimeouts (stream );
659654
660655 if (streamListener != null ) {
661656 final int initInputWindow = stream .getInputWindow ().get ();
@@ -1377,9 +1372,12 @@ H2StreamChannel createChannel(final int streamId) {
13771372 }
13781373
13791374 private void initializeStreamTimeouts (final H2Stream stream ) {
1380- final Timeout socketTimeout = ioSession .getSocketTimeout ();
1381- if (socketTimeout != null && socketTimeout .isEnabled ()) {
1382- stream .setIdleTimeout (socketTimeout );
1375+ final Timeout streamIdleTimeout = stream .getIdleTimeout ();
1376+ if (streamIdleTimeout == null || !streamIdleTimeout .isEnabled ()) {
1377+ final Timeout socketTimeout = ioSession .getSocketTimeout ();
1378+ if (socketTimeout != null && socketTimeout .isEnabled ()) {
1379+ stream .setIdleTimeout (socketTimeout );
1380+ }
13831381 }
13841382 }
13851383
@@ -1614,43 +1612,21 @@ private void checkStreamTimeouts(final long nowNanos) throws IOException {
16141612 }
16151613
16161614 final Timeout idleTimeout = stream .getIdleTimeout ();
1617- final Timeout lifetimeTimeout = stream .getLifetimeTimeout ();
1618- if ((idleTimeout == null || !idleTimeout .isEnabled ())
1619- && (lifetimeTimeout == null || !lifetimeTimeout .isEnabled ())) {
1615+ if (idleTimeout == null || !idleTimeout .isEnabled ()) {
16201616 continue ;
16211617 }
16221618
1623- final long created = stream .getCreatedNanos ();
16241619 final long last = stream .getLastActivityNanos ();
1625-
1626- if (idleTimeout != null && idleTimeout .isEnabled ()) {
1627- final long idleNanos = idleTimeout .toNanoseconds ();
1628- if (idleNanos > 0 && nowNanos - last > idleNanos ) {
1629- final int streamId = stream .getId ();
1630- final H2StreamTimeoutException ex = new H2StreamTimeoutException (
1631- "HTTP/2 stream idle timeout (" + idleTimeout + ")" ,
1632- streamId ,
1633- idleTimeout ,
1634- true );
1635- stream .localReset (ex , H2Error .CANCEL );
1636- // Once reset due to idle timeout, we do not care about lifetime anymore
1637- continue ;
1638- }
1639- }
1640-
1641- if (lifetimeTimeout != null && lifetimeTimeout .isEnabled ()) {
1642- final long lifeNanos = lifetimeTimeout .toNanoseconds ();
1643- if (lifeNanos > 0 && nowNanos - created > lifeNanos ) {
1644- final int streamId = stream .getId ();
1645- final H2StreamTimeoutException ex = new H2StreamTimeoutException (
1646- "HTTP/2 stream lifetime timeout (" + lifetimeTimeout + ")" ,
1647- streamId ,
1648- lifetimeTimeout ,
1649- false );
1650- stream .localReset (ex , H2Error .CANCEL );
1651- }
1620+ final long idleNanos = idleTimeout .toNanoseconds ();
1621+ if (idleNanos > 0 && nowNanos - last > idleNanos ) {
1622+ final int streamId = stream .getId ();
1623+ final H2StreamTimeoutException ex = new H2StreamTimeoutException (
1624+ "HTTP/2 stream idle timeout (" + idleTimeout + ")" ,
1625+ streamId ,
1626+ idleTimeout ,
1627+ true );
1628+ stream .localReset (ex , H2Error .CANCEL );
16521629 }
16531630 }
16541631 }
1655-
16561632}
0 commit comments