Example #1
0
 def deserialize(cls, stream: BitStreamReader):
     """Deserialize metadata extension"""
     retval = {}
     while stream.bytesLeft():
         metadataType = stream.bits(7)
         _critical = stream.bit()
         length = stream.byte()
         retval[metadataType] = stream.value(length)
     return retval
Example #2
0
 def deserialize(cls, stream: BitStreamReader):
     """Deserialize header extension from stream"""
     retval = {}
     extLength = stream.byte() - 1
     reader = BitStreamReader(stream.value(extLength))
     while reader.bytesLeft() > 0:
         option = ZIPPacketOption()
         option.parseAttributes(reader)
         retval[option.optionType] = option.optionData
     return retval
Example #3
0
 def deserialize(cls, stream: BitStreamReader):
     """Deserialize ZIP Maintenance Report"""
     retval = {}
     while stream.bytesLeft():
         imeType = IMEType(stream.byte())
         length = stream.byte()
         imeVal = stream.value(length)
         typeCls = IME_MAPPING.get(imeType, IMEUnknownValue)
         retval[imeType] = typeCls.load(BitStreamReader(imeVal))
     return retval
Example #4
0
 def parse_optionData(self, stream: BitStreamReader):  # pylint: disable=invalid-name
     """Parse attribute optionData"""
     clsType = ZIPPacketOptionData
     length = stream.byte()
     data = stream.value(length)
     if self.optionType == ZIPPacketOptionType.MAINTENANCE_REPORT:
         clsType = ZIPPacketOptionMaintenanceReport
     elif self.optionType == ZIPPacketOptionType.ENCAPSULATION_FORMAT_INFORMATION:
         clsType = ZIPPacketOptionEncapsulationFormatInfo
     elif self.optionType == ZIPPacketOptionType.EXPECTED_DELAY:
         clsType = ZIPPacketOptionExpectedDelay
     cls = clsType()
     if hasattr(cls, "parseAttributes"):
         cls.parseAttributes(BitStreamReader(data))
     elif hasattr(cls, "__setstate__"):
         data = clsType.deserialize(BitStreamReader(data))
         cls.__setstate__(data)
     else:
         value = clsType.deserialize(BitStreamReader(data))
         return clsType(value)
     return cls
Example #5
0
def test_BitStreamReader_remaining(streamReader: BitStreamReader):
    assert streamReader.remaining(advance=False) == b"\x02\x01\xcb@"
    assert streamReader.value(1) == b"\x02"
    assert streamReader.remaining() == b"\x01\xcb@"
 def parse_commandClass(self, stream: BitStreamReader):  # pylint: disable=invalid-name
     """Parse the length prefixed command"""
     length = self.nodeInfoLength - 7
     if length > stream.bytesLeft():
         return list(stream.remaining())
     return list(stream.value(length))
Example #7
0
 def parse_command(stream: BitStreamReader):  # pylint: disable=invalid-name
     """Parse the length prefixed command"""
     length = stream.byte()
     return Message.decode(stream.value(length))
Example #8
0
 def parse_value(self, stream: BitStreamReader):  # pylint: disable=invalid-name
     """Decode the value from the report"""
     return int.from_bytes(stream.value(self.size), "big", signed=False)