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 parse_queueHandle(stream: BitStreamReader):  # pylint: disable=invalid-name
     """Parse queueHandle from raw bitstream"""
     # According to the docs queueHandle should be an uint8_t value
     # just like the other similar messages. But for unknown reason zipgateway
     # sends this like an ipv6 address (at least version 7.11.01)
     print("Node failing", stream.remaining(advance=False))
     if stream.bytesLeft() == 16:
         stream.advance(8 * 15)
     return stream.byte()
Example #3
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 #4
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 #5
0
 def deserialize(stream: BitStreamReader):
     """Deserialize a bitstream into a Message object"""
     if stream.bytesLeft() < 2:
         return UnknownMessage(0x0000)
     cmdClass = stream.byte()
     cmd = stream.byte()
     hid = cmdClass << 8 | (cmd & 0xFF)
     MsgCls = ZWaveMessage.get(hid, None)  # pylint: disable=invalid-name
     if MsgCls:
         msg = MsgCls()
         msg.parseAttributes(stream)
     else:
         msg = UnknownMessage(hid)
     return msg
Example #6
0
 def parseAttributes(self, stream: BitStreamReader):
     """Populate the attributes from a raw bitstream."""
     for attr in self.attributes:
         if stream.bytesLeft() == 0:
             # No more data, cannot decode rest of the attributes
             break
         attrName, attrType = attr[0], attr[1]
         deserializer = getattr(self, "parse_{}".format(attrName), None)
         if deserializer:
             value = deserializer(stream)
         else:
             value = attrType.deserialize(stream)
         # This can be optimized to reduce the second loop in __setattr__
         setattr(self, attrName, value)
Example #7
0
def test_BitStreamReader_eof(streamReader: BitStreamReader):
    streamReader.remaining()
    assert streamReader.bytesLeft() == 0
    with pytest.raises(EOFError):
        streamReader.byte()
 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))