mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-24 15:58:08 +00:00
Fixes Windows named pipe issue. Fixes #340.
This commit is contained in:
parent
6edb41ded7
commit
32f9baf682
@ -30,7 +30,7 @@ import asyncio
|
||||
|
||||
from pkg_resources import parse_version
|
||||
from gns3server.utils.telnet_server import TelnetServer
|
||||
from gns3server.utils.asyncio import wait_for_file_creation
|
||||
from gns3server.utils.asyncio import wait_for_file_creation, wait_for_named_pipe_creation
|
||||
from .virtualbox_error import VirtualBoxError
|
||||
from ..nios.nio_udp import NIOUDP
|
||||
from ..nios.nio_nat import NIONAT
|
||||
@ -219,7 +219,11 @@ class VirtualBoxVM(BaseVM):
|
||||
|
||||
if self._enable_remote_console and self._console is not None:
|
||||
try:
|
||||
yield from wait_for_file_creation(self._get_pipe_name()) # wait for VirtualBox to create the pipe file.
|
||||
# wait for VirtualBox to create the pipe file.
|
||||
if sys.platform.startswith("win"):
|
||||
yield from wait_for_named_pipe_creation(self._get_pipe_name())
|
||||
else:
|
||||
yield from wait_for_file_creation(self._get_pipe_name())
|
||||
except asyncio.TimeoutError:
|
||||
raise VirtualBoxError('Pipe file "{}" for remote console has not been created by VirtualBox'.format(self._get_pipe_name()))
|
||||
self._start_remote_console()
|
||||
|
@ -27,7 +27,7 @@ import tempfile
|
||||
|
||||
from gns3server.utils.telnet_server import TelnetServer
|
||||
from gns3server.utils.interfaces import get_windows_interfaces
|
||||
from gns3server.utils.asyncio import wait_for_file_creation
|
||||
from gns3server.utils.asyncio import wait_for_file_creation, wait_for_named_pipe_creation
|
||||
from collections import OrderedDict
|
||||
from .vmware_error import VMwareError
|
||||
from ..nios.nio_udp import NIOUDP
|
||||
@ -440,6 +440,9 @@ class VMwareVM(BaseVM):
|
||||
|
||||
if self._enable_remote_console and self._console is not None:
|
||||
try:
|
||||
if sys.platform.startswith("win"):
|
||||
yield from wait_for_named_pipe_creation(self._get_pipe_name())
|
||||
else:
|
||||
yield from wait_for_file_creation(self._get_pipe_name()) # wait for VMware to create the pipe file.
|
||||
except asyncio.TimeoutError:
|
||||
raise VMwareError('Pipe file "{}" for remote console has not been created by VMware'.format(self._get_pipe_name()))
|
||||
|
@ -108,3 +108,18 @@ def wait_for_file_creation(path, timeout=10):
|
||||
yield from asyncio.sleep(0.5)
|
||||
timeout -= 0.5
|
||||
raise asyncio.TimeoutError()
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def wait_for_named_pipe_creation(pipe_path, timeout=10):
|
||||
|
||||
while timeout > 0:
|
||||
try:
|
||||
with open(pipe_path, "a+b"):
|
||||
pass
|
||||
except OSError:
|
||||
yield from asyncio.sleep(0.5)
|
||||
timeout -= 0.5
|
||||
else:
|
||||
return
|
||||
raise asyncio.TimeoutError()
|
||||
|
Loading…
Reference in New Issue
Block a user