MCPcopy Create free account
hub / github.com/secdev/scapy / EField

Class EField

scapy/contrib/rtps/common_types.py:57–94  ·  view source on GitHub ↗

A field that manages endianness of a nested field passed to the constructor

Source from the content-addressed store, hash-verified

55
56
57class EField(_FieldContainer):
58 """
59 A field that manages endianness of a nested field passed to the constructor
60 """
61
62 __slots__ = ["fld", "endianness", "endianness_from"]
63
64 def __init__(self, fld, endianness=None, endianness_from=None):
65 self.fld = fld
66 self.endianness = endianness
67 self.endianness_from = endianness_from
68
69 def set_endianness(self, pkt):
70 if getattr(pkt, "endianness", None) is not None:
71 self.endianness = pkt.endianness
72 elif self.endianness_from is not None:
73 self.endianness = self.endianness_from(pkt)
74
75 if isinstance(self.endianness, str) and self.endianness:
76 if isinstance(self.fld, UUIDField):
77 self.fld.uuid_fmt = (UUIDField.FORMAT_LE if
78 self.endianness == '<'
79 else UUIDField.FORMAT_BE)
80 elif hasattr(self.fld, "fmt"):
81 if len(self.fld.fmt) == 1: # if it's only "I"
82 _end = self.fld.fmt[0]
83 else: # if it's "<I"
84 _end = self.fld.fmt[1:]
85 self.fld.fmt = self.endianness + _end
86 self.fld.struct = struct.Struct(self.fld.fmt)
87
88 def getfield(self, pkt, buf):
89 self.set_endianness(pkt)
90 return self.fld.getfield(pkt, buf)
91
92 def addfield(self, pkt, buf, val):
93 self.set_endianness(pkt)
94 return self.fld.addfield(pkt, buf, val)
95
96
97class EPacket(Packet):

Callers 15

NDRDataClass · 0.90
PNIOServiceReqPDUClass · 0.90
PNIOServiceResPDUClass · 0.90
RTPSSubMessage_DATAClass · 0.90
RTPSSubMessage_PADClass · 0.90
PIDPacketBaseClass · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…