def do_handshake(self): """Perform WebSocket Handshake. On _request, we set ws_resource, ws_protocol, ws_location, ws_origin, ws_challenge, ws_challenge_md5: WebSocket handshake information. ws_stream: Frame generation/parsing class. ws_version: Protocol version. Raises: HandshakeException: when any error happened in parsing the opening handshake request. """ # 5.1 Reading the client's opening handshake. # dispatcher sets it in self._request. check_header_lines(self._request, _MANDATORY_HEADERS) self._set_resource() self._set_subprotocol() self._set_location() self._set_origin() self._set_challenge_response() self._set_protocol_version() self._dispatcher.do_extra_handshake(self._request) self._send_handshake()
def do_handshake(self): check_header_lines(self._request, _MANDATORY_HEADERS) self._request.ws_resource = self._request.uri unused_host = get_mandatory_header(self._request, common.HOST_HEADER) self._get_origin() self._check_version() self._set_protocol() self._set_extensions() key = self._get_key() (accept, accept_binary) = compute_accept(key) self._logger.debug('Sec-WebSocket-Accept: %r (%s)', accept, util.hexify(accept_binary)) self._logger.debug('IETF HyBi 07 protocol') self._request.ws_version = common.VERSION_HYBI07 stream_options = StreamOptions() stream_options.deflate = self._request.ws_deflate self._request.ws_stream = Stream(self._request, stream_options) self._request.ws_close_code = None self._request.ws_close_reason = None self._dispatcher.do_extra_handshake(self._request) if self._request.ws_requested_protocols is not None: if self._request.ws_protocol is None: raise HandshakeError( 'do_extra_handshake must choose one subprotocol from ' 'ws_requested_protocols and set it to ws_protocol') # TODO(tyoshino): Validate selected subprotocol value. self._logger.debug('Subprotocol accepted: %r', self._request.ws_protocol) else: if self._request.ws_protocol is not None: raise HandshakeError( 'ws_protocol must be None when the client didn\'t request ' 'any subprotocol') self._send_handshake(accept) self._logger.debug('Sent opening handshake response')