diff --git a/rdpy/core/t125/gcc.py b/rdpy/core/t125/gcc.py index 58f1fbb..4e5764c 100644 --- a/rdpy/core/t125/gcc.py +++ b/rdpy/core/t125/gcc.py @@ -256,7 +256,7 @@ class ClientCoreData(CompositeType): self.sasSequence = UInt16Le(Sequence.RNS_UD_SAS_DEL) self.kbdLayout = UInt32Le(KeyboardLayout.US) self.clientBuild = UInt32Le(3790) - self.clientName = Buffer(b"rdpy" + b"\x00" * 11, read_len=lambda: 32) + self.clientName = Buffer(("rdpy" + "\x00" * 12).encode("utf-16le"), read_len=lambda: 32) self.keyboardType = UInt32Le(KeyboardType.IBM_101_102_KEYS) self.keyboardSubType = UInt32Le(0) self.keyboardFnKeys = UInt32Le(12) @@ -310,13 +310,14 @@ class ServerSecurityData(CompositeType): self.serverRandom = Buffer(read_len=lambda: self.serverRandomLen.value, conditional=lambda: not(self.encryptionMethod.value == 0 and self.encryptionLevel.value == 0)) self.serverCertificate = ServerCertificate(readLen=lambda: self.serverCertLen.value, conditional=lambda: not(self.encryptionMethod.value == 0 and self.encryptionLevel.value == 0)) + class ServerCertificate(CompositeType): """ @summary: Server certificate structure @see: http://msdn.microsoft.com/en-us/library/cc240521.aspx """ - def __init__(self, certData = None, readLen = None, conditional = lambda:True): - CompositeType.__init__(self, readLen = readLen, conditional = conditional) + def __init__(self, certData = None, read_len = None, conditional = lambda:True): + CompositeType.__init__(self, read_len=read_len, conditional = conditional) self.dwVersion = UInt32Le(lambda:(self.certData.__class__._TYPE_)) def CertificateFactory(): @@ -492,7 +493,7 @@ class Settings(CompositeType): """ def __init__(self, init=None, read_len=None): super().__init__(read_len=read_len) - self.settings = ArrayType(DataBlock, [DataBlock(i) for i in init]) + self.settings = ArrayType(DataBlock, [DataBlock(i) for i in init or []]) def get_block(self, message_type): """ diff --git a/rdpy/core/t125/per.py b/rdpy/core/t125/per.py index 9500928..706f829 100644 --- a/rdpy/core/t125/per.py +++ b/rdpy/core/t125/per.py @@ -273,11 +273,11 @@ def readOctetStream(s, octetStream, minValue = 0): """ size = readLength(s) + minValue if size != len(octetStream): - raise InvalidValue("incompatible size %d != %d"(len(octetStream), size)) + raise InvalidValue("incompatible size %d != %d"%(len(octetStream), size)) for i in range(0, size): c = UInt8() s.read_type(c) - if ord(octetStream[i]) != c.value: + if octetStream[i] != c.value: return False return True diff --git a/rdpy/model/message.py b/rdpy/model/message.py index a551488..edea16a 100644 --- a/rdpy/model/message.py +++ b/rdpy/model/message.py @@ -380,7 +380,7 @@ class CompositeType(Message): s.read_type(self.__dict__[name]) read_len += sizeof(self.__dict__[name]) # read is ok but read out of bound - if self._read_len is not None and read_len > self._read_len.value: + if self._read_len is not None and read_len > self._read_len(): # roll back s.seek(-sizeof(self.__dict__[name]), 1) # and notify if not optional @@ -396,9 +396,9 @@ class CompositeType(Message): s.seek(-sizeof(self.__dict__[tmp_name]), 1) raise e - if self._read_len is not None and read_len < self._read_len.value: - log.debug("Still have correct data in packet %s, read %s bytes as padding"%(self.__class__, self._read_len.value - read_len)) - s.read(self._read_len.value - read_len) + if self._read_len is not None and read_len < self._read_len(): + log.debug("Still have correct data in packet %s, read %s bytes as padding"%(self.__class__, self._read_len() - read_len)) + s.read(self._read_len() - read_len) def __write__(self, s): """ @@ -419,7 +419,7 @@ class CompositeType(Message): @return: sum of sizeof of each Type attributes """ if self._is_readed and not self._read_len is None: - return self._read_len.value + return self._read_len() size = 0 for name in self._type_name: