def finish_request(self, sock, client_address): # this method overrides TCPServer implementation and actually handles new connections # it may be invoked from different threads, in parallel try: orig_dst = get_original_dst(sock) logger.debug('original destination is %s' % str(orig_dst)) except Exception as ex: logger.debug('get_original_dst() has thrown an exception: %s', ex) # create new conn object and obtain client id conn = ClientConnection(sock, client_address) session_id = conn.get_session_id() # find or create a session handler with self.lock: if not self.client_server_sessions.has_key(session_id): logger.debug('new session [id %s]', session_id) profiles = self.mk_session_profiles() handler = ClientServerSessionHandler(session_id, profiles, self.post_test_action, self.res_queue, self.file_bag) self.client_server_sessions[session_id] = handler else: handler = self.client_server_sessions[session_id] # handle the request handler.handle(conn)