Source code for pcapkit.protocols.schema.transport.udp

# -*- coding: utf-8 -*-
# mypy: disable-error-code=assignment
"""header schema for user datagram protocol"""

from typing import TYPE_CHECKING

from pcapkit.const.reg.apptype import AppType as Enum_AppType
from pcapkit.const.reg.apptype import TransportProtocol as Enum_TransportProtocol
from pcapkit.corekit.fields.misc import PayloadField
from pcapkit.corekit.fields.numbers import PortEnumField, UInt16Field
from pcapkit.corekit.fields.strings import BytesField
from pcapkit.protocols.schema.schema import Schema, schema_final

__all__ = ['UDP']

if TYPE_CHECKING:
    from pcapkit.protocols.protocol import ProtocolBase


[docs] @schema_final class UDP(Schema): """Header schema for UDP packet.""" #: Source port. srcport: 'Enum_AppType' = PortEnumField(length=2, namespace=Enum_AppType, proto=Enum_TransportProtocol.udp) #: Destination port. dstport: 'Enum_AppType' = PortEnumField(length=2, namespace=Enum_AppType, proto=Enum_TransportProtocol.udp) #: Length of UDP packet. len: 'int' = UInt16Field() #: Checksum of UDP packet. checksum: 'bytes' = BytesField(length=2) #: Payload. A Length below the header's own 8 octets leaves the length #: negative, which takes the rest of the datagram. payload: 'bytes' = PayloadField(length=lambda pkt: pkt['len'] - 8) #: Octets captured past the Length field, see #: :attr:`IPv4.trailer <pcapkit.protocols.schema.internet.ipv4.IPv4.trailer>`. trailer: 'bytes' = PayloadField(default=b'') if TYPE_CHECKING: def __init__(self, srcport: 'Enum_AppType | int', dstport: 'Enum_AppType | int', len: 'int', checksum: 'bytes', payload: 'bytes | Schema | ProtocolBase', trailer: 'bytes' = b'') -> 'None': ...