1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
27 def __setup_config(nsport, args, save_config):
29 from salome_utils import generateFileName, getHostName
30 hostname = getHostName()
32 omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
34 if omniorbUserPath is not None:
35 kwargs["with_username"]=True
37 from ORBConfigFile import writeORBConfigFile
38 omniorb_config, giopsize = writeORBConfigFile(omniorbUserPath, hostname, nsport, kwargs)
39 args['port'] = os.environ['NSPORT']
42 last_running_config = generateFileName(omniorbUserPath, prefix="omniORB",
47 os.environ['LAST_RUNNING_CONFIG'] = last_running_config
49 if sys.platform == "win32":
51 shutil.copyfile(omniorb_config, last_running_config)
54 if os.access(last_running_config, os.F_OK):
55 os.remove(last_running_config)
58 os.symlink(omniorb_config, last_running_config)
66 def searchFreePort_withPortManager(queue, args={}, save_config=1, use_port=None):
67 from PortManager import getPort
68 port = getPort(use_port)
71 print("Check if port can be used: %d" % use_port, end=' ')
72 if port == use_port and port != -1:
74 __setup_config(use_port, args, save_config)
75 queue.put([os.environ['OMNIORB_CONFIG'],
77 os.environ['NSHOST']])
80 print("- KO: port is busy")
83 print("Searching for a free port for naming service:", end=' ')
84 if port == -1: # try again
85 port = getPort(use_port)
88 print("%s - OK"%(port))
89 __setup_config(port, args, save_config)
91 print("Unable to obtain port")
93 queue.put([os.environ['OMNIORB_CONFIG'],
95 os.environ['NSHOST']])
98 def __savePortToFile(args):
99 # Save Naming service port name into
100 # the file args["ns_port_log_file"]
101 if 'ns_port_log_file' in args:
102 omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
103 file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"])
104 with open(file_name, "w") as f:
105 f.write(os.environ['NSPORT'])
108 def searchFreePort(args={}, save_config=1, use_port=None):
110 Search free port for SALOME session.
111 Returns first found free port number.
114 import PortManager # mandatory
115 from multiprocessing import Process, Queue
117 p = Process(target = searchFreePort_withPortManager, args=(queue, args, save_config, use_port,))
121 os.environ['OMNIORB_CONFIG'] = info[0]
122 os.environ['NSPORT'] = info[1]
123 args['port'] = os.environ['NSPORT']
124 os.environ['NSHOST'] = info[2]
125 __savePortToFile(args)
127 p.join() # this blocks until the process terminates
129 raise Exception('PortManager module not found')