mirror of
https://github.com/espressif/openthread.git
synced 2026-08-08 19:57:46 +00:00
[style] apply google python style guide (#4501)
This commit applies and enforces Google's python style for tests.
This commit is contained in:
@@ -116,7 +116,16 @@ class LowpanIPHC:
|
||||
|
||||
def __repr__(self):
|
||||
return "LowpanIPHC(tf={}, nh={}, hlim={}, cid={}, sac={}, sam={}, m={}, dac={}, dam={})".format(
|
||||
self.tf, self.nh, self.hlim, self.cid, self.sac, self.sam, self.m, self.dac, self.dam, )
|
||||
self.tf,
|
||||
self.nh,
|
||||
self.hlim,
|
||||
self.cid,
|
||||
self.sac,
|
||||
self.sam,
|
||||
self.m,
|
||||
self.dac,
|
||||
self.dam,
|
||||
)
|
||||
|
||||
|
||||
class LowpanNHC:
|
||||
@@ -201,7 +210,6 @@ class LowpanUDPHC:
|
||||
|
||||
|
||||
class LowpanHopByHopFactory:
|
||||
|
||||
""" Factory that produces HopByHop extension header. """
|
||||
|
||||
def __init__(self, hop_by_hop_options_factory):
|
||||
@@ -213,8 +221,7 @@ class LowpanHopByHopFactory:
|
||||
ext_header_data = data.read(ext_header_length)
|
||||
|
||||
options = self._hop_by_hop_options_factory.parse(
|
||||
io.BytesIO(ext_header_data), message_info
|
||||
)
|
||||
io.BytesIO(ext_header_data), message_info)
|
||||
|
||||
ext_header = ipv6.HopByHop(next_header, options)
|
||||
|
||||
@@ -224,7 +231,6 @@ class LowpanHopByHopFactory:
|
||||
|
||||
|
||||
class LowpanExtensionHeadersFactory:
|
||||
|
||||
""" Factory that produces extension headers. """
|
||||
|
||||
NHC_NH_INLINE = 0
|
||||
@@ -232,8 +238,7 @@ class LowpanExtensionHeadersFactory:
|
||||
|
||||
def __init__(self, ext_headers_factories):
|
||||
self._ext_headers_factories = (
|
||||
ext_headers_factories if ext_headers_factories is not None else {}
|
||||
)
|
||||
ext_headers_factories if ext_headers_factories is not None else {})
|
||||
|
||||
def _decompress_nh(self, hc, data):
|
||||
if hc.nh == self.NHC_NH_INLINE:
|
||||
@@ -248,10 +253,8 @@ class LowpanExtensionHeadersFactory:
|
||||
|
||||
except BaseException:
|
||||
raise RuntimeError(
|
||||
"Could not find an extension header factory for the EID type: {}".format(
|
||||
eid
|
||||
)
|
||||
)
|
||||
"Could not find an extension header factory for the EID type: {}"
|
||||
.format(eid))
|
||||
|
||||
def parse(self, data, message_info):
|
||||
nhc = LowpanNHC.from_bytes(bytearray(data.read(1)))
|
||||
@@ -264,7 +267,6 @@ class LowpanExtensionHeadersFactory:
|
||||
|
||||
|
||||
class LowpanUdpHeaderFactory:
|
||||
|
||||
""" Factory producing UDP header. """
|
||||
|
||||
UDP_HC_C_INLINE = 0
|
||||
@@ -317,6 +319,7 @@ class LowpanUdpHeaderFactory:
|
||||
|
||||
|
||||
class Context:
|
||||
|
||||
def __init__(self, prefix, prefix_length=None):
|
||||
if isinstance(prefix, str):
|
||||
prefix, prefix_length = prefix.split("/")
|
||||
@@ -329,19 +332,16 @@ class Context:
|
||||
|
||||
elif isinstance(prefix, bytearray):
|
||||
self._prefix = prefix
|
||||
self._prefix_length = (
|
||||
prefix_length
|
||||
if prefix_length is not None
|
||||
else len(self._prefix) * 8
|
||||
)
|
||||
self._prefix_length = (prefix_length if prefix_length is not None
|
||||
else len(self._prefix) * 8)
|
||||
|
||||
@property
|
||||
def prefix(self):
|
||||
return self._prefix[: self.prefix_length_all_bytes]
|
||||
return self._prefix[:self.prefix_length_all_bytes]
|
||||
|
||||
@property
|
||||
def prefix_full_bytes(self):
|
||||
return self._prefix[: self.prefix_length_full_bytes]
|
||||
return self._prefix[:self.prefix_length_full_bytes]
|
||||
|
||||
@property
|
||||
def prefix_length(self):
|
||||
@@ -364,16 +364,13 @@ class Context:
|
||||
|
||||
|
||||
class ContextManager(dict):
|
||||
|
||||
""" Class representing Context Manager. """
|
||||
|
||||
def __check_index(self, index):
|
||||
if index < 0 or index > 15:
|
||||
raise IndexError(
|
||||
"Invalid index: {}. Valid index is in range [0, 15]".format(
|
||||
index
|
||||
)
|
||||
)
|
||||
index))
|
||||
|
||||
def __check_type(self, value):
|
||||
if not isinstance(value, Context):
|
||||
@@ -392,12 +389,10 @@ class ContextManager(dict):
|
||||
|
||||
|
||||
class LowpanIpv6HeaderFactory:
|
||||
|
||||
""" Factory that produces IPv6 header. """
|
||||
|
||||
IPV6_LINKLOCAL_PREFIX = bytearray(
|
||||
[0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
|
||||
)
|
||||
[0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
|
||||
|
||||
SHORT_ADDR_PADDING_BYTES = bytearray([0x00, 0x00, 0x00, 0xff, 0xfe, 0x00])
|
||||
|
||||
@@ -551,11 +546,8 @@ class LowpanIpv6HeaderFactory:
|
||||
return self.IPV6_LINKLOCAL_PREFIX + bytearray(data.read(8))
|
||||
|
||||
elif iphc.sam == self.IPHC_SAM_16B:
|
||||
return (
|
||||
self.IPV6_LINKLOCAL_PREFIX
|
||||
+ self.SHORT_ADDR_PADDING_BYTES
|
||||
+ bytearray(data.read(2))
|
||||
)
|
||||
return (self.IPV6_LINKLOCAL_PREFIX + self.SHORT_ADDR_PADDING_BYTES +
|
||||
bytearray(data.read(2)))
|
||||
|
||||
elif iphc.sam == self.IPHC_SAM_ELIDED:
|
||||
return self.IPV6_LINKLOCAL_PREFIX + src_mac_addr.convert_to_iid()
|
||||
@@ -596,11 +588,9 @@ class LowpanIpv6HeaderFactory:
|
||||
address_overlapping_byte = address_bytes[-required_bytes]
|
||||
|
||||
overlapping_byte = prefix_overlapping_byte & ~(
|
||||
0xff >> prefix_length_rest_bits
|
||||
)
|
||||
0xff >> prefix_length_rest_bits)
|
||||
overlapping_byte |= address_overlapping_byte & (
|
||||
0xff >> prefix_length_rest_bits
|
||||
)
|
||||
0xff >> prefix_length_rest_bits)
|
||||
|
||||
src_addr += bytearray([overlapping_byte])
|
||||
required_bytes -= 1
|
||||
@@ -612,11 +602,8 @@ class LowpanIpv6HeaderFactory:
|
||||
required_bytes -= prefix_length_all_bytes
|
||||
required_bytes -= len(address_bytes)
|
||||
|
||||
src_addr = (
|
||||
prefix[:prefix_length_all_bytes]
|
||||
+ bytearray([0x00] * required_bytes)
|
||||
+ address_bytes
|
||||
)
|
||||
src_addr = (prefix[:prefix_length_all_bytes] +
|
||||
bytearray([0x00] * required_bytes) + address_bytes)
|
||||
|
||||
return src_addr
|
||||
|
||||
@@ -636,8 +623,7 @@ class LowpanIpv6HeaderFactory:
|
||||
elif iphc.sam == self.IPHC_SAM_16B:
|
||||
context = self._context_manager[sci]
|
||||
address_bytes = self.SHORT_ADDR_PADDING_BYTES + bytearray(
|
||||
data.read(2)
|
||||
)
|
||||
data.read(2))
|
||||
|
||||
return self._merge_prefix_with_address(
|
||||
prefix=context.prefix,
|
||||
@@ -656,14 +642,11 @@ class LowpanIpv6HeaderFactory:
|
||||
|
||||
def _decompress_src_addr(self, iphc, src_mac_addr, sci, data):
|
||||
if iphc.sac == self.IPHC_SAC_STATELESS:
|
||||
return self._decompress_src_addr_stateless(
|
||||
iphc, src_mac_addr, data
|
||||
)
|
||||
return self._decompress_src_addr_stateless(iphc, src_mac_addr, data)
|
||||
|
||||
elif iphc.sac == self.IPHC_SAC_STATEFUL:
|
||||
return self._decompress_src_addr_stateful(
|
||||
iphc, src_mac_addr, sci, data
|
||||
)
|
||||
return self._decompress_src_addr_stateful(iphc, src_mac_addr, sci,
|
||||
data)
|
||||
|
||||
def _decompress_unicast_dst_addr_stateless(self, iphc, dst_mac_addr, data):
|
||||
if iphc.dam == self.IPHC_DAM_128B:
|
||||
@@ -673,18 +656,14 @@ class LowpanIpv6HeaderFactory:
|
||||
return self.IPV6_LINKLOCAL_PREFIX + bytearray(data.read(8))
|
||||
|
||||
elif iphc.dam == self.IPHC_DAM_16B:
|
||||
return (
|
||||
self.IPV6_LINKLOCAL_PREFIX
|
||||
+ self.SHORT_ADDR_PADDING_BYTES
|
||||
+ bytearray(data.read(2))
|
||||
)
|
||||
return (self.IPV6_LINKLOCAL_PREFIX + self.SHORT_ADDR_PADDING_BYTES +
|
||||
bytearray(data.read(2)))
|
||||
|
||||
elif iphc.dam == self.IPHC_DAM_ELIDED:
|
||||
return self.IPV6_LINKLOCAL_PREFIX + dst_mac_addr.convert_to_iid()
|
||||
|
||||
def _decompress_unicast_dst_addr_stateful(
|
||||
self, iphc, dst_mac_addr, dci, data
|
||||
):
|
||||
def _decompress_unicast_dst_addr_stateful(self, iphc, dst_mac_addr, dci,
|
||||
data):
|
||||
if iphc.dam == self.IPHC_DAM_128B:
|
||||
raise RuntimeError("Reserved")
|
||||
|
||||
@@ -700,8 +679,7 @@ class LowpanIpv6HeaderFactory:
|
||||
elif iphc.dam == self.IPHC_DAM_16B:
|
||||
context = self._context_manager[dci]
|
||||
address_bytes = self.SHORT_ADDR_PADDING_BYTES + bytearray(
|
||||
data.read(2)
|
||||
)
|
||||
data.read(2))
|
||||
|
||||
return self._merge_prefix_with_address(
|
||||
prefix=context.prefix,
|
||||
@@ -721,13 +699,11 @@ class LowpanIpv6HeaderFactory:
|
||||
def _decompress_unicast_dst_addr(self, iphc, dst_mac_addr, dci, data):
|
||||
if iphc.dac == self.IPHC_DAC_STATELESS:
|
||||
return self._decompress_unicast_dst_addr_stateless(
|
||||
iphc, dst_mac_addr, data
|
||||
)
|
||||
iphc, dst_mac_addr, data)
|
||||
|
||||
elif iphc.dac == self.IPHC_DAC_STATEFUL:
|
||||
return self._decompress_unicast_dst_addr_stateful(
|
||||
iphc, dst_mac_addr, dci, data
|
||||
)
|
||||
iphc, dst_mac_addr, dci, data)
|
||||
|
||||
def _decompress_multicast_dst_addr_stateless(self, iphc, data):
|
||||
if iphc.dam == self.IPHC_DAM_128B:
|
||||
@@ -735,24 +711,17 @@ class LowpanIpv6HeaderFactory:
|
||||
|
||||
elif iphc.dam == self.IPHC_DAM_48B:
|
||||
addr48b = bytearray(data.read(6))
|
||||
return (
|
||||
bytearray([0xff, addr48b[0]])
|
||||
+ bytearray([0x00] * 9)
|
||||
+ addr48b[1:]
|
||||
)
|
||||
return (bytearray([0xff, addr48b[0]]) + bytearray([0x00] * 9) +
|
||||
addr48b[1:])
|
||||
|
||||
elif iphc.dam == self.IPHC_DAM_32B:
|
||||
addr32b = bytearray(data.read(4))
|
||||
return (
|
||||
bytearray([0xff, addr32b[0]])
|
||||
+ bytearray([0x00] * 11)
|
||||
+ addr32b[1:]
|
||||
)
|
||||
return (bytearray([0xff, addr32b[0]]) + bytearray([0x00] * 11) +
|
||||
addr32b[1:])
|
||||
|
||||
elif iphc.dam == self.IPHC_DAM_8B:
|
||||
return (
|
||||
bytearray([0xff, 0x02]) + bytearray([0x00] * 13) + data.read(1)
|
||||
)
|
||||
return (bytearray([0xff, 0x02]) + bytearray([0x00] * 13) +
|
||||
data.read(1))
|
||||
|
||||
def _decompress_multicast_dst_addr_stateful(self, iphc, dci, data):
|
||||
if iphc.dam == self.IPHC_M_DAM_00:
|
||||
@@ -770,13 +739,8 @@ class LowpanIpv6HeaderFactory:
|
||||
if missing_bytes > 0:
|
||||
prefix += bytearray([0x00] * missing_bytes)
|
||||
|
||||
return (
|
||||
bytearray([0xff])
|
||||
+ addr48b[:2]
|
||||
+ bytearray([prefix_length])
|
||||
+ prefix
|
||||
+ addr48b[2:]
|
||||
)
|
||||
return (bytearray([0xff]) + addr48b[:2] +
|
||||
bytearray([prefix_length]) + prefix + addr48b[2:])
|
||||
|
||||
elif iphc.dam == self.IPHC_M_DAM_01:
|
||||
raise RuntimeError("Reserved")
|
||||
@@ -792,15 +756,12 @@ class LowpanIpv6HeaderFactory:
|
||||
return self._decompress_multicast_dst_addr_stateless(iphc, data)
|
||||
|
||||
elif iphc.dac == self.IPHC_DAC_STATEFUL:
|
||||
return self._decompress_multicast_dst_addr_stateful(
|
||||
iphc, dci, data
|
||||
)
|
||||
return self._decompress_multicast_dst_addr_stateful(iphc, dci, data)
|
||||
|
||||
def _decompress_dst_addr(self, iphc, dst_mac_addr, dci, data):
|
||||
if iphc.m == self.IPHC_M_NO:
|
||||
return self._decompress_unicast_dst_addr(
|
||||
iphc, dst_mac_addr, dci, data
|
||||
)
|
||||
return self._decompress_unicast_dst_addr(iphc, dst_mac_addr, dci,
|
||||
data)
|
||||
|
||||
elif iphc.m == self.IPHC_M_YES:
|
||||
return self._decompress_multicast_dst_addr(iphc, dci, data)
|
||||
@@ -819,17 +780,15 @@ class LowpanIpv6HeaderFactory:
|
||||
|
||||
hop_limit = self._decompress_hlim(iphc, data)
|
||||
|
||||
src_address = self._decompress_src_addr(
|
||||
iphc, message_info.source_mac_address, sci, data
|
||||
)
|
||||
src_address = self._decompress_src_addr(iphc,
|
||||
message_info.source_mac_address,
|
||||
sci, data)
|
||||
|
||||
dst_address = self._decompress_dst_addr(
|
||||
iphc, message_info.destination_mac_address, dci, data
|
||||
)
|
||||
iphc, message_info.destination_mac_address, dci, data)
|
||||
|
||||
header = ipv6.IPv6Header(
|
||||
src_address, dst_address, traffic_class, flow_label, hop_limit
|
||||
)
|
||||
header = ipv6.IPv6Header(src_address, dst_address, traffic_class,
|
||||
flow_label, hop_limit)
|
||||
|
||||
header.next_header = next_header
|
||||
|
||||
@@ -837,7 +796,6 @@ class LowpanIpv6HeaderFactory:
|
||||
|
||||
|
||||
class LowpanDecompressor:
|
||||
|
||||
""" Class decompressing 6LoWPAN packets. """
|
||||
|
||||
def __init__(
|
||||
@@ -848,8 +806,7 @@ class LowpanDecompressor:
|
||||
):
|
||||
self._lowpan_ip_header_factory = lowpan_ip_header_factory
|
||||
self._lowpan_extension_headers_factory = (
|
||||
lowpan_extension_headers_factory
|
||||
)
|
||||
lowpan_extension_headers_factory)
|
||||
self._lowpan_udp_header_factory = lowpan_udp_header_factory
|
||||
|
||||
def _is_ipv6_extension_header(self, header_first_byte):
|
||||
@@ -897,8 +854,7 @@ class LowpanDecompressor:
|
||||
|
||||
elif self._is_udp_header(header_first_byte):
|
||||
udp_header = self._lowpan_udp_header_factory.parse(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
# Update next header field in the previous header
|
||||
previous_header.next_header = udp_header.type
|
||||
@@ -910,12 +866,10 @@ class LowpanDecompressor:
|
||||
|
||||
|
||||
class LowpanMeshHeader(object):
|
||||
|
||||
""" Class representing 6LoWPAN mesh header (RFC 4944 5.2). """
|
||||
|
||||
def __init__(
|
||||
self, hops_left, originator_address, final_destination_address
|
||||
):
|
||||
def __init__(self, hops_left, originator_address,
|
||||
final_destination_address):
|
||||
self._hops_left = hops_left
|
||||
self._originator_address = originator_address
|
||||
self._final_destination_address = final_destination_address
|
||||
@@ -934,6 +888,7 @@ class LowpanMeshHeader(object):
|
||||
|
||||
|
||||
class LowpanMeshHeaderFactory:
|
||||
|
||||
def _parse_address(self, data, is_short):
|
||||
if is_short:
|
||||
return common.MacAddress.from_rloc16(bytearray(data.read(2)))
|
||||
@@ -951,19 +906,17 @@ class LowpanMeshHeaderFactory:
|
||||
else:
|
||||
hops_left = ord(data.read(1))
|
||||
|
||||
originator_address = self._parse_address(
|
||||
data, is_short_originator_address
|
||||
)
|
||||
originator_address = self._parse_address(data,
|
||||
is_short_originator_address)
|
||||
final_destination_address = self._parse_address(
|
||||
data, is_short_final_destination_address
|
||||
)
|
||||
data, is_short_final_destination_address)
|
||||
|
||||
return LowpanMeshHeader(
|
||||
hops_left, originator_address, final_destination_address
|
||||
)
|
||||
return LowpanMeshHeader(hops_left, originator_address,
|
||||
final_destination_address)
|
||||
|
||||
|
||||
class LowpanFragmentationHeader(object):
|
||||
|
||||
def __init__(self, datagram_size, datagram_tag, datagram_offset=0):
|
||||
self._datagram_size = datagram_size
|
||||
self._datagram_tag = datagram_tag
|
||||
@@ -1001,6 +954,7 @@ class LowpanFragmentationHeader(object):
|
||||
|
||||
|
||||
class LowpanFragmentsBuffer(object):
|
||||
|
||||
def __init__(self, buffer_size):
|
||||
self._buffer = [None] * buffer_size
|
||||
self._position = 0
|
||||
@@ -1034,8 +988,7 @@ class LowpanFragmentsBuffer(object):
|
||||
def read(self):
|
||||
if not self.whole_packet_received():
|
||||
raise ValueError(
|
||||
"Only a part of the packet has been stored in the buffer."
|
||||
)
|
||||
"Only a part of the packet has been stored in the buffer.")
|
||||
|
||||
return bytearray(self._buffer)
|
||||
|
||||
@@ -1044,33 +997,31 @@ class LowpanFragmentsBuffer(object):
|
||||
|
||||
|
||||
class LowpanFragmentsBuffersManager(object):
|
||||
|
||||
def __init__(self):
|
||||
self._fragments_buffers = {}
|
||||
|
||||
def _create_key(self, message_info, datagram_tag):
|
||||
key = (
|
||||
bytes(message_info.source_mac_address.mac_address)
|
||||
+ bytes(message_info.destination_mac_address.mac_address)
|
||||
+ bytes(datagram_tag)
|
||||
)
|
||||
key = (bytes(message_info.source_mac_address.mac_address) +
|
||||
bytes(message_info.destination_mac_address.mac_address) +
|
||||
bytes(datagram_tag))
|
||||
return key
|
||||
|
||||
def _allocate_fragments_buffer(self, key, datagram_size):
|
||||
if datagram_size is None or datagram_size < 0:
|
||||
raise ValueError(
|
||||
"Could not allocate fragments buffer. Invalid datagram size: {}".format(
|
||||
datagram_size
|
||||
)
|
||||
)
|
||||
"Could not allocate fragments buffer. Invalid datagram size: {}"
|
||||
.format(datagram_size))
|
||||
|
||||
fragments_buffer = LowpanFragmentsBuffer(datagram_size)
|
||||
|
||||
self._fragments_buffers[key] = fragments_buffer
|
||||
return fragments_buffer
|
||||
|
||||
def get_fragments_buffer(
|
||||
self, message_info, datagram_tag, datagram_size=None
|
||||
):
|
||||
def get_fragments_buffer(self,
|
||||
message_info,
|
||||
datagram_tag,
|
||||
datagram_size=None):
|
||||
key = self._create_key(message_info, datagram_tag)
|
||||
|
||||
if key not in self._fragments_buffers:
|
||||
@@ -1085,6 +1036,7 @@ class LowpanFragmentsBuffersManager(object):
|
||||
|
||||
|
||||
class LowpanParser(object):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
lowpan_mesh_header_factory,
|
||||
@@ -1095,8 +1047,7 @@ class LowpanParser(object):
|
||||
self._lowpan_mesh_header_factory = lowpan_mesh_header_factory
|
||||
self._lowpan_decompressor = lowpan_decompressor
|
||||
self._lowpan_fragments_buffers_manager = (
|
||||
lowpan_fragements_buffers_manager
|
||||
)
|
||||
lowpan_fragements_buffers_manager)
|
||||
self._ipv6_packet_factory = ipv6_packet_factory
|
||||
|
||||
def _peek_n_bytes(self, data, n):
|
||||
@@ -1129,15 +1080,13 @@ class LowpanParser(object):
|
||||
)
|
||||
|
||||
ipv6_header, extension_headers, udp_header = self._decompress_iphc(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
uncompressed_data = data.read()
|
||||
|
||||
# Update payload lengths
|
||||
ipv6_header.payload_length = fragmentation_header.datagram_size - len(
|
||||
ipv6_header
|
||||
)
|
||||
ipv6_header)
|
||||
|
||||
fragments_buffer.seek(0)
|
||||
fragments_buffer.write(ipv6_header.to_bytes())
|
||||
@@ -1154,8 +1103,7 @@ class LowpanParser(object):
|
||||
data = io.BytesIO(fragments_buffer.read())
|
||||
|
||||
self._lowpan_fragments_buffers_manager.free_fragments_buffer(
|
||||
message_info, fragmentation_header.datagram_tag
|
||||
)
|
||||
message_info, fragmentation_header.datagram_tag)
|
||||
|
||||
return self._ipv6_packet_factory.parse(data, message_info)
|
||||
|
||||
@@ -1179,8 +1127,7 @@ class LowpanParser(object):
|
||||
data = io.BytesIO(fragments_buffer.read())
|
||||
|
||||
self._lowpan_fragments_buffers_manager.free_fragments_buffer(
|
||||
message_info, fragmentation_header.datagram_tag
|
||||
)
|
||||
message_info, fragmentation_header.datagram_tag)
|
||||
|
||||
return self._ipv6_packet_factory.parse(data, message_info)
|
||||
|
||||
@@ -1188,8 +1135,7 @@ class LowpanParser(object):
|
||||
|
||||
def _handle_iphc_header(self, data, message_info):
|
||||
ipv6_header, extension_headers, udp_header = self._decompress_iphc(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
uncompressed_data = data.read()
|
||||
|
||||
@@ -1209,9 +1155,8 @@ class LowpanParser(object):
|
||||
|
||||
decompressed_data = ipv6_header.to_bytes() + decompressed_data
|
||||
|
||||
return self._ipv6_packet_factory.parse(
|
||||
io.BytesIO(decompressed_data), message_info
|
||||
)
|
||||
return self._ipv6_packet_factory.parse(io.BytesIO(decompressed_data),
|
||||
message_info)
|
||||
|
||||
def set_lowpan_context(self, cid, prefix):
|
||||
self._lowpan_decompressor.set_lowpan_context(cid, prefix)
|
||||
@@ -1223,30 +1168,24 @@ class LowpanParser(object):
|
||||
|
||||
if self._is_mesh_header(first_byte):
|
||||
mesh_header = self._lowpan_mesh_header_factory.parse(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
message_info.source_mac_address = (
|
||||
mesh_header.originator_address
|
||||
)
|
||||
mesh_header.originator_address)
|
||||
message_info.destination_mac_address = (
|
||||
mesh_header.final_destination_address
|
||||
)
|
||||
mesh_header.final_destination_address)
|
||||
|
||||
elif self._is_first_fragmentation_header(first_byte):
|
||||
return self._handle_first_fragmentation_header(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
elif self._is_subsequent_fragmentation_header(first_byte):
|
||||
return self._handle_subsequent_fragmentation_header(
|
||||
data, message_info
|
||||
)
|
||||
data, message_info)
|
||||
|
||||
elif self._is_iphc(first_byte):
|
||||
return self._handle_iphc_header(data, message_info)
|
||||
|
||||
else:
|
||||
raise RuntimeError(
|
||||
"Unsupported header type: 0x{:02x}".format(first_byte)
|
||||
)
|
||||
"Unsupported header type: 0x{:02x}".format(first_byte))
|
||||
|
||||
Reference in New Issue
Block a user