def get_packet(i, pdata): packet = Packet( float(i) + self._base_sequence_number, pdata, not i, i == (len(window) - 1)) return PendingPacket(packet, self._packet_sender)
def on_message(msg): data, addr = msg[0], msg[1] self.log.debug('Got Packet: %s from %s', data, addr) relayed_message = False # Punch message if data[:5] == 'punch': data = data.split(' ') guid = data[1] peer = self.dht.routing_table.get_contact(guid) if peer: peer.reachable = True peer.relaying = False peer._rudp_connection._sender._packet_sender.reachable = True peer._rudp_connection._sender._packet_sender.relaying = False else: self.log.debug('Do not know about this peer yet.') return try: # Relayed message if data[:6] == 'relay ': msg_parts = data.split(' ', 1) data = msg_parts[1] data_body = json.loads(data) hostname = data_body.get('hostname') port = data_body.get('port') relayed_message = True else: data_body = json.loads(data) port = addr[1] hostname = addr[0] # Peer metadata guid = data_body.get('guid') pubkey = data_body.get('pubkey') nickname = data_body.get('nick') nat_type = data_body.get('nat_type') inbound_peer = self.dht.add_peer(hostname, port, pubkey, guid, nickname, nat_type) if inbound_peer: inbound_peer.reachable = True if relayed_message: inbound_peer._rudp_connection._sender._packet_sender.relaying = True packet = Packet(data, packet_buffer=True) if packet._finish: inbound_peer.reset() return # del self._connections[address_key] else: inbound_peer._rudp_connection.receive(packet) else: self.log.debug('Did not find a peer') except Exception as e: self.log.error('Could not deserialize message: %s', e)