Example #1
0
  def UnpackFromBytes(self, bytes):
    if len(bytes) < 16:
      raise ValueError, "Not enough bytes"

    header = bytes[:12]
    payload = bytes[12:-4]
    trailer = bytes[-4:]
    crcd_bytes = bytes[:-2]

    prefix, message_id, message_len = struct.unpack('<8sHH', header)

    if len(payload) != message_len:
      raise ValueError, "Payload size does not match tag"

    # TODO(mikey): assert checked_crc == 0
    checked_crc = crc16.crc16_ccitt(crcd_bytes)
    self.UnpackFromPayload(payload)
Example #2
0
    def UnpackFromBytes(self, bytes):
        if len(bytes) < 16:
            raise ValueError, "Not enough bytes"

        header = bytes[:12]
        payload = bytes[12:-4]
        trailer = bytes[-4:]
        crcd_bytes = bytes[:-2]

        prefix, message_id, message_len = struct.unpack('<8sHH', header)

        if len(payload) != message_len:
            raise ValueError, "Payload size does not match tag"

        # TODO(mikey): assert checked_crc == 0
        checked_crc = crc16.crc16_ccitt(crcd_bytes)
        self.UnpackFromPayload(payload)
Example #3
0
  def ToBytes(self):
    payload = cStringIO.StringIO()
    for field_name, field in self._fields.iteritems():
      field_bytes = field.ToBytes(self._values[field_name])
      payload.write(struct.pack('<BB', field.tagnum, len(field_bytes)))
      payload.write(field_bytes)

    payload_str = payload.getvalue()
    payload.close()

    out = cStringIO.StringIO()
    out.write(KBSP_PREFIX)
    out.write(struct.pack('<HH', self.MESSAGE_ID, len(payload_str)))
    out.write(payload_str)
    crc = crc16.crc16_ccitt(out.getvalue())
    out.write(struct.pack('<H', crc))
    out.write('\r\n')
    return out.getvalue()
Example #4
0
    def ToBytes(self):
        payload = cStringIO.StringIO()
        for field_name, field in self._fields.iteritems():
            field_bytes = field.ToBytes(self._values[field_name])
            payload.write(struct.pack('<BB', field.tagnum, len(field_bytes)))
            payload.write(field_bytes)

        payload_str = payload.getvalue()
        payload.close()

        out = cStringIO.StringIO()
        out.write(KBSP_PREFIX)
        out.write(struct.pack('<HH', self.MESSAGE_ID, len(payload_str)))
        out.write(payload_str)
        crc = crc16.crc16_ccitt(out.getvalue())
        out.write(struct.pack('<H', crc))
        out.write('\r\n')
        return out.getvalue()
Example #5
0
 def testCrc(self):
   data = '\x01\x02\x03\x04'
   crc = crc16.crc16_ccitt(data)
   data += struct.pack('<H', crc)
   self.assertEqual(crc16.crc16_ccitt(data), 0)