Пример #1
0
class EthernetFrame(Structure):
    preamble_sof = Magic('\xAA' * 8)  # 8 bytes of 10101010
    mac_dest = UBInt8Sequence(6)
    mac_source = UBInt8Sequence(6)
    ethertype = DispatchField(UBInt16())
    payload = DispatchTarget(None, ethertype, {
        0x0800: IPV4Frame,
        #         0x85DD: IPV6Message,
        #         0x0806: ARPMessage,
    })

    checksum = UBInt32()
Пример #2
0
class Frame(Structure):
    version = UBInt8()
    operation = UBInt8()
    result = UBInt16()
    reserved_0 = Magic('\x00\x00\x00\x00')
    _host_mac = UBInt8Sequence(6)
    host_mac = FieldProperty(_host_mac,
                             onget=lambda v: unpack_mac(''.join(map(chr, v))),
                             onset=lambda v: tuple(map(ord, pack_mac(v))))
    _device_mac = UBInt8Sequence(6)
    device_mac = FieldProperty(
        _device_mac,
        onget=lambda v: unpack_mac(''.join(map(chr, v))),
        onset=lambda v: tuple(map(ord, pack_mac(v))))
    reserved_1 = Magic('\x00\x00')
    sequence = UBInt16()
    signature = Magic('NSDP')
    reserved_2 = Magic('\x00\x00\x00\x00')
    messages = FieldArray(Message)
Пример #3
0
class SuperMessage(Structure):
    magic = Magic(b'\xAA\xAA')

    # bitfield
    options = BitField(8, b1=BitBool(), b2=BitBool(), rest=BitNum(6))

    # unsigned big endian
    ubint8 = UBInt8()
    ubint16 = UBInt16()
    ubint24 = UBInt24()
    ubint32 = UBInt32()
    ubint64 = UBInt64()

    # signed big endian
    sbint8 = SBInt8()
    sbint16 = SBInt16()
    sbint32 = SBInt32()
    sbint64 = SBInt64()

    # unsigned little endian
    ulint8 = ULInt8()
    ulint16 = ULInt16()
    ulint32 = ULInt32()
    ulint64 = ULInt64()

    # signed little endian
    slint8 = SLInt8()
    slint16 = SLInt16()
    slint32 = SLInt32()
    slint64 = SLInt64()

    # optional
    optional_one = ConditionalField(UBInt8(), lambda m: m.options.b1)
    optional_two = ConditionalField(UBInt8(), lambda m: m.options.b2)

    # sequences with variable lengths
    ubseql = LengthField(UBInt8())
    ubseq = UBInt8Sequence(ubseql)

    sbseql = LengthField(UBInt8())
    sbseq = SBInt8Sequence(sbseql)

    # sequences with fixed lengths
    ubseqf = UBInt8Sequence(5)
    sbseqf = SBInt8Sequence(5)

    # don't change anything... for test coverage
    ulint16_value = FieldProperty(ulint16)
    ulint16_byte_string = FieldProperty(
        ulint16,
        onget=lambda v: str(v),
        onset=lambda v: struct.unpack(">H", v)[0])

    message_type = DispatchField(UBInt8())
    submessage_length = LengthField(UBInt16())
    submessage = DispatchTarget(submessage_length, message_type,
                                {0xEF: SuperChild})

    # checksum starts after beginning magic, ends before
    # the checksum
    crc = CRCField(UBInt16(), crc16_ccitt, 2, -3)
    eof = Magic(b'~')
Пример #4
0
class MyDefaultTargetMessage(Structure):
    _length = LengthField(DependentField('length'))
    sequence = UBInt8Sequence(_length)
Пример #5
0
class MyOtherTargetMessage(Structure):
    #: Inherited from the parent message
    _length = LengthField(DependentField('length'))
    sequence = UBInt8Sequence(_length)
Пример #6
0
 class MyVarSeqMessage(Structure):
     s = VariableRawPayload(None)
     b = UBInt8Sequence(None)
Пример #7
0
 class MyVarSeqMessage(Structure):
     type = UBInt8()
     length = LengthField(UBInt8())
     seq = UBInt8Sequence(length)
Пример #8
0
 class MySeqMessage(Structure):
     type = UBInt8()
     byte_values = UBInt8Sequence(16)
Пример #9
0
 class MyMessage(Structure):
     _version = UBInt8Sequence(2)
     version = FieldProperty(
         _version,
         onget=lambda v: "%d.%02d" % (v[0], v[1]),
         onset=lambda v: tuple(int(six.b(x)) for x in v.split(".", 1)))