Called when a connection is established.
(self, transport)
| 387 | self._websocket = None |
| 388 | |
| 389 | def connection_made(self, transport): |
| 390 | """Called when a connection is established.""" |
| 391 | self.transport = transport |
| 392 | self.worker.nr_conns += 1 |
| 393 | |
| 394 | # Check if HTTP/2 was negotiated via ALPN |
| 395 | ssl_object = transport.get_extra_info('ssl_object') |
| 396 | if ssl_object and hasattr(ssl_object, 'selected_alpn_protocol'): |
| 397 | alpn = ssl_object.selected_alpn_protocol() |
| 398 | if alpn == 'h2': |
| 399 | # HTTP/2 connection - uses StreamReader (complex framing) |
| 400 | self.reader = asyncio.StreamReader() |
| 401 | self._task = self.worker.loop.create_task( |
| 402 | self._handle_http2_connection(transport, ssl_object) |
| 403 | ) |
| 404 | return |
| 405 | |
| 406 | # HTTP/1.x connection - always use callback parser |
| 407 | self._is_ssl = ssl_object is not None |
| 408 | self.writer = transport |
| 409 | |
| 410 | # Setup flow control for HTTP/1.x |
| 411 | self._flow_control = FlowControl(transport) |
| 412 | transport.set_write_buffer_limits(high=HIGH_WATER_LIMIT) |
| 413 | |
| 414 | # Setup callback parser with request ready event |
| 415 | self._request_ready = asyncio.Event() |
| 416 | self._setup_callback_parser() |
| 417 | self._task = self.worker.loop.create_task(self._handle_connection()) |
| 418 | |
| 419 | @classmethod |
| 420 | def _check_h1c_protocol_available(cls): |