def _processIncomingPacket(self, packet): ''' Takes a raw packet, checks it and returns the correct packet class ''' contents = {} contents['flags'] = None contents['payload_id'] = None contents['payload'] = [] contents['checksum'] = None index = 1 # Grab flags contents['flags'] = flags = packet[index] index += 1 # Grab payload id contents['payload_id'] = payload_id = protocols.from8bit(packet[index:index+2]) index += 2 # Grab payload contents['payload'] = payload = packet[index:(len(packet) - 2)] index += len(payload) # Grab checksum contents['checksum'] = checksum = packet[index] index += 1 # Check checksum gen_checksum = packetlib.getChecksum(packet[1:index-1]) if checksum != gen_checksum: raise ParsingException, 'Checksum is incorrect! Provided: %d, generated: %d' % (checksum, gen_checksum) # Just double check we only have one byte left if index != (len(packet) - 1): raise ParsingException, 'Packet incorrectly processed, %d bytes left' % (len(packet) - 1 - index) # Create response packet object response = responses.getPacket(payload_id) # Populate data response.parseHeaderFlags(contents['flags']) response.setPayloadId(contents['payload_id']) response.parsePayload(contents['payload']) response.validate() return response
def setPayloadId(self, id): '''Set payload id''' if isinstance(id, list): id = protocols.from8bit(id) self._payload_id = id
def setPayloadLengthParsed(self, length): '''Save parsed payload length''' if isinstance(length, list): length = protocols.from8bit(length) self._payload_parsed_length = length