pypcapkit 1.0.3.post3__pp39-none-any.whl → 1.1.0.post1__pp39-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. pcapkit/__init__.py +1 -1
  2. pcapkit/const/pcapng/option_type.py +25 -1
  3. pcapkit/const/reg/apptype.py +25 -1
  4. pcapkit/corekit/fields/collections.py +4 -5
  5. pcapkit/corekit/fields/field.py +33 -8
  6. pcapkit/corekit/fields/ipaddress.py +0 -1
  7. pcapkit/corekit/fields/misc.py +14 -19
  8. pcapkit/corekit/fields/numbers.py +2 -3
  9. pcapkit/corekit/fields/strings.py +2 -3
  10. pcapkit/corekit/infoclass.py +59 -6
  11. pcapkit/corekit/protochain.py +8 -1
  12. pcapkit/foundation/registry/protocols.py +30 -51
  13. pcapkit/protocols/data/__init__.py +4 -4
  14. pcapkit/protocols/data/internet/__init__.py +4 -4
  15. pcapkit/protocols/data/internet/mh.py +4 -4
  16. pcapkit/protocols/data/transport/__init__.py +4 -4
  17. pcapkit/protocols/data/transport/tcp.py +4 -4
  18. pcapkit/protocols/internet/mh.py +20 -20
  19. pcapkit/protocols/protocol.py +3 -2
  20. pcapkit/protocols/schema/__init__.py +4 -4
  21. pcapkit/protocols/schema/application/httpv2.py +16 -29
  22. pcapkit/protocols/schema/internet/__init__.py +4 -4
  23. pcapkit/protocols/schema/internet/hip.py +62 -111
  24. pcapkit/protocols/schema/internet/hopopt.py +46 -48
  25. pcapkit/protocols/schema/internet/ipv4.py +36 -41
  26. pcapkit/protocols/schema/internet/ipv6_opts.py +48 -52
  27. pcapkit/protocols/schema/internet/ipv6_route.py +9 -20
  28. pcapkit/protocols/schema/internet/mh.py +49 -84
  29. pcapkit/protocols/schema/misc/pcapng.py +178 -195
  30. pcapkit/protocols/schema/schema.py +252 -53
  31. pcapkit/protocols/schema/transport/__init__.py +4 -4
  32. pcapkit/protocols/schema/transport/tcp.py +52 -83
  33. pcapkit/protocols/transport/tcp.py +14 -14
  34. pcapkit/vendor/pcapng/option_type.py +25 -1
  35. pcapkit/vendor/reg/apptype.py +25 -1
  36. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/METADATA +1 -1
  37. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/RECORD +41 -41
  38. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/LICENSE +0 -0
  39. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/WHEEL +0 -0
  40. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/entry_points.txt +0 -0
  41. {pypcapkit-1.0.3.post3.dist-info → pypcapkit-1.1.0.post1.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,6 @@
2
2
  # mypy: disable-error-code=assignment
3
3
  """header schema for mobility header"""
4
4
 
5
- import collections
6
5
  import datetime
7
6
  import math
8
7
  from typing import TYPE_CHECKING
@@ -60,7 +59,7 @@ from pcapkit.corekit.fields.misc import (ConditionalField, ForwardMatchField, Pa
60
59
  from pcapkit.corekit.fields.numbers import (EnumField, UInt8Field, UInt16Field, UInt32Field,
61
60
  UInt64Field)
62
61
  from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField, StringField
63
- from pcapkit.protocols.schema.schema import Schema, schema_final
62
+ from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
64
63
  from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
65
64
 
66
65
  __all__ = [
@@ -72,8 +71,8 @@ __all__ = [
72
71
  'BindingErrorMessage',
73
72
 
74
73
  'Option',
75
- 'UnassignedOption', 'PadOption', 'BindRefreshAdviceOption', 'AlternateCareofAddressOption',
76
- 'NonceIndicesOption', 'BindingAuthorizationDataOption', 'MobileNetworkPrefixOption',
74
+ 'UnassignedOption', 'PadOption', 'BindingRefreshAdviceOption', 'AlternateCareofAddressOption',
75
+ 'NonceIndicesOption', 'AuthorizationDataOption', 'MobileNetworkPrefixOption',
77
76
  'LinkLayerAddressOption', 'MNIDOption', 'AuthOption', 'MesgIDOption', 'CGAParametersRequestOption',
78
77
  'CGAParametersOption', 'SignatureOption', 'PermanentHomeKeygenTokenOption', 'CareofTestInitOption',
79
78
  'CareofTestOption',
@@ -87,7 +86,7 @@ __all__ = [
87
86
  if TYPE_CHECKING:
88
87
  from datetime import datetime as dt_type
89
88
  from ipaddress import IPv6Address
90
- from typing import Any, DefaultDict, Type
89
+ from typing import Any
91
90
 
92
91
  from pcapkit.corekit.fields.field import _Field as Field
93
92
  from pcapkit.protocols.protocol import Protocol
@@ -120,29 +119,6 @@ if SPHINX_TYPE_CHECKING:
120
119
  K: 'int'
121
120
 
122
121
 
123
- def mh_opt_registry() -> 'DefaultDict[Enum_Option | int, Type[Option]]':
124
- """Registry for MH type-specific message :attr:`~Packet.options`."""
125
- return collections.defaultdict(lambda: UnassignedOption, {
126
- Enum_Option.Pad1: PadOption,
127
- Enum_Option.PadN: PadOption,
128
- Enum_Option.Binding_Refresh_Advice: BindingAuthorizationDataOption,
129
- Enum_Option.Alternate_Care_of_Address: AlternateCareofAddressOption,
130
- Enum_Option.Nonce_Indices: NonceIndicesOption,
131
- Enum_Option.Authorization_Data: BindingAuthorizationDataOption,
132
- Enum_Option.Mobile_Network_Prefix_Option: MobileNetworkPrefixOption,
133
- Enum_Option.Mobility_Header_Link_Layer_Address_option: LinkLayerAddressOption,
134
- Enum_Option.MN_ID_OPTION_TYPE: MNIDOption,
135
- Enum_Option.AUTH_OPTION_TYPE: AuthOption,
136
- Enum_Option.MESG_ID_OPTION_TYPE: MesgIDOption,
137
- Enum_Option.CGA_Parameters_Request: CGAParametersRequestOption,
138
- Enum_Option.CGA_Parameters: CGAParametersOption,
139
- Enum_Option.Signature: SignatureOption,
140
- Enum_Option.Permanent_Home_Keygen_Token: PermanentHomeKeygenTokenOption,
141
- Enum_Option.Care_of_Test_Init: CareofTestInitOption,
142
- Enum_Option.Care_of_Test: CareofTestOption,
143
- })
144
-
145
-
146
122
  def mh_data_selector(pkt: 'dict[str, Any]') -> 'Field':
147
123
  """Selector function for :attr:`MH.data` field.
148
124
 
@@ -154,14 +130,10 @@ def mh_data_selector(pkt: 'dict[str, Any]') -> 'Field':
154
130
  wrapped :class:`~pcapkit.protocols.schema.internet.mh.Packet`
155
131
  subclass instance.
156
132
 
157
- See Also:
158
- * :class:`pcapkit.const.mh.packet.Packet`
159
- * :data:`ppcapkit.protocols.schema.internet.mh.MAP_MH_DATA`
160
-
161
133
  """
162
134
  type = pkt['type'] # type: Enum_Packet
163
135
  length = pkt['length'] * 8 + 2
164
- schema = MAP_MH_DATA[type]
136
+ schema = Packet.registry[type]
165
137
  return SchemaField(length=length, schema=schema)
166
138
 
167
139
 
@@ -208,9 +180,11 @@ class MH(Schema):
208
180
  chksum: 'bytes', data: 'Packet | bytes', payload: 'bytes | Protocol | Schema') -> 'None': ...
209
181
 
210
182
 
211
- class Option(Schema):
183
+ class Option(EnumSchema[Enum_Option]):
212
184
  """Header schema for MH options."""
213
185
 
186
+ __default__ = lambda: UnassignedOption
187
+
214
188
  #: Option type.
215
189
  type: 'Enum_Option' = EnumField(length=1, namespace=Enum_Option)
216
190
  #: Option length (excl. type and length fields), conditional in case of
@@ -248,7 +222,8 @@ class UnassignedOption(Option):
248
222
 
249
223
 
250
224
  @schema_final
251
- class PadOption(Option):
225
+ class PadOption(Option, code=[Enum_Option.Pad1,
226
+ Enum_Option.PadN]):
252
227
  """Header schema for MH padding options."""
253
228
 
254
229
  #: Option data.
@@ -259,7 +234,7 @@ class PadOption(Option):
259
234
 
260
235
 
261
236
  @schema_final
262
- class BindRefreshAdviceOption(Option):
237
+ class BindingRefreshAdviceOption(Option, code=Enum_Option.Binding_Refresh_Advice):
263
238
  """Header schema for MH binding refresh advice options."""
264
239
 
265
240
  #: Refresh interval.
@@ -270,7 +245,7 @@ class BindRefreshAdviceOption(Option):
270
245
 
271
246
 
272
247
  @schema_final
273
- class AlternateCareofAddressOption(Option):
248
+ class AlternateCareofAddressOption(Option, code=Enum_Option.Alternate_Care_of_Address):
274
249
  """Header schema for MH alternate care-of address options."""
275
250
 
276
251
  #: Alternate care-of address.
@@ -281,7 +256,7 @@ class AlternateCareofAddressOption(Option):
281
256
 
282
257
 
283
258
  @schema_final
284
- class NonceIndicesOption(Option):
259
+ class NonceIndicesOption(Option, code=Enum_Option.Nonce_Indices):
285
260
  """Header schema for MH nonce indices options."""
286
261
 
287
262
  #: Home nonce index.
@@ -294,7 +269,7 @@ class NonceIndicesOption(Option):
294
269
 
295
270
 
296
271
  @schema_final
297
- class BindingAuthorizationDataOption(Option):
272
+ class AuthorizationDataOption(Option, code=Enum_Option.Authorization_Data):
298
273
  """Header schema for MH binding authorization data options."""
299
274
 
300
275
  #: Authenticator.
@@ -305,7 +280,7 @@ class BindingAuthorizationDataOption(Option):
305
280
 
306
281
 
307
282
  @schema_final
308
- class MobileNetworkPrefixOption(Option):
283
+ class MobileNetworkPrefixOption(Option, code=Enum_Option.Mobile_Network_Prefix_Option):
309
284
  """Header schema for MH mobile network prefix options."""
310
285
 
311
286
  #: Reserved.
@@ -320,7 +295,7 @@ class MobileNetworkPrefixOption(Option):
320
295
 
321
296
 
322
297
  @schema_final
323
- class LinkLayerAddressOption(Option):
298
+ class LinkLayerAddressOption(Option, code=Enum_Option.Mobility_Header_Link_Layer_Address_option):
324
299
  """Header schema for MH link-layer address (MH-LLA) options."""
325
300
 
326
301
  #: Option code.
@@ -333,7 +308,7 @@ class LinkLayerAddressOption(Option):
333
308
 
334
309
 
335
310
  @schema_final
336
- class MNIDOption(Option):
311
+ class MNIDOption(Option, code=Enum_Option.MN_ID_OPTION_TYPE):
337
312
  """Header schema for MH mobile node identifier (MNID) options."""
338
313
 
339
314
  #: Subtype.
@@ -346,7 +321,7 @@ class MNIDOption(Option):
346
321
 
347
322
 
348
323
  @schema_final
349
- class AuthOption(Option):
324
+ class AuthOption(Option, code=Enum_Option.AUTH_OPTION_TYPE):
350
325
  """Header schema for Mobility Message Authentication options."""
351
326
 
352
327
  #: Subtype.
@@ -361,7 +336,7 @@ class AuthOption(Option):
361
336
 
362
337
 
363
338
  @schema_final
364
- class MesgIDOption(Option):
339
+ class MesgIDOption(Option, code=Enum_Option.MESG_ID_OPTION_TYPE):
365
340
  """Header schema for Mobility Message Replay Protection options."""
366
341
 
367
342
  #: Timestamp (seconds since January 1st, 1970, c.f., :rfc:`1305`).
@@ -398,16 +373,18 @@ class MesgIDOption(Option):
398
373
 
399
374
 
400
375
  @schema_final
401
- class CGAParametersRequestOption(Option):
376
+ class CGAParametersRequestOption(Option, code=Enum_Option.CGA_Parameters_Request):
402
377
  """Header schema for CGA Parameters Request options."""
403
378
 
404
379
  if TYPE_CHECKING:
405
380
  def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
406
381
 
407
382
 
408
- class CGAExtension(Schema):
383
+ class CGAExtension(EnumSchema[Enum_CGAExtension]):
409
384
  """Header schema for CGA extensions."""
410
385
 
386
+ __default__ = lambda: UnknownExtension
387
+
411
388
  #: Extension type.
412
389
  type: 'Enum_CGAExtension' = EnumField(length=2, namespace=Enum_CGAExtension)
413
390
  #: Extension data length.
@@ -426,7 +403,7 @@ class UnknownExtension(CGAExtension):
426
403
 
427
404
 
428
405
  @schema_final
429
- class MultiPrefixExtension(CGAExtension):
406
+ class MultiPrefixExtension(CGAExtension, code=Enum_CGAExtension.Multi_Prefix):
430
407
  """Header schema for Multi-Prefix CGA extensions."""
431
408
 
432
409
  #: Flags.
@@ -464,9 +441,7 @@ class CGAParameter(Schema):
464
441
  length=lambda pkt: pkt['length'] - 25 - len(pkt['public_key']),
465
442
  base_schema=CGAExtension,
466
443
  type_name='type',
467
- registry=collections.defaultdict(lambda: UnknownExtension, { # type: ignore[arg-type,return-value]
468
- Enum_CGAExtension.Multi_Prefix: MultiPrefixExtension,
469
- }),
444
+ registry=CGAExtension.registry,
470
445
  eool=None,
471
446
  )
472
447
 
@@ -476,7 +451,7 @@ class CGAParameter(Schema):
476
451
 
477
452
 
478
453
  @schema_final
479
- class CGAParametersOption(Option):
454
+ class CGAParametersOption(Option, code=Enum_Option.CGA_Parameters):
480
455
  """Header schema for CGA Parameters options."""
481
456
 
482
457
  #: CGA parameters, c.f., :rfc:`3972`.
@@ -490,7 +465,7 @@ class CGAParametersOption(Option):
490
465
 
491
466
 
492
467
  @schema_final
493
- class SignatureOption(Option):
468
+ class SignatureOption(Option, code=Enum_Option.Signature):
494
469
  """Header schema for MH Signature options."""
495
470
 
496
471
  #: Signature.
@@ -501,7 +476,7 @@ class SignatureOption(Option):
501
476
 
502
477
 
503
478
  @schema_final
504
- class PermanentHomeKeygenTokenOption(Option):
479
+ class PermanentHomeKeygenTokenOption(Option, code=Enum_Option.Permanent_Home_Keygen_Token):
505
480
  """Header schema for Permanent Home Keygen Token options."""
506
481
 
507
482
  #: Permanent home keygen token.
@@ -512,7 +487,7 @@ class PermanentHomeKeygenTokenOption(Option):
512
487
 
513
488
 
514
489
  @schema_final
515
- class CareofTestInitOption(Option):
490
+ class CareofTestInitOption(Option, code=Enum_Option.Care_of_Test_Init):
516
491
  """Header schema for MH Care-of Test Init options."""
517
492
 
518
493
  if TYPE_CHECKING:
@@ -520,7 +495,7 @@ class CareofTestInitOption(Option):
520
495
 
521
496
 
522
497
  @schema_final
523
- class CareofTestOption(Option):
498
+ class CareofTestOption(Option, code=Enum_Option.Care_of_Test):
524
499
  """Header schema for MH Care-of Test options."""
525
500
 
526
501
  #: Care-of keygen token.
@@ -533,9 +508,11 @@ class CareofTestOption(Option):
533
508
  # TODO: Implement other options.
534
509
 
535
510
 
536
- class Packet(Schema):
511
+ class Packet(EnumSchema[Enum_Packet]):
537
512
  """Header schema for MH packet data."""
538
513
 
514
+ __default__ = lambda: UnknownMessage
515
+
539
516
 
540
517
  @schema_final
541
518
  class UnknownMessage(Packet):
@@ -549,7 +526,7 @@ class UnknownMessage(Packet):
549
526
 
550
527
 
551
528
  @schema_final
552
- class BindingRefreshRequestMessage(Packet):
529
+ class BindingRefreshRequestMessage(Packet, code=Enum_Packet.Binding_Refresh_Request):
553
530
  """Header schema for MH Binding Refresh Request (BRR) message."""
554
531
 
555
532
  #: Reserved.
@@ -559,7 +536,7 @@ class BindingRefreshRequestMessage(Packet):
559
536
  length=lambda pkt: pkt['__length__'],
560
537
  base_schema=Option,
561
538
  type_name='type',
562
- registry=mh_opt_registry(),
539
+ registry=Option.registry,
563
540
  eool=None,
564
541
  )
565
542
 
@@ -568,7 +545,7 @@ class BindingRefreshRequestMessage(Packet):
568
545
 
569
546
 
570
547
  @schema_final
571
- class HomeTestInitMessage(Packet):
548
+ class HomeTestInitMessage(Packet, code=Enum_Packet.Home_Test_Init):
572
549
  """Header schema for MH Home Test Init (HoTI) message."""
573
550
 
574
551
  #: Reserved.
@@ -580,7 +557,7 @@ class HomeTestInitMessage(Packet):
580
557
  length=lambda pkt: pkt['__length__'],
581
558
  base_schema=Option,
582
559
  type_name='type',
583
- registry=mh_opt_registry(),
560
+ registry=Option.registry,
584
561
  eool=None,
585
562
  )
586
563
 
@@ -589,7 +566,7 @@ class HomeTestInitMessage(Packet):
589
566
 
590
567
 
591
568
  @schema_final
592
- class CareofTestInitMessage(Packet):
569
+ class CareofTestInitMessage(Packet, code=Enum_Packet.Care_of_Test_Init):
593
570
  """Header schema for MH Care-of Test Init (CoTI) messages."""
594
571
 
595
572
  #: Reserved.
@@ -601,7 +578,7 @@ class CareofTestInitMessage(Packet):
601
578
  length=lambda pkt: pkt['__length__'],
602
579
  base_schema=Option,
603
580
  type_name='type',
604
- registry=mh_opt_registry(),
581
+ registry=Option.registry,
605
582
  eool=None,
606
583
  )
607
584
 
@@ -610,7 +587,7 @@ class CareofTestInitMessage(Packet):
610
587
 
611
588
 
612
589
  @schema_final
613
- class HomeTestMessage(Packet):
590
+ class HomeTestMessage(Packet, code=Enum_Packet.Home_Test):
614
591
  """Header schema for MH Home Test (HoT) message."""
615
592
 
616
593
  #: Home nonce index.
@@ -624,7 +601,7 @@ class HomeTestMessage(Packet):
624
601
  length=lambda pkt: pkt['__length__'],
625
602
  base_schema=Option,
626
603
  type_name='type',
627
- registry=mh_opt_registry(),
604
+ registry=Option.registry,
628
605
  eool=None,
629
606
  )
630
607
 
@@ -634,7 +611,7 @@ class HomeTestMessage(Packet):
634
611
 
635
612
 
636
613
  @schema_final
637
- class CareofTestMessage(Packet):
614
+ class CareofTestMessage(Packet, code=Enum_Packet.Care_of_Test):
638
615
  """Header schema for MH Care-of Test (CoT) message."""
639
616
 
640
617
  #: Care-of nonce index.
@@ -648,7 +625,7 @@ class CareofTestMessage(Packet):
648
625
  length=lambda pkt: pkt['__length__'],
649
626
  base_schema=Option,
650
627
  type_name='type',
651
- registry=mh_opt_registry(),
628
+ registry=Option.registry,
652
629
  eool=None,
653
630
  )
654
631
 
@@ -658,7 +635,7 @@ class CareofTestMessage(Packet):
658
635
 
659
636
 
660
637
  @schema_final
661
- class BindingUpdateMessage(Packet):
638
+ class BindingUpdateMessage(Packet, code=Enum_Packet.Binding_Update):
662
639
  """Header schema for MH Binding Update (BU) messages."""
663
640
 
664
641
  #: Sequence number.
@@ -677,7 +654,7 @@ class BindingUpdateMessage(Packet):
677
654
  length=lambda pkt: pkt['__length__'],
678
655
  base_schema=Option,
679
656
  type_name='type',
680
- registry=mh_opt_registry(),
657
+ registry=Option.registry,
681
658
  eool=None,
682
659
  )
683
660
 
@@ -687,7 +664,7 @@ class BindingUpdateMessage(Packet):
687
664
 
688
665
 
689
666
  @schema_final
690
- class BindingAcknowledgementMessage(Packet):
667
+ class BindingAcknowledgementMessage(Packet, code=Enum_Packet.Binding_Acknowledgement):
691
668
  """Header schema for MH Binding Acknowledgement (BA) messages."""
692
669
 
693
670
  #: Status.
@@ -705,7 +682,7 @@ class BindingAcknowledgementMessage(Packet):
705
682
  length=lambda pkt: pkt['__length__'],
706
683
  base_schema=Option,
707
684
  type_name='type',
708
- registry=mh_opt_registry(),
685
+ registry=Option.registry,
709
686
  eool=None,
710
687
  )
711
688
 
@@ -715,7 +692,7 @@ class BindingAcknowledgementMessage(Packet):
715
692
 
716
693
 
717
694
  @schema_final
718
- class BindingErrorMessage(Packet):
695
+ class BindingErrorMessage(Packet, code=Enum_Packet.Binding_Error):
719
696
  """Header schema for MH Binding Error (BE) messages."""
720
697
 
721
698
  #: Status.
@@ -729,7 +706,7 @@ class BindingErrorMessage(Packet):
729
706
  length=lambda pkt: pkt['__length__'],
730
707
  base_schema=Option,
731
708
  type_name='type',
732
- registry=mh_opt_registry(),
709
+ registry=Option.registry,
733
710
  eool=None,
734
711
  )
735
712
 
@@ -739,15 +716,3 @@ class BindingErrorMessage(Packet):
739
716
 
740
717
 
741
718
  # TODO: Implement other message types.
742
-
743
- #: DefaultDict[Enum_Packet, Type[Packet]]: Mapping of MH message type numbers to schemas.
744
- MAP_MH_DATA = collections.defaultdict(lambda: UnknownMessage, {
745
- Enum_Packet.Binding_Refresh_Request: BindingRefreshRequestMessage,
746
- Enum_Packet.Home_Test_Init: HomeTestInitMessage,
747
- Enum_Packet.Care_of_Test_Init: CareofTestInitMessage,
748
- Enum_Packet.Home_Test: HomeTestMessage,
749
- Enum_Packet.Care_of_Test: CareofTestMessage,
750
- Enum_Packet.Binding_Update: BindingUpdateMessage,
751
- Enum_Packet.Binding_Acknowledgement: BindingAcknowledgementMessage,
752
- Enum_Packet.Binding_Error: BindingErrorMessage,
753
- }) # type: DefaultDict[Enum_Packet | int, Type[Packet]]