@Override protected boolean generate(ByteBufferPool.Lease lease) { frameBytes = generator.control(lease, frame); beforeSend(); return true; }
public HTTP2Flusher(HTTP2Session session) { this.session = session; this.lease = new ByteBufferPool.Lease(session.getGenerator().getByteBufferPool()); }
generator.setHeaderTableSize(value); break; generator.setMaxFrameSize(value); break; generator.setMaxHeaderListSize(value); break;
@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 Connection newConnection(EndPoint endPoint, Map<String, Object> context) { HTTP2Client client = (HTTP2Client)context.get(CLIENT_CONTEXT_KEY); ByteBufferPool byteBufferPool = (ByteBufferPool)context.get(BYTE_BUFFER_POOL_CONTEXT_KEY); Executor executor = (Executor)context.get(EXECUTOR_CONTEXT_KEY); Scheduler scheduler = (Scheduler)context.get(SCHEDULER_CONTEXT_KEY); Session.Listener listener = (Session.Listener)context.get(SESSION_LISTENER_CONTEXT_KEY); @SuppressWarnings("unchecked") Promise<Session> promise = (Promise<Session>)context.get(SESSION_PROMISE_CONTEXT_KEY); Generator generator = new Generator(byteBufferPool); FlowControlStrategy flowControl = client.getFlowControlStrategyFactory().newFlowControlStrategy(); HTTP2ClientSession session = new HTTP2ClientSession(scheduler, endPoint, generator, listener, flowControl); session.setMaxRemoteStreams(client.getMaxConcurrentPushedStreams()); Parser parser = new Parser(byteBufferPool, session, 4096, 8192); parser.setMaxFrameLength(client.getMaxFrameLength()); parser.setMaxSettingsKeys(client.getMaxSettingsKeys()); HTTP2ClientConnection connection = new HTTP2ClientConnection(client, byteBufferPool, executor, endPoint, parser, session, client.getInputBufferSize(), promise, listener); connection.addListener(connectionListener); return customize(connection, context); }
generator.setHeaderTableSize(value); break; generator.setMaxFrameSize(value); break; generator.setMaxHeaderListSize(value); break;
@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 Connection newConnection(Connector connector, EndPoint endPoint) { ServerSessionListener listener = newSessionListener(connector, endPoint); Generator generator = new Generator(connector.getByteBufferPool(), getMaxDynamicTableSize(), getMaxHeaderBlockFragment()); FlowControlStrategy flowControl = getFlowControlStrategyFactory().newFlowControlStrategy(); HTTP2ServerSession session = new HTTP2ServerSession(connector.getScheduler(), endPoint, generator, listener, flowControl); session.setMaxLocalStreams(getMaxConcurrentStreams()); session.setMaxRemoteStreams(getMaxConcurrentStreams()); // For a single stream in a connection, there will be a race between // the stream idle timeout and the connection idle timeout. However, // the typical case is that the connection will be busier and the // stream idle timeout will expire earlier than the connection's. long streamIdleTimeout = getStreamIdleTimeout(); if (streamIdleTimeout <= 0) streamIdleTimeout = endPoint.getIdleTimeout(); session.setStreamIdleTimeout(streamIdleTimeout); session.setInitialSessionRecvWindow(getInitialSessionRecvWindow()); session.setWriteThreshold(getHttpConfiguration().getOutputBufferSize()); ServerParser parser = newServerParser(connector, session); parser.setMaxFrameLength(getMaxFrameLength()); parser.setMaxSettingsKeys(getMaxSettingsKeys()); HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(), endPoint, httpConfiguration, parser, session, getInputBufferSize(), listener); connection.addListener(sessionContainer); return configure(connection, connector, endPoint); }
public HTTP2Flusher(HTTP2Session session) { this.session = session; this.lease = new ByteBufferPool.Lease(session.getGenerator().getByteBufferPool()); }
@Override protected boolean generate(ByteBufferPool.Lease lease) { frameBytes = generator.control(lease, frame); beforeSend(); return true; }