def _connect(self): address = (self.account.host, self.account.port) timeout = self.pool.connection_timeout try: s = socket.create_connection(address, timeout) self._disconnected = False except socket.error: raise NetworkException( "Could not connect to specified host and port: " + "{}:{}".format(*address)) self.socket = s main_message = StartupPack( (self.account.proxy_user, self.account.proxy_zone), (self.account.client_user, self.account.client_zone), self.pool.application_name) # No client-server negotiation if not self.requires_cs_negotiation(): # Send startup pack without negotiation request msg = iRODSMessage(msg_type='RODS_CONNECT', msg=main_message) self.send(msg) # Server responds with version version_msg = self.recv() # Done return version_msg.get_main_message(VersionResponse) # Get client negotiation policy client_policy = getattr(self.account, 'client_server_policy', REQUIRE_TCP) # Sanity check validate_policy(client_policy) # Send startup pack with negotiation request main_message.option = '{};{}'.format(main_message.option, REQUEST_NEGOTIATION) msg = iRODSMessage(msg_type='RODS_CONNECT', msg=main_message) self.send(msg) # Server responds with its own negotiation policy cs_neg_msg = self.recv() response = cs_neg_msg.get_main_message(ClientServerNegotiation) server_policy = response.result # Perform the negotiation neg_result, status = perform_negotiation(client_policy=client_policy, server_policy=server_policy) # Send negotiation result to server client_neg_response = ClientServerNegotiation(status=status, result='{}={};'.format( CS_NEG_RESULT_KW, neg_result)) msg = iRODSMessage(msg_type='RODS_CS_NEG_T', msg=client_neg_response) self.send(msg) # If negotiation failed we're done if neg_result == FAILURE: self.disconnect() raise NetworkException( "Client-Server negotiation failure: {},{}".format( client_policy, server_policy)) # Server responds with version version_msg = self.recv() if neg_result == USE_SSL: self.ssl_startup() return version_msg.get_main_message(VersionResponse)
def _connect(self): address = (self.account.host, self.account.port) timeout = self.pool.connection_timeout try: s = socket.create_connection(address, timeout) except socket.error: raise NetworkException( "Could not connect to specified host and port: " + "{}:{}".format(*address)) self.socket = s main_message = StartupPack( (self.account.proxy_user, self.account.proxy_zone), (self.account.client_user, self.account.client_zone) ) # No client-server negotiation if not self.requires_cs_negotiation(): # Send startup pack without negotiation request msg = iRODSMessage(msg_type='RODS_CONNECT', msg=main_message) self.send(msg) # Server responds with version version_msg = self.recv() # Done return version_msg.get_main_message(VersionResponse) # Get client negotiation policy client_policy = getattr(self.account, 'client_server_policy', REQUIRE_TCP) # Sanity check validate_policy(client_policy) # Send startup pack with negotiation request main_message.option = '{};{}'.format(main_message.option, REQUEST_NEGOTIATION) msg = iRODSMessage(msg_type='RODS_CONNECT', msg=main_message) self.send(msg) # Server responds with its own negotiation policy cs_neg_msg = self.recv() response = cs_neg_msg.get_main_message(ClientServerNegotiation) server_policy = response.result # Perform the negotiation neg_result, status = perform_negotiation(client_policy=client_policy, server_policy=server_policy) # Send negotiation result to server client_neg_response = ClientServerNegotiation( status=status, result='{}={};'.format(CS_NEG_RESULT_KW, neg_result) ) msg = iRODSMessage(msg_type='RODS_CS_NEG_T', msg=client_neg_response) self.send(msg) # If negotiation failed we're done if neg_result == FAILURE: self.disconnect() raise NetworkException("Client-Server negotiation failure: {},{}".format(client_policy, server_policy)) # Server responds with version version_msg = self.recv() if neg_result == USE_SSL: self.ssl_startup() return version_msg.get_main_message(VersionResponse)