Exemple #1
0
    def open_secure_channel(self, params):
        self.logger.info("open_secure_channel")
        request = ua.OpenSecureChannelRequest()
        request.Parameters = params

        # use callback to make sure channel security parameters are set immedialty
        # and we do no get race conditions
        def clb(future):
            response = struct_from_binary(ua.OpenSecureChannelResponse,
                                          future.result())
            response.ResponseHeader.ServiceResult.check()
            self._connection.set_channel(response.Parameters,
                                         params.RequestType,
                                         params.ClientNonce)
            clb.future.set_result(response)

        clb.future = Future(
        )  # hack to have a variable only shared between a callback and us

        self._send_request(request,
                           message_type=ua.MessageType.SecureOpen,
                           callback=clb)
        # wait for our callbackto finish rexecuting before returning
        response = clb.future.result(self.timeout)
        response.ResponseHeader.ServiceResult.check()

        return response.Parameters
Exemple #2
0
def get_request(client):
    """ Assemble an OpenSecureChannelRequest for the specified client

    :param client: client object containing the channel parameters
    :return: binary OpenSecureChannelRequest
    """
    params = ua.OpenSecureChannelParameters()
    params.ClientProtocolVersion = 0
    params.RequestType = ua.SecurityTokenRequestType.Issue
    params.SecurityMode = client.security_policy.Mode
    params.RequestedLifetime = client.secure_channel_timeout

    nonce = utils.create_nonce(client.security_policy.symmetric_key_size)
    params.ClientNonce = nonce

    request = ua.OpenSecureChannelRequest()
    request.Parameters = params
    request.RequestHeader = client.uaclient._uasocket._create_request_header()

    try:
        binreq = struct_to_binary(request)
    except Exception:
        # reset request handle if any error
        # see self._create_request_header
        client.uaclient._uasocket._request_handle -= 1
        raise

    return binreq
    def open_secure_channel(self, params):
        self.logger.info("open_secure_channel")
        request = ua.OpenSecureChannelRequest()
        request.Parameters = params
        future = self._send_request(request, message_type=ua.MessageType.SecureOpen)

        response = ua.OpenSecureChannelResponse.from_binary(future.result(self.timeout))
        response.ResponseHeader.ServiceResult.check()
        self._connection.set_channel(response.Parameters)
        return response.Parameters
Exemple #4
0
 def open_secure_channel(self, params):
     self.logger.info("open_secure_channel")
     request = ua.OpenSecureChannelRequest()
     request.Parameters = params
     future = self._send_request(request, message_type=ua.MessageType.SecureOpen)
     
     # FIXME: we have a race condition here
     # we can get a packet with the new token id before we reach to store it..
     response = ua.OpenSecureChannelResponse.from_binary(future.result(self.timeout))
     response.ResponseHeader.ServiceResult.check()
     self._connection.set_channel(response.Parameters)
     return response.Parameters