From 96a0b52cf8bb0b52bc186354e3cd556df8416e3e Mon Sep 17 00:00:00 2001 From: ziajka Date: Mon, 20 Nov 2017 13:51:07 +0100 Subject: [PATCH 1/2] EthernetSwitch closing connections, Ref: gui/#2330 --- gns3server/compute/dynamips/nodes/ethernet_switch.py | 5 +++-- gns3server/utils/asyncio/telnet_server.py | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gns3server/compute/dynamips/nodes/ethernet_switch.py b/gns3server/compute/dynamips/nodes/ethernet_switch.py index d45088f1..1df65caf 100644 --- a/gns3server/compute/dynamips/nodes/ethernet_switch.py +++ b/gns3server/compute/dynamips/nodes/ethernet_switch.py @@ -166,8 +166,8 @@ class EthernetSwitch(Device): self._telnet_shell = EthernetSwitchConsole(self) self._telnet_shell.prompt = self._name + '> ' - telnet = create_telnet_shell(self._telnet_shell) - self._telnet_server = (yield from asyncio.start_server(telnet.run, self._manager.port_manager.console_host, self.console)) + self._telnet = create_telnet_shell(self._telnet_shell) + self._telnet_server = (yield from asyncio.start_server(self._telnet.run, self._manager.port_manager.console_host, self.console)) self._hypervisor.devices.append(self) @@ -214,6 +214,7 @@ class EthernetSwitch(Device): """ Deletes this Ethernet switch. """ + yield from self._telnet.close() for nio in self._nios.values(): if nio: diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index faee7b21..0f4bc3c1 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -209,6 +209,11 @@ class AsyncioTelnetServer: yield from connection.disconnected() del self._connections[network_writer] + @asyncio.coroutine + def close(self): + for writer, connection in self._connections.items(): + connection.close() + @asyncio.coroutine def client_connected_hook(self): pass From 860ca3b35d3f130c958863c871c1312af6c8f3a5 Mon Sep 17 00:00:00 2001 From: ziajka Date: Mon, 20 Nov 2017 15:28:07 +0100 Subject: [PATCH 2/2] Remotely close telnet console. Ref #2330 --- gns3server/compute/dynamips/nodes/ethernet_switch.py | 3 ++- gns3server/utils/asyncio/telnet_server.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gns3server/compute/dynamips/nodes/ethernet_switch.py b/gns3server/compute/dynamips/nodes/ethernet_switch.py index 1df65caf..6d044bcd 100644 --- a/gns3server/compute/dynamips/nodes/ethernet_switch.py +++ b/gns3server/compute/dynamips/nodes/ethernet_switch.py @@ -215,7 +215,8 @@ class EthernetSwitch(Device): Deletes this Ethernet switch. """ yield from self._telnet.close() - + self._telnet_server.close() + for nio in self._nios.values(): if nio: yield from nio.close() diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index 0f4bc3c1..782b12ae 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -212,7 +212,8 @@ class AsyncioTelnetServer: @asyncio.coroutine def close(self): for writer, connection in self._connections.items(): - connection.close() + writer.write_eof() + yield from writer.drain() @asyncio.coroutine def client_connected_hook(self):