@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; }
@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; }
@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 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 public void data(IStream stream, Callback callback, DataFrame frame) { // We want to generate as late as possible to allow re-prioritization. frame(new DataEntry(frame, stream, callback), true); }
@Override public void data(IStream stream, Callback callback, DataFrame frame) { // We want to generate as late as possible to allow re-prioritization. frame(new DataEntry(frame, stream, callback), true); }