def localServerAutoStartIfRequire(self): """ Try to start the embed gns3 server. """ if not self.shouldLocalServerAutoStart(): self._http_client = HTTPClient(self._settings) Controller.instance().setHttpClient(self._http_client) return if self.isLocalServerRunning() and self._server_started_by_me: return True # We check if two gui are not launched at the same time # to avoid killing the server of the other GUI if not LocalConfig.isMainGui(): log.info("Not the main GUI, will not auto start the server") self._http_client = HTTPClient(self._settings) Controller.instance().setHttpClient(self._http_client) return True if self.isLocalServerRunning(): log.debug("A local server already running on this host") # Try to kill the server. The server can be still running after # if the server was started by hand self._killAlreadyRunningServer() if not self.isLocalServerRunning(): if not self.initLocalServer(): QtWidgets.QMessageBox.critical( self.parent(), "Local server", "Could not start the local server process: {}".format( self._settings["path"])) return False if not self.startLocalServer(): QtWidgets.QMessageBox.critical( self.parent(), "Local server", "Could not start the local server process: {}".format( self._settings["path"])) return False if self.parent(): worker = WaitForConnectionWorker(self._settings["host"], self._port) progress_dialog = ProgressDialog( worker, "Local server", "Connecting to server {} on port {}...".format( self._settings["host"], self._port), "Cancel", busy=True, parent=self.parent()) progress_dialog.show() if not progress_dialog.exec_(): return False self._server_started_by_me = True self._http_client = HTTPClient(self._settings) Controller.instance().setHttpClient(self._http_client) return True
def http_client(http_request, network_manager): return HTTPClient({ "protocol": "http", "host": "127.0.0.1", "port": "3080" }, network_manager)
def updateLocalServerSettings(self, new_settings): """ Update the local server settings. Keep the key not in new_settings """ old_settings = copy.copy(self._settings) if not self._settings: self._settings = new_settings else: self._settings.update(new_settings) self._port = self._settings["port"] LocalServerConfig.instance().saveSettings("Server", self._settings) # Settings have changed we need to restart the server if old_settings != self._settings: if self._settings["auto_start"]: # We restart the local server only if we really need. Auth can be hot change settings_require_restart = ('host', 'port', 'path') need_restart = False for s in settings_require_restart: if old_settings.get(s) != self._settings.get(s): need_restart = True if need_restart: self.stopLocalServer(wait=True) self.localServerAutoStartIfRequired() # If the controller is remote: else: self.stopLocalServer(wait=True) if self._settings.get("host") is None: self._http_client = None else: self._http_client = HTTPClient(self._settings) Controller.instance().setHttpClient(self._http_client)
def getNetworkClientInstance(self, settings, network_manager): """ Based on url return a network client instance """ from gns3.http_client import HTTPClient client = HTTPClient(settings, network_manager) return client
def getNetworkClientInstance(settings, network_manager): """ Based on url return a network client instance """ if settings.get("protocol", "http") == "ssh": from gns3.ssh_client import SSHClient return SSHClient(settings, network_manager) else: from gns3.http_client import HTTPClient return HTTPClient(settings, network_manager)
def isLocalServerRunning(self): """ Synchronous check if a server is already running on this host. :returns: boolean """ status, json_data = HTTPClient(self._settings).getSynchronous("GET", "/version") if status == 401: # Auth issue that need to be solved later return True elif json_data is None: return False elif status != 200: return False else: version = json_data.get("version", None) if version is None: log.debug("Server is not a GNS3 server") return False return True
def __init__(self, parent=None): # Remember if the server was started by us or not self._server_started_by_me = False self._local_server_path = "" self._local_server_process = None super().__init__() self._parent = parent self._config_directory = LocalConfig.instance().configDirectory() self._settings = {} self.localServerSettings() self._port = self._settings.get("port", 3080) if not self._settings.get("auto_start", True): if self._settings.get("host") is None: self._http_client = HTTPClient(self._settings) Controller.instance().setHttpClient(self._http_client) else: self._http_client = None self._stopping = False self._timer = QtCore.QTimer() self._timer.setInterval(5000) self._timer.timeout.connect(self._checkLocalServerRunningSlot) self._timer.start()
def http_client(request, network_manager): return HTTPClient("http://127.0.0.1:8000", network_manager)