(self, pkt, s, val)
| 294 | return self.fmt[-1] == "f" |
| 295 | |
| 296 | def addfield(self, pkt, s, val): |
| 297 | # type: (Packet, bytes, Optional[Union[int, float]]) -> bytes |
| 298 | if not isinstance(pkt, SignalPacket): |
| 299 | raise Scapy_Exception("Only use SignalFields in a SignalPacket") |
| 300 | |
| 301 | val = self.i2m(pkt, val) |
| 302 | |
| 303 | if self._is_little_endian(): |
| 304 | msb_pos = self.start + self.size - 1 |
| 305 | lsb_pos = self.start |
| 306 | shift = lsb_pos |
| 307 | fmt = "<Q" |
| 308 | else: |
| 309 | msb_pos = self.start |
| 310 | lsb_pos = self._lsb_lookup(self.start, self.size) |
| 311 | shift = (64 - self._msb_lookup(msb_pos) - self.size) |
| 312 | fmt = ">Q" |
| 313 | |
| 314 | field_len = max(msb_pos, lsb_pos) // 8 + 1 |
| 315 | if len(s) < field_len: |
| 316 | s += b"\x00" * (field_len - len(s)) |
| 317 | |
| 318 | if self._is_float_number(): |
| 319 | int_val = struct.unpack(self.fmt[0] + "I", |
| 320 | struct.pack(self.fmt, val))[0] # type: int |
| 321 | elif self._is_signed_number(): |
| 322 | int_val = self._convert_to_unsigned(int(val), self.size) |
| 323 | else: |
| 324 | int_val = cast(int, val) |
| 325 | |
| 326 | pkt_val = struct.unpack(fmt, (s + b"\x00" * 8)[:8])[0] |
| 327 | pkt_val |= int_val << shift |
| 328 | tmp_s = struct.pack(fmt, pkt_val) |
| 329 | return tmp_s[:len(s)] |
| 330 | |
| 331 | def getfield(self, pkt, s): |
| 332 | # type: (Packet, bytes) -> Tuple[bytes, Union[int, float]] |
nothing calls this directly
no test coverage detected