Beispiel #1
0
 def string(self):
     token = self._consume(1)
     if token < "\x05":
         return ""
     elif "\x05" <= token <= "\xF5":
         return tok2str(ord(token))
     elif token == "\xFA":
         user = self.string()
         server = self.string()
         return user + "@" + server
     elif token == "\xFC":
         return self._consume(self.int8())
     elif token == "\xFD":
         return self._consume(self.int24())
     elif token == "\xFE":
         return tok2str(0xF5 + self.int8())
     else:
         raise Exception("Unknown string token '%02x'" % ord(token))
Beispiel #2
0
 def string(self):
     token = self._consume(1)
     if token < "\x05":
         return ""
     elif "\x05" <= token <= "\xF5":
         return tok2str(ord(token))
     elif token == "\xFA":
         user = self.string()
         server = self.string()
         return user + "@" + server
     elif token == "\xFC":
         return self._consume(self.int8())
     elif token == "\xFD":
         return self._consume(self.int24())
     elif token == "\xFE":
         return tok2str(0xF5 + self.int8())
     else:
         raise Exception("Unknown string token '%02x'" % ord(token))
Beispiel #3
0
    def string(self):
        token = self.int8()

        if token == 0x00:
            return ""
        elif 0x02 < token < 0xf5:
            if token == 0xec:
                return tok2str(0xed + self.int8())
            else:
                return tok2str(token)
        elif token == 0xFA:
            user = self.string()
            server = self.string()
            return user + "@" + server
        elif token == 0xFC:
            return self._consume(self.int8())
        elif token == 0xFD:
            return self._consume(self.int24())
        elif token == 0xFE:
            return tok2str(0xF5 + self.int8())
        elif token == 0xFF:
            nibble = self.int8()
            ignore_last_nibble = nibble & 0x80
            size = nibble & 0x7f
            nibbles_count = size * 2 - (1 if ignore_last_nibble else 0)

            data = self._consume(size)
            output = ""

            for i in xrange(nibbles_count):
                shift = 4 * (1 - i % 2)
                decimal = (ord(data[i // 2]) & (15 << shift)) >> shift

                if decimal < 10:
                    output += str(decimal)
                else:
                    output += chr(decimal - 10 + 45)

            return output
        else:
            raise ValueError("Unknown string token: %02x" % ord(token))
Beispiel #4
0
    def string(self):
        token = self.int8()

        if token == 0x00:
            return ""
        elif 0x02 < token < 0xf5:
            if token == 0xec:
                return tok2str(0xed + self.int8())
            else:
                return tok2str(token)
        elif token == 0xFA:
            user = self.string()
            server = self.string()
            return user + "@" + server
        elif token == 0xFC:
            return self._consume(self.int8())
        elif token == 0xFD:
            return self._consume(self.int24())
        elif token == 0xFE:
            return tok2str(0xF5 + self.int8())
        elif token == 0xFF:
            nibble = self.int8()
            ignore_last_nibble = nibble & 0x80
            size = nibble & 0x7f
            nibbles_count = size * 2 - (1 if ignore_last_nibble else 0)

            data = self._consume(size)
            output = ""

            for i in xrange(nibbles_count):
                shift = 4 * (1 - i % 2)
                decimal = (ord(data[i // 2]) & (15 << shift)) >> shift

                if decimal < 10:
                    output += str(decimal)
                else:
                    output += chr(decimal - 10 + 45)

            return output
        else:
            raise ValueError("Unknown string token: %02x" % ord(token))