Example #1
0
 def __init__(self, vport_name):
     if self.is_windows:
         from WinFile import WinFile
         self._vport = WinFile(vport_name)
     else:
         self._vport = os.open(vport_name, os.O_RDWR)
     self._buffer = ''
Example #2
0
 def __init__(self, vport_name):
     if self.is_windows:
         from WinFile import WinFile
         self._vport = WinFile(vport_name)
     else:
         self._vport = os.open(vport_name, os.O_RDWR)
     self._buffer = ''
 def __init__(self, vport_name):
     if self.is_test:
         from test_port import get_test_port
         self._vport = get_test_port(vport_name)
         self._read = self._vport.read
         self._write = self._vport.write
     elif self.is_windows:
         from WinFile import WinFile
         self._vport = WinFile(vport_name)
         self._read = self._vport.read
         self._write = self._vport.write
     else:
         self._vport = os.open(vport_name, os.O_RDWR)
         self._read = self._os_read
         self._write = self._os_write
 def __init__(self, vport_prefix):
     if self.is_test:
         from test_port import get_test_port
         self._vport = get_test_port(vport_prefix)
         self._read = self._vport.read
         self._write = self._vport.write
     elif self.is_windows:
         from WinFile import WinFile
         self._vport = WinFile(get_vports(vport_prefix))
         self._read = self._vport.read
         self._write = self._vport.write
     else:
         current_port, legacy_port = get_vports(vport_prefix)
         vport_name = current_port
         if os.path.exists(legacy_port):
             vport_name = legacy_port
         self._vport = os.open(vport_name, os.O_RDWR)
         self._read = self._os_read
         self._write = self._os_write
Example #5
0
class VirtIoChannel:

    # Python on Windows 7 return 'Microsoft' rather than 'Windows' as documented.
    is_windows = (platform.system() == 'Windows') or (platform.system() == 'Microsoft')

    def __init__(self, vport_name):
        if self.is_windows:
            from WinFile import WinFile
            self._vport = WinFile(vport_name)
        else:
            self._vport = os.open(vport_name, os.O_RDWR)
        self._buffer = ''

    def _readbuffer(self):
        if self.is_windows:
            buffer = self._vport.read(4096)
        else:
            buffer = os.read(self._vport, 4096)
        if buffer:
            self._buffer += buffer
        else:
            # read() returns immediately (non-blocking) if no one is
            # listening on the other side of the virtio-serial port.
            # So in order not to be in a tight-loop and waste CPU
            # time, we just sleep for a while and hope someone will
            # be there when we will awake from our nap.
            time.sleep(1)

    def _readline(self):
        newline = self._buffer.find('\n')
        while newline < 0:
            self._readbuffer()
            newline = self._buffer.find('\n')
        if newline >= 0:
            line, self._buffer = self._buffer.split('\n', 1)
        else:
            line = None
        return line

    def _parseLine(self, line):
        try:
            args = json.loads(line.decode('utf8'))
            name = args['__name__']
            del args['__name__']
        except:
            name = None
            args = None
        return (name, args)

    def read(self):
        return self._parseLine(self._readline())

    def write(self, name, args = {}):
        if not isinstance(name, str):
            raise TypeError("1nd arg must be a str.")
        if not isinstance(args, dict):
            raise TypeError("2nd arg must be a dict.")
        args['__name__'] = name
        message = (json.dumps(args) + '\n').encode('utf8')
        while len(message) > 0:
            if self.is_windows:
                written = self._vport.write(message)
            else:
                written = os.write(self._vport, message)
            message = message[written:]
Example #6
0
class VirtIoChannel:

    # Python on Windows 7 return 'Microsoft' rather than 'Windows' as documented.
    is_windows = (platform.system() == 'Windows') or (platform.system()
                                                      == 'Microsoft')

    def __init__(self, vport_name):
        if self.is_windows:
            from WinFile import WinFile
            self._vport = WinFile(vport_name)
        else:
            self._vport = os.open(vport_name, os.O_RDWR)
        self._buffer = ''

    def _readbuffer(self):
        if self.is_windows:
            buffer = self._vport.read(4096)
        else:
            buffer = os.read(self._vport, 4096)
        if buffer:
            self._buffer += buffer
        else:
            # read() returns immediately (non-blocking) if no one is
            # listening on the other side of the virtio-serial port.
            # So in order not to be in a tight-loop and waste CPU
            # time, we just sleep for a while and hope someone will
            # be there when we will awake from our nap.
            time.sleep(1)

    def _readline(self):
        newline = self._buffer.find('\n')
        while newline < 0:
            self._readbuffer()
            newline = self._buffer.find('\n')
        if newline >= 0:
            line, self._buffer = self._buffer.split('\n', 1)
        else:
            line = None
        return line

    def _parseLine(self, line):
        try:
            args = json.loads(line.decode('utf8'))
            name = args['__name__']
            del args['__name__']
        except:
            name = None
            args = None
        return (name, args)

    def read(self):
        return self._parseLine(self._readline())

    def write(self, name, args={}):
        if not isinstance(name, str):
            raise TypeError("1nd arg must be a str.")
        if not isinstance(args, dict):
            raise TypeError("2nd arg must be a dict.")
        args['__name__'] = name
        message = (json.dumps(args) + '\n').encode('utf8')
        while len(message) > 0:
            if self.is_windows:
                written = self._vport.write(message)
            else:
                written = os.write(self._vport, message)
            message = message[written:]