Example #1
0
    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()
Example #2
0
    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()
Example #3
0
    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')