Prepare the cached fields of the fields_desc dict
(self, flist)
| 334 | self.fields[fname] = value[:] |
| 335 | |
| 336 | def prepare_cached_fields(self, flist): |
| 337 | # type: (Sequence[AnyField]) -> None |
| 338 | """ |
| 339 | Prepare the cached fields of the fields_desc dict |
| 340 | """ |
| 341 | |
| 342 | cls_name = self.__class__ |
| 343 | |
| 344 | # Fields cache initialization |
| 345 | if not flist: |
| 346 | return |
| 347 | |
| 348 | class_default_fields = dict() |
| 349 | class_default_fields_ref = list() |
| 350 | class_fieldtype = dict() |
| 351 | class_packetfields = list() |
| 352 | |
| 353 | # Fields initialization |
| 354 | for f in flist: |
| 355 | if isinstance(f, MultipleTypeField): |
| 356 | # Abort |
| 357 | self.class_dont_cache[cls_name] = True |
| 358 | self.do_init_fields(self.fields_desc) |
| 359 | return |
| 360 | |
| 361 | class_default_fields[f.name] = copy.deepcopy(f.default) |
| 362 | class_fieldtype[f.name] = f |
| 363 | if f.holds_packets: |
| 364 | class_packetfields.append(f) |
| 365 | |
| 366 | # Remember references |
| 367 | if isinstance(f.default, (list, dict, set, RandField, Packet)): |
| 368 | class_default_fields_ref.append(f.name) |
| 369 | |
| 370 | # Apply |
| 371 | Packet.class_default_fields_ref[cls_name] = class_default_fields_ref |
| 372 | Packet.class_fieldtype[cls_name] = class_fieldtype |
| 373 | Packet.class_packetfields[cls_name] = class_packetfields |
| 374 | # Last to avoid racing issues |
| 375 | Packet.class_default_fields[cls_name] = class_default_fields |
| 376 | |
| 377 | def dissection_done(self, pkt): |
| 378 | # type: (Packet) -> None |
no test coverage detected