Create the default layer regarding fields_desc dict
(self)
| 711 | self.payload.clear_cache() |
| 712 | |
| 713 | def self_build(self): |
| 714 | # type: () -> bytes |
| 715 | """ |
| 716 | Create the default layer regarding fields_desc dict |
| 717 | """ |
| 718 | if self.raw_packet_cache is not None and \ |
| 719 | self.raw_packet_cache_fields is not None: |
| 720 | for fname, fval in self.raw_packet_cache_fields.items(): |
| 721 | fld, val = self.getfield_and_val(fname) |
| 722 | if self._raw_packet_cache_field_value(fld, val) != fval: |
| 723 | self.raw_packet_cache = None |
| 724 | self.raw_packet_cache_fields = None |
| 725 | self.wirelen = None |
| 726 | break |
| 727 | if self.raw_packet_cache is not None: |
| 728 | return self.raw_packet_cache |
| 729 | p = b"" |
| 730 | for f in self.fields_desc: |
| 731 | val = self.getfieldval(f.name) |
| 732 | if isinstance(val, RawVal): |
| 733 | p += bytes(val) |
| 734 | else: |
| 735 | try: |
| 736 | p = f.addfield(self, p, val) |
| 737 | except Exception as ex: |
| 738 | try: |
| 739 | ex.args = ( |
| 740 | "While building field '%s': " % f.name + |
| 741 | ex.args[0], |
| 742 | ) + ex.args[1:] |
| 743 | except (AttributeError, IndexError): |
| 744 | pass |
| 745 | raise ex |
| 746 | return p |
| 747 | |
| 748 | def do_build_payload(self): |
| 749 | # type: () -> bytes |
no test coverage detected