From: Tom Christie Date: Fri, 21 Jun 2019 12:49:25 +0000 (+0100) Subject: Honour 'local_flow_control_window' (#98) X-Git-Tag: 0.6.0~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=444c6b8870d5d4df99bd64f41b4d10585750bb05;p=thirdparty%2Fhttpx.git Honour 'local_flow_control_window' (#98) --- diff --git a/http3/dispatch/http2.py b/http3/dispatch/http2.py index f7814ec3..c6b28121 100644 --- a/http3/dispatch/http2.py +++ b/http3/dispatch/http2.py @@ -95,9 +95,13 @@ class HTTP2Connection: async def send_data( self, stream_id: int, data: bytes, timeout: TimeoutConfig = None ) -> None: - self.h2_state.send_data(stream_id, data) - data_to_send = self.h2_state.data_to_send() - await self.writer.write(data_to_send, timeout) + flow_control = self.h2_state.local_flow_control_window(stream_id) + chunk_size = min(len(data), flow_control) + for idx in range(0, len(data), chunk_size): + chunk = data[idx:idx+chunk_size] + self.h2_state.send_data(stream_id, chunk) + data_to_send = self.h2_state.data_to_send() + await self.writer.write(data_to_send, timeout) async def end_stream(self, stream_id: int, timeout: TimeoutConfig = None) -> None: self.h2_state.end_stream(stream_id)