예제 #1
0
    def __loop(self):
        while True:
            for msg in messages.decode(self.__client.recv(4096)):
                if isinstance(msg, messages.Result):
                    if msg.code != messages.RESULT_OK:
                        print "---- NON-OK result received ----"
                        print msg
                        continue

                self.__send(messages.encodeAck(msg.messageId))

                if isinstance(msg, messages.GetMenuItems):
                    for idx, item in enumerate(self.menuItems):
                        self.__send(
                            messages.encodeGetMenuItemResponse(
                                idx, item.isAlert, item.unreadCount, item.text,
                                item.bitmap))

                elif isinstance(msg, messages.GetMenuItem):
                    print "---- GetMenuItem received ----"
                    # FIXME: do something!

                elif isinstance(msg, messages.DisplayCapabilities):
                    deviceCapabilities = msg
                    self.__send(messages.encodeSetMenuSize(len(
                        self.menuItems)))
                    self.__send(
                        messages.encodeSetMenuSettings(self.menuVibrationTime,
                                                       0))

                elif isinstance(msg, messages.GetTime):
                    self.__send(
                        messages.encodeGetTimeResponse(self.__getLocalTime(),
                                                       self.is24HourClock))

                elif isinstance(msg, messages.DeviceStatus):
                    self.__send(messages.encodeDeviceStatusAck())

                elif isinstance(msg, messages.GetAlert):
                    pass
                    # FIXME: fill implementation

                elif isinstance(msg, messages.Navigation):
                    self.__send(
                        messages.encodeNavigationResponse(
                            messages.RESULT_EXIT))
                    # FIXME: handle events according to navType

                print msg
예제 #2
0
    def receive(self, data):
        assert len(data) < self.max_message_size

        # check if we handled this message already, if so repeat Ack
        msghash = sha3(data)
        if msghash in self.sent_acks:
            # assert False, "DEACTIVATED ACK RESENTS"
            return self.send_ack(*self.sent_acks[msghash])

        # note, we ignore the sending endpoint, as this can not be known w/ UDP
        msg = messages.decode(data)
        # handle Acks
        if isinstance(msg, Ack):
            log.debug("ACK MSGHASH RECEIVED echo=", echo=pex(msg.echo))
            del self.tries[msg.echo]
            return

        assert isinstance(msg, Secret) or msg.sender
        self.raiden.on_message(msg, msghash)
예제 #3
0
    def receive(self, data):
        assert len(data) < self.max_message_size

        # check if we handled this message already, if so repeat Ack
        msghash = sha3(data)
        if msghash in self.sent_acks:
            # assert False, "DEACTIVATED ACK RESENTS"
            return self.send_ack(*self.sent_acks[msghash])

        # note, we ignore the sending endpoint, as this can not be known w/ UDP
        msg = messages.decode(data)
        # handle Acks
        if isinstance(msg, Ack):
            print "ACK MSGHASH RECEIVED", pex(msg.echo)
            del self.tries[msg.echo]
            return

        assert isinstance(msg, Secret) or msg.sender
        self.raiden.on_message(msg, msghash)
예제 #4
0
파일: server.py 프로젝트: profmaad/liveview
    def __loop(self):
        while True:
            for msg in messages.decode(self.__client.recv(4096)):
                if isinstance(msg, messages.Result):
                    if msg.code != messages.RESULT_OK:
                        print "---- NON-OK result received ----"
                        print msg
                        continue

                self.__send(messages.encodeAck(msg.messageId))

                if isinstance(msg, messages.GetMenuItems):
                    for idx, item in enumerate(self.menuItems):
                        self.__send(messages.encodeGetMenuItemResponse(idx, item.isAlert, item.unreadCount, item.text, item.bitmap))

                elif isinstance(msg, messages.GetMenuItem):
                    print "---- GetMenuItem received ----"
                    # FIXME: do something!

                elif isinstance(msg, messages.DisplayCapabilities):
                    deviceCapabilities = msg
                    self.__send(messages.encodeSetMenuSize(len(self.menuItems)))
                    self.__send(messages.encodeSetMenuSettings(self.menuVibrationTime, 0))

                elif isinstance(msg, messages.GetTime):
                    self.__send(messages.encodeGetTimeResponse(self.__getLocalTime(), self.is24HourClock))

                elif isinstance(msg, messages.DeviceStatus):
                    self.__send(messages.encodeDeviceStatusAck())

                elif isinstance(msg, messages.GetAlert):
                    pass
                    # FIXME: fill implementation

                elif isinstance(msg, messages.Navigation):
                    self.__send(messages.encodeNavigationResponse(messages.RESULT_EXIT))
                    # FIXME: handle events according to navType

                print msg
예제 #5
0
    def extract_beacon_from_packet(self, packet, data_map_list):
        """
        packet: scapy Packet object
        list_of_beacon_data_mappings: list of data mappings
        """

        beacon = Beacon()
        beacon.external_ip_address = packet['IP'].src

        mapped_data = self._parse_data_map(data_map_list).iteritems()

        for packet_field, beacon_fields in mapped_data:
            field_protocol, field_subfield = packet_field.split(".")

            # Use scapy to extract the data from the packet field
            layer = packet.getlayer(eval(field_protocol))
            packet_field_value = layer.getfieldval(field_subfield)
            """
            packet_field_value = eval(
                "packet['%s'].%s" % (field_protocol, field_subfield))
            """

            if len(beacon_fields) > 1:
                # More than one beacon field within same packet field

                offset = 0
                for beacon_field in beacon_fields:
                    format = MESSAGE_FORMATS['plain']
                    data_size = get_byte_size(message_test_data[beacon_field])
                    if 'format' in beacon.keys():
                        format = beacon.format

                    if beacon_field == 'data':
                        try:
                            data_size = beacon.data_length
                        except AttributeError:
                            # Normal if Beacon doesn't contain data
                            data_size = 0
                    if beacon_field == 'data_length' and not (
                        (beacon.type & 0xf) == BEACON_TYPES['data']):
                        beacon['%s' % beacon_field] = 0
                        continue

                    # decode all data except type
                    if beacon_field != type:
                        value = decode(
                            packet_field_value[offset:offset + data_size],
                            format)
                    else:
                        value = packet_field_value[offset:offset + data_size]

                    try:
                        #beacon['%s' % beacon_field] = packet_field_value[
                        #    offset:offset+data_size]
                        beacon['%s' % beacon_field] = value
                        self._log(
                            "beacon[%s] => %s" %
                            (beacon_field,
                             packet_field_value[offset:offset +
                                                data_size].encode('hex')))
                    except MalformedBeacon:
                        self._log("Malformed Beacon:")
                        break

                    offset += data_size
            else:
                beacon['%s' % beacon_field] = packet_field_value
        return beacon