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
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)
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)
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
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