(sock: socket.socket, deadline: Deadline)
| 478 | |
| 479 | |
| 480 | def read_connect_response(sock: socket.socket, deadline: Deadline) -> Response: |
| 481 | reader = StreamReader() |
| 482 | parser = Response.parse( |
| 483 | reader.read_line, |
| 484 | reader.read_exact, |
| 485 | reader.read_to_eof, |
| 486 | proxy=True, |
| 487 | ) |
| 488 | try: |
| 489 | while True: |
| 490 | sock.settimeout(deadline.timeout()) |
| 491 | data = sock.recv(4096) |
| 492 | if data: |
| 493 | reader.feed_data(data) |
| 494 | else: |
| 495 | reader.feed_eof() |
| 496 | next(parser) |
| 497 | except StopIteration as exc: |
| 498 | assert isinstance(exc.value, Response) # help mypy |
| 499 | response = exc.value |
| 500 | if 200 <= response.status_code < 300: |
| 501 | return response |
| 502 | else: |
| 503 | raise InvalidProxyStatus(response) |
| 504 | except socket.timeout: |
| 505 | raise TimeoutError("timed out while connecting to HTTP proxy") |
| 506 | except Exception as exc: |
| 507 | raise InvalidProxyMessage( |
| 508 | "did not receive a valid HTTP response from proxy" |
| 509 | ) from exc |
| 510 | finally: |
| 511 | sock.settimeout(None) |
| 512 | |
| 513 | |
| 514 | def connect_http_proxy( |
no test coverage detected
searching dependent graphs…