Exemplo n.º 1
0
    class default(pstruct.type):
        def __data(self):
            n = self['length'].li.int() - 4
            return dyn.clone(TPDU, blocksize=lambda s: n)

        _fields_ = [
            (ptype.type, '(version)'),  # 1 byte version
            (bigendian(pint.uint8_t), 'reserved'),
            (bigendian(pint.uint16_t), 'length'),
            (__data, 'data'),
        ]

        def blocksize(self):
            return self['length'].int()
Exemplo n.º 2
0
    class _Data2and3(pint.bigendian(pint.uint16_t)):
        def str(self):
            res = 2 * self.size()
            return "{:0{:d}x}".format(self.int(), res)

        def summary(self):
            return self.str()
Exemplo n.º 3
0
class TPDU(pstruct.type):
    def __data(self):
        s = self['length'].li.int()
        if s < 2:
            logging.info("%s : length is (%d < 2)", self.shortname(), s)
            return dyn.block(0)
        return X224.Get(self['type'].li['high'], s - 2)

    def __data(self):
        s = self['length'].li.int()
        if s < 2:
            logging.info("%s : length is (%d < 2)", self.shortname(), s)
            return dyn.block(0)
        try:
            result = X224.Lookup(self['type'].li['high'])
        except KeyError:
            result = dyn.block(s - 2)
        return result

    class __type(pbinary.struct):
        _fields_ = [(4, 'high'), (4, 'low')]

    _fields_ = [
        (bigendian(uint8_t), 'length'),
        (__type, 'type'),
        (__data, 'data'),
        (X224ParameterArray, 'param'),
        #        (lambda s: dyn.block(s.blocksize() - (s['data'].size() + 2)), 'extra'), # XXX
    ]
Exemplo n.º 4
0
class CLSID(pstruct.type):
    from ptypes.pint import littleendian, bigendian
    _fields_ = [
        (littleendian(pint.uint32_t), 'a'),
        (littleendian(pint.uint16_t), 'b'),
        (littleendian(pint.uint16_t), 'c'),  #   64
        (bigendian(pint.uint16_t), 'd'),
        (bigendian(dyn.clone(pint.uint_t, length=6)), 'e')
    ]

    def summary(self):
        result = []
        for k, v in self.items():
            count = v.size() * 2
            fmt = '%0' + str(count) + 'x'
            result.append(fmt % int(v))
        return '{' + '-'.join(result) + '}'
Exemplo n.º 5
0
    class _Data4(pint.bigendian(pint.uint64_t)):
        def str(self):
            res = bytearray(self.serialize())
            d1 = ''.join(map('{:02x}'.format, res[:2]))
            d2 = ''.join(map('{:02x}'.format, res[2:]))
            return '-'.join([d1, d2])

        def summary(self):
            return self.str()
Exemplo n.º 6
0
 def test_int_bigendian_uint32_set():
     a = pint.bigendian(pint.uint32_t)(source=provider.string(string1)).l
     a.set(0x0abcdef0)
     if a.int() == 0x0abcdef0 and a.serialize() == string1:
         raise Success
     print a, a.serialize().encode('hex')