コード例 #1
0
ファイル: gateboard.py プロジェクト: goliathdrakken/gatebot
  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)
コード例 #2
0
ファイル: gateboard.py プロジェクト: goliathdrakken/gatebot
  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(GBSP_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()
コード例 #3
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)