88# scapy.contrib.status = loads
99
1010import struct
11+ from typing import Type
1112
1213from scapy .layers .inet import TCP , UDP
1314from scapy .layers .inet6 import IP6Field
1920 ShortField , X3BytesField , StrLenField , IPField ,
2021 FieldLenField , PacketListField , XIntField ,
2122 MultipleTypeField , FlagsField , IntField ,
22- XByteEnumField , BitScalingField )
23+ XByteEnumField , BitScalingField , LenField )
24+ from scapy .utils import hexdump
2325
2426
2527class SOMEIP (Packet ):
@@ -73,7 +75,7 @@ class SOMEIP(Packet):
7375 ],
7476 XShortField ("sub_id" , 0 ),
7577 ),
76- IntField ("len" , None ),
78+ LenField ("len" , None , fmt = ">I" , adjust = lambda x : x + 8 ),
7779 XShortField ("client_id" , 0 ),
7880 XShortField ("session_id" , 0 ),
7981 XByteField ("proto_ver" , PROTOCOL_VERSION ),
@@ -117,12 +119,10 @@ class SOMEIP(Packet):
117119 ConditionalField (
118120 BitField ("more_seg" , 0 , 1 ),
119121 lambda pkt : SOMEIP ._is_tp (pkt )), # noqa: E501
120- ConditionalField ( PacketListField (
122+ PacketListField (
121123 "data" , [Raw ()], Raw ,
122124 length_from = lambda pkt : pkt .len - (SOMEIP .LEN_OFFSET_TP if (SOMEIP ._is_tp (pkt ) and (pkt .len is None or pkt .len >= SOMEIP .LEN_OFFSET_TP )) else SOMEIP .LEN_OFFSET ), # noqa: E501
123- next_cls_cb = lambda pkt , lst , cur , remain :
124- SOMEIP .get_payload_cls_by_srv_id (pkt , lst , cur , remain )),
125- lambda pkt : SOMEIP ._is_tp (pkt )) # noqa: E501
125+ next_cls_cb = lambda pkt , lst , cur , remain : SOMEIP .get_payload_cls_by_srv_id (pkt , lst , cur , remain )) # noqa: E501
126126 ]
127127
128128 payload_cls_by_srv_id = dict () # To be customized
@@ -131,6 +131,10 @@ class SOMEIP(Packet):
131131 def get_payload_cls_by_srv_id (pkt , lst , cur , remain ):
132132 return SOMEIP .payload_cls_by_srv_id .get (pkt .srv_id , Raw )
133133
134+ def default_payload_class (self , payload ):
135+ # type: (bytes) -> Type[Packet]
136+ return SOMEIP
137+
134138 def post_build (self , pkt , pay ):
135139 length = self .len
136140 if length is None :
0 commit comments