]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Honour 'local_flow_control_window' (#98)
authorTom Christie <tom@tomchristie.com>
Fri, 21 Jun 2019 12:49:25 +0000 (13:49 +0100)
committerGitHub <noreply@github.com>
Fri, 21 Jun 2019 12:49:25 +0000 (13:49 +0100)
http3/dispatch/http2.py

index f7814ec3c1193908f2e89765799c80017be91abb..c6b28121149b0c26d0fa65334752e83ac0a461d4 100644 (file)
@@ -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)