private void complete() { notIdle(); stream.notIdle(); flowControl.onDataConsumed(HTTP2Session.this, stream, flowControlLength); } }
protected IStream createLocalStream(int streamId) { while (true) { int localCount = localStreamCount.get(); int maxCount = getMaxLocalStreams(); if (maxCount >= 0 && localCount >= maxCount) // TODO: remove the dump() in the exception message. throw new IllegalStateException("Max local stream count " + maxCount + " exceeded" + System.lineSeparator() + dump()); if (localStreamCount.compareAndSet(localCount, localCount + 1)) break; } IStream stream = newStream(streamId, true); if (streams.putIfAbsent(streamId, stream) == null) { stream.setIdleTimeout(getStreamIdleTimeout()); flowControl.onStreamCreated(stream); if (LOG.isDebugEnabled()) LOG.debug("Created local {}", stream); return stream; } else { localStreamCount.decrementAndGet(); throw new IllegalStateException("Duplicate stream " + streamId); } }
@Override public void removeStream(IStream stream) { IStream removed = streams.remove(stream.getId()); if (removed != null) { onStreamClosed(stream); flowControl.onStreamDestroyed(stream); if (LOG.isDebugEnabled()) LOG.debug("Removed {} {}", stream.isLocal() ? "local" : "remote", stream); } }
flowControl.onDataReceived(this, stream, flowControlLength); flowControl.onDataConsumed(this, null, flowControlLength); boolean local = (streamId & 1) == (localStreamIds.get() & 1); boolean closed = local ? isLocalStreamClosed(streamId) : isRemoteStreamClosed(streamId);
Integer initialWindow = settingsFrame.getSettings().get(SettingsFrame.INITIAL_WINDOW_SIZE); if (initialWindow != null) flowControl.updateInitialStreamWindow(HTTP2Session.this, initialWindow, true); break;
public void perform() { FlowControlStrategy flowControl = session.getFlowControlStrategy(); flowControl.onWindowUpdate(session, stream, frame); } }
@Override public void succeeded() { bytesWritten.addAndGet(frameBytes); frameBytes = 0; frameRemaining = 0; flowControl.onDataSent(stream, dataBytes); dataBytes = 0; // Do we have more to send ? DataFrame dataFrame = (DataFrame)frame; if (getDataBytesRemaining() == 0) { // Only now we can update the close state // and eventually remove the stream. if (stream.updateClose(dataFrame.isEndStream(), CloseState.Event.AFTER_SEND)) removeStream(stream); super.succeeded(); } } }
@Override protected boolean generate(ByteBufferPool.Lease lease) { int dataRemaining = getDataBytesRemaining(); int sessionSendWindow = getSendWindow(); int streamSendWindow = stream.updateSendWindow(0); int window = Math.min(streamSendWindow, sessionSendWindow); if (window <= 0 && dataRemaining > 0) return false; int length = Math.min(dataRemaining, window); // Only one DATA frame is generated. DataFrame dataFrame = (DataFrame)frame; int frameBytes = generator.data(lease, dataFrame, length); this.frameBytes += frameBytes; this.frameRemaining += frameBytes; int dataBytes = frameBytes - Frame.HEADER_LENGTH; this.dataBytes += dataBytes; this.dataRemaining -= dataBytes; if (LOG.isDebugEnabled()) LOG.debug("Generated {}, length/window/data={}/{}/{}", dataFrame, dataBytes, window, dataRemaining); flowControl.onDataSending(stream, dataBytes); stream.updateClose(dataFrame.isEndStream(), CloseState.Event.BEFORE_SEND); return true; }
flowControl.windowUpdate(HTTP2Session.this, stream, (WindowUpdateFrame)frame); break;
flowControl.onDataReceived(this, stream, flowControlLength); flowControl.onDataConsumed(this, null, flowControlLength); boolean local = (streamId & 1) == (localStreamIds.get() & 1); boolean closed = local ? isLocalStreamClosed(streamId) : isRemoteStreamClosed(streamId);
Integer initialWindow = settingsFrame.getSettings().get(SettingsFrame.INITIAL_WINDOW_SIZE); if (initialWindow != null) flowControl.updateInitialStreamWindow(HTTP2Session.this, initialWindow, true); break;
public void perform() { FlowControlStrategy flowControl = session.getFlowControlStrategy(); flowControl.onWindowUpdate(session, stream, frame); } }
@Override public void succeeded() { bytesWritten.addAndGet(frameBytes); frameBytes = 0; frameRemaining = 0; flowControl.onDataSent(stream, dataBytes); dataBytes = 0; // Do we have more to send ? DataFrame dataFrame = (DataFrame)frame; if (getDataBytesRemaining() == 0) { // Only now we can update the close state // and eventually remove the stream. if (stream.updateClose(dataFrame.isEndStream(), CloseState.Event.AFTER_SEND)) removeStream(stream); super.succeeded(); } } }
@Override protected boolean generate(ByteBufferPool.Lease lease) { int dataRemaining = getDataBytesRemaining(); int sessionSendWindow = getSendWindow(); int streamSendWindow = stream.updateSendWindow(0); int window = Math.min(streamSendWindow, sessionSendWindow); if (window <= 0 && dataRemaining > 0) return false; int length = Math.min(dataRemaining, window); // Only one DATA frame is generated. DataFrame dataFrame = (DataFrame)frame; int frameBytes = generator.data(lease, dataFrame, length); this.frameBytes += frameBytes; this.frameRemaining += frameBytes; int dataBytes = frameBytes - Frame.HEADER_LENGTH; this.dataBytes += dataBytes; this.dataRemaining -= dataBytes; if (LOG.isDebugEnabled()) LOG.debug("Generated {}, length/window/data={}/{}/{}", dataFrame, dataBytes, window, dataRemaining); flowControl.onDataSending(stream, dataBytes); stream.updateClose(dataFrame.isEndStream(), CloseState.Event.BEFORE_SEND); return true; }
flowControl.windowUpdate(HTTP2Session.this, stream, (WindowUpdateFrame)frame); break;
protected IStream createLocalStream(int streamId) { while (true) { int localCount = localStreamCount.get(); int maxCount = getMaxLocalStreams(); if (maxCount >= 0 && localCount >= maxCount) throw new IllegalStateException("Max local stream count " + maxCount + " exceeded"); if (localStreamCount.compareAndSet(localCount, localCount + 1)) break; } IStream stream = newStream(streamId, true); if (streams.putIfAbsent(streamId, stream) == null) { stream.setIdleTimeout(getStreamIdleTimeout()); flowControl.onStreamCreated(stream); if (LOG.isDebugEnabled()) LOG.debug("Created local {}", stream); return stream; } else { throw new IllegalStateException("Duplicate stream " + streamId); } }
flowControl.updateInitialStreamWindow(this, value, false); break;
@Override public void removeStream(IStream stream) { IStream removed = streams.remove(stream.getId()); if (removed != null) { onStreamClosed(stream); flowControl.onStreamDestroyed(stream); if (LOG.isDebugEnabled()) LOG.debug("Removed {} {}", stream.isLocal() ? "local" : "remote", stream); } }
private void complete() { notIdle(); stream.notIdle(); flowControl.onDataConsumed(HTTP2Session.this, stream, flowControlLength); } }
flowControl.onStreamCreated(stream); if (LOG.isDebugEnabled()) LOG.debug("Created remote {}", stream);