Perform the opening handshake.
(
self,
process_request: (
Callable[
[ServerConnection, Request],
Response | None,
]
| None
) = None,
process_response: (
Callable[
[ServerConnection, Request, Response],
Response | None,
]
| None
) = None,
server_header: str | None = SERVER,
timeout: float | None = None,
)
| 107 | return self.protocol.reject(status, text) |
| 108 | |
| 109 | def handshake( |
| 110 | self, |
| 111 | process_request: ( |
| 112 | Callable[ |
| 113 | [ServerConnection, Request], |
| 114 | Response | None, |
| 115 | ] |
| 116 | | None |
| 117 | ) = None, |
| 118 | process_response: ( |
| 119 | Callable[ |
| 120 | [ServerConnection, Request, Response], |
| 121 | Response | None, |
| 122 | ] |
| 123 | | None |
| 124 | ) = None, |
| 125 | server_header: str | None = SERVER, |
| 126 | timeout: float | None = None, |
| 127 | ) -> None: |
| 128 | """ |
| 129 | Perform the opening handshake. |
| 130 | |
| 131 | """ |
| 132 | if not self.request_rcvd.wait(timeout): |
| 133 | raise TimeoutError("timed out while waiting for handshake request") |
| 134 | |
| 135 | if self.request is not None: |
| 136 | with self.send_context(expected_state=CONNECTING): |
| 137 | response = None |
| 138 | |
| 139 | if process_request is not None: |
| 140 | try: |
| 141 | response = process_request(self, self.request) |
| 142 | except Exception as exc: |
| 143 | self.protocol.handshake_exc = exc |
| 144 | response = self.protocol.reject( |
| 145 | http.HTTPStatus.INTERNAL_SERVER_ERROR, |
| 146 | ( |
| 147 | "Failed to open a WebSocket connection.\n" |
| 148 | "See server log for more information.\n" |
| 149 | ), |
| 150 | ) |
| 151 | |
| 152 | if response is None: |
| 153 | self.response = self.protocol.accept(self.request) |
| 154 | else: |
| 155 | self.response = response |
| 156 | |
| 157 | if server_header: |
| 158 | self.response.headers["Server"] = server_header |
| 159 | |
| 160 | response = None |
| 161 | |
| 162 | if process_response is not None: |
| 163 | try: |
| 164 | response = process_response(self, self.request, self.response) |
| 165 | except Exception as exc: |
| 166 | self.protocol.handshake_exc = exc |
no test coverage detected