(self, pkt, s)
| 329 | return tmp_s[:len(s)] |
| 330 | |
| 331 | def getfield(self, pkt, s): |
| 332 | # type: (Packet, bytes) -> Tuple[bytes, Union[int, float]] |
| 333 | if not isinstance(pkt, SignalPacket): |
| 334 | raise Scapy_Exception("Only use SignalFields in a SignalPacket") |
| 335 | |
| 336 | if isinstance(s, tuple): |
| 337 | s, _ = s |
| 338 | |
| 339 | if self._is_little_endian(): |
| 340 | msb_pos = self.start + self.size - 1 |
| 341 | lsb_pos = self.start |
| 342 | shift = self.start |
| 343 | fmt = "<Q" |
| 344 | else: |
| 345 | msb_pos = self.start |
| 346 | lsb_pos = self._lsb_lookup(self.start, self.size) |
| 347 | shift = (64 - self._msb_lookup(self.start) - self.size) |
| 348 | fmt = ">Q" |
| 349 | |
| 350 | field_len = max(msb_pos, lsb_pos) // 8 + 1 |
| 351 | |
| 352 | if pkt.wirelen is None: |
| 353 | pkt.wirelen = field_len |
| 354 | |
| 355 | pkt.wirelen = max(pkt.wirelen, field_len) |
| 356 | |
| 357 | fld_val = struct.unpack(fmt, (s + b"\x00" * 8)[:8])[0] >> shift |
| 358 | fld_val &= ((1 << self.size) - 1) |
| 359 | |
| 360 | if self._is_float_number(): |
| 361 | fld_val = struct.unpack(self.fmt, |
| 362 | struct.pack(self.fmt[0] + "I", fld_val))[0] |
| 363 | elif self._is_signed_number(): |
| 364 | fld_val = self._convert_to_signed(fld_val, self.size) |
| 365 | |
| 366 | return s, self.m2i(pkt, fld_val) |
| 367 | |
| 368 | def randval(self): |
| 369 | # type: () -> Union[RandBinFloat, RandFloat] |
nothing calls this directly
no test coverage detected