MCPcopy Index your code
hub / github.com/secdev/scapy / prepare_cached_fields

Method prepare_cached_fields

scapy/packet.py:336–375  ·  view source on GitHub ↗

Prepare the cached fields of the fields_desc dict

(self, flist)

Source from the content-addressed store, hash-verified

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

Callers 1

do_init_cached_fieldsMethod · 0.95

Calls 2

do_init_fieldsMethod · 0.95
appendMethod · 0.45

Tested by

no test coverage detected