Пример #1
0
    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
Пример #2
0
    def setPayloadId(self, id):
        '''Set payload id'''
        if isinstance(id, list):
            id = protocols.from8bit(id)

        self._payload_id = id
Пример #3
0
    def setPayloadLengthParsed(self, length):
        '''Save parsed payload length'''
        if isinstance(length, list):
            length = protocols.from8bit(length)

        self._payload_parsed_length = length