MCPcopy
hub / github.com/tornadoweb/tornado / _accept_connection

Method _accept_connection

tornado/websocket.py:924–973  ·  view source on GitHub ↗
(self, handler: WebSocketHandler)

Source from the content-addressed store, hash-verified

922 )
923
924 async def _accept_connection(self, handler: WebSocketHandler) -> None:
925 subprotocol_header = handler.request.headers.get("Sec-WebSocket-Protocol")
926 if subprotocol_header:
927 subprotocols = [s.strip() for s in subprotocol_header.split(",")]
928 else:
929 subprotocols = []
930 self.selected_subprotocol = handler.select_subprotocol(subprotocols)
931 if self.selected_subprotocol:
932 assert self.selected_subprotocol in subprotocols
933 handler.set_header("Sec-WebSocket-Protocol", self.selected_subprotocol)
934
935 extensions = self._parse_extensions_header(handler.request.headers)
936 for ext in extensions:
937 if ext[0] == "permessage-deflate" and self._compression_options is not None:
938 # TODO: negotiate parameters if compression_options
939 # specifies limits.
940 self._create_compressors("server", ext[1], self._compression_options)
941 if (
942 "client_max_window_bits" in ext[1]
943 and ext[1]["client_max_window_bits"] is None
944 ):
945 # Don't echo an offered client_max_window_bits
946 # parameter with no value.
947 del ext[1]["client_max_window_bits"]
948 handler.set_header(
949 "Sec-WebSocket-Extensions",
950 httputil._encode_header("permessage-deflate", ext[1]),
951 )
952 break
953
954 handler.clear_header("Content-Type")
955 handler.set_status(101)
956 handler.set_header("Upgrade", "websocket")
957 handler.set_header("Connection", "Upgrade")
958 handler.set_header("Sec-WebSocket-Accept", self._challenge_response(handler))
959 handler.finish()
960
961 self.stream = handler._detach_stream()
962
963 self.start_pinging()
964 try:
965 open_result = handler.open(*handler.open_args, **handler.open_kwargs)
966 if open_result is not None:
967 await open_result
968 except Exception:
969 handler.log_exception(*sys.exc_info())
970 self._abort()
971 return
972
973 await self._receive_frame_loop()
974
975 def _parse_extensions_header(
976 self, headers: httputil.HTTPHeaders

Callers 1

accept_connectionMethod · 0.95

Calls 15

_create_compressorsMethod · 0.95
_challenge_responseMethod · 0.95
start_pingingMethod · 0.95
_receive_frame_loopMethod · 0.95
splitMethod · 0.80
set_headerMethod · 0.80
clear_headerMethod · 0.80
set_statusMethod · 0.80
_detach_streamMethod · 0.80
_abortMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected