Handle incoming close frame.
(self, payload)
| 370 | return bytes(b ^ masking_key[i % 4] for i, b in enumerate(payload)) |
| 371 | |
| 372 | async def _handle_close(self, payload): |
| 373 | """Handle incoming close frame.""" |
| 374 | if len(payload) >= 2: |
| 375 | self.close_code = struct.unpack("!H", payload[:2])[0] |
| 376 | self.close_reason = payload[2:].decode("utf-8", errors="replace") |
| 377 | else: |
| 378 | self.close_code = CLOSE_NO_STATUS |
| 379 | self.close_reason = "" |
| 380 | |
| 381 | self._close_received = True |
| 382 | |
| 383 | # Echo close frame back if we haven't already sent one |
| 384 | if not self._close_sent: |
| 385 | await self._send_close(self.close_code, self.close_reason) |
| 386 | |
| 387 | self.closed = True |
| 388 | self._close_event.set() |
| 389 | |
| 390 | async def _handle_continuation(self, payload): # pylint: disable=unused-argument |
| 391 | """Handle continuation frame (already processed in _read_frame).""" |
no test coverage detected