def _accept_connection(self): subprotocol_header = '' subprotocols = self.request.headers.get("Sec-WebSocket-Protocol", '') subprotocols = [s.strip() for s in subprotocols.split(',')] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols subprotocol_header = ("Sec-WebSocket-Protocol: %s\r\n" % selected) extension_header = '' extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if (ext[0] == 'permessage-deflate' and self._compression_options is not None): # TODO: negotiate parameters if compression_options # specifies limits. self._create_compressors('server', ext[1]) if ('client_max_window_bits' in ext[1] and ext[1]['client_max_window_bits'] is None): # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]['client_max_window_bits'] extension_header = ( 'Sec-WebSocket-Extensions: %s\r\n' % httputil._encode_header('permessage-deflate', ext[1])) break response_headers = '' if self._response_headers is not None: for header_name, header_value in self._response_headers.get_all(): response_headers += '%s: %s\r\n' % (header_name, header_value) if self.stream.closed(): self._abort() return self.stream.write( tornado.escape.utf8( "HTTP/1.1 101 Switching Protocols\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Accept: %s\r\n" "%s%s%s" "\r\n" % (self._challenge_response(), subprotocol_header, extension_header, response_headers))) self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame()
def _accept_connection(self): subprotocol_header = '' subprotocols = self.request.headers.get("Sec-WebSocket-Protocol", '') subprotocols = [s.strip() for s in subprotocols.split(',')] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols subprotocol_header = ("Sec-WebSocket-Protocol: %s\r\n" % selected) extension_header = '' extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if (ext[0] == 'permessage-deflate' and self._compression_options is not None): # TODO: negotiate parameters if compression_options # specifies limits. self._create_compressors('server', ext[1]) if ('client_max_window_bits' in ext[1] and ext[1]['client_max_window_bits'] is None): # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]['client_max_window_bits'] extension_header = ('Sec-WebSocket-Extensions: %s\r\n' % httputil._encode_header( 'permessage-deflate', ext[1])) break response_headers = '' if self._response_headers is not None: for header_name, header_value in self._response_headers.get_all(): response_headers += '%s: %s\r\n' % (header_name, header_value) if self.stream.closed(): self._abort() return self.stream.write(tornado.escape.utf8( "HTTP/1.1 101 Switching Protocols\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Accept: %s\r\n" "%s%s%s" "\r\n" % (self._challenge_response(), subprotocol_header, extension_header, response_headers))) self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame()
def _accept_connection(self): subprotocols = [ s.strip() for s in self.request.headers.get_list("Sec-WebSocket-Protocol") ] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols self.handler.set_header("Sec-WebSocket-Protocol", selected) extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if (ext[0] == 'permessage-deflate' and self._compression_options is not None): # TODO: negotiate parameters if compression_options # specifies limits. self._create_compressors('server', ext[1], self._compression_options) if ('client_max_window_bits' in ext[1] and ext[1]['client_max_window_bits'] is None): # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]['client_max_window_bits'] self.handler.set_header( "Sec-WebSocket-Extensions", httputil._encode_header('permessage-deflate', ext[1])) break self.handler.clear_header("Content-Type") self.handler.set_status(101) self.handler.set_header("Upgrade", "websocket") self.handler.set_header("Connection", "Upgrade") self.handler.set_header("Sec-WebSocket-Accept", self._challenge_response()) self.handler.finish() self.handler._attach_stream() self.stream = self.handler.stream self.start_pinging() self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame()
def _accept_connection(self): subprotocol_header = "" subprotocols = self.request.headers.get("Sec-WebSocket-Protocol", "") subprotocols = [s.strip() for s in subprotocols.split(",")] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols subprotocol_header = "Sec-WebSocket-Protocol: %s\r\n" % selected extension_header = "" extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if ext[0] == "permessage-deflate" and self._compression_options is not None: # TODO: negotiate parameters if compression_options # specifies limits. self._create_compressors("server", ext[1]) if "client_max_window_bits" in ext[1] and ext[1]["client_max_window_bits"] is None: # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]["client_max_window_bits"] extension_header = "Sec-WebSocket-Extensions: %s\r\n" % httputil._encode_header( "permessage-deflate", ext[1] ) break if self.stream.closed(): self._abort() return self.stream.write( tornado.escape.utf8( "HTTP/1.1 101 Switching Protocols\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Accept: %s\r\n" "%s%s" "\r\n" % (self._challenge_response(), subprotocol_header, extension_header) ) ) self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame()
def _accept_connection(self): subprotocols = self.request.headers.get("Sec-WebSocket-Protocol", '') subprotocols = [s.strip() for s in subprotocols.split(',')] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols self.handler.set_header("Sec-WebSocket-Protocol", selected) extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if (ext[0] == 'permessage-deflate' and self._compression_options is not None): # TODO: negotiate parameters if compression_options # specifies limits. self._create_compressors('server', ext[1], self._compression_options) if ('client_max_window_bits' in ext[1] and ext[1]['client_max_window_bits'] is None): # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]['client_max_window_bits'] self.handler.set_header("Sec-WebSocket-Extensions", httputil._encode_header( 'permessage-deflate', ext[1])) break self.handler.clear_header("Content-Type") self.handler.set_status(101) self.handler.set_header("Upgrade", "websocket") self.handler.set_header("Connection", "Upgrade") self.handler.set_header("Sec-WebSocket-Accept", self._challenge_response()) self.handler.finish() self.handler._attach_stream() self.stream = self.handler.stream self.start_pinging() self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame()