def doReportDisconnected(self, *args, **kwargs): """ Action method. """ self.dht_lookup_use_cache = False for packet_id in self.outgoing_list_files_packets_ids: packetsToCancel = packet_out.search_by_packet_id(packet_id) for pkt_out in packetsToCancel: if pkt_out.outpacket.Command == commands.ListFiles(): lg.warn('sending "cancel" to %r from %r' % ( pkt_out, self, )) pkt_out.automat('cancel') events.send('share-disconnected', data=dict(self.to_json())) if self.result_defer: self.result_defer.errback(Exception('disconnected')) for cb_id in list(self.connected_callbacks.keys()): if cb_id in self.connected_callbacks: cb = self.connected_callbacks[cb_id] cb(cb_id, False) if _Debug: lg.args(_DebugLevel, key_id=self.key_id, ecc_map=self.known_ecc_map)
def SendListFiles(target_supplier, customer_idurl=None, key_id=None, wide=False, callbacks={}): """ This is used as a request method from your supplier : if you send him a ListFiles() packet he will reply you with a list of stored files in a Files() packet. """ MyID = my_id.getLocalID() if not customer_idurl: customer_idurl = MyID if not str(target_supplier).isdigit(): RemoteID = target_supplier else: RemoteID = contactsdb.supplier(target_supplier, customer_idurl=customer_idurl) if not RemoteID: lg.warn("RemoteID is empty target_supplier=%s" % str(target_supplier)) return None if _Debug: lg.out(_DebugLevel, "p2p_service.SendListFiles to %s" % nameurl.GetName(RemoteID)) if not key_id: key_id = global_id.MakeGlobalID(idurl=customer_idurl, key_alias='customer') PacketID = "%s:%s" % (key_id, packetid.UniqueID(), ) Payload = settings.ListFilesFormat() result = signed.Packet( Command=commands.ListFiles(), OwnerID=MyID, CreatorID=MyID, PacketID=PacketID, Payload=Payload, RemoteID=RemoteID, ) gateway.outbox(result, wide=wide, callbacks=callbacks) return result
def _on_inbox_packet_received(self, newpacket, info, status, error_message): from p2p import commands if newpacket.Command == commands.DeleteFile(): return self._on_delete_file(newpacket) elif newpacket.Command == commands.Retrieve(): return self._on_retreive(newpacket) elif newpacket.Command == commands.Data(): return self._on_data(newpacket) elif newpacket.Command == commands.ListFiles(): return self._on_list_files(newpacket) return False
def _on_inbox_packet_received(self, newpacket, info, status, error_message): from p2p import commands from supplier import customer_space if newpacket.Command == commands.DeleteFile(): return customer_space.on_delete_file(newpacket) elif newpacket.Command == commands.DeleteBackup(): return customer_space.on_delete_backup(newpacket) elif newpacket.Command == commands.Retrieve(): return customer_space.on_retrieve(newpacket) elif newpacket.Command == commands.Data(): return customer_space.on_data(newpacket) elif newpacket.Command == commands.ListFiles(): return customer_space.on_list_files(newpacket) return False
def SendListFiles(target_supplier, customer_idurl=None, key_id=None, query_items=[], wide=False, callbacks={}, timeout=None): """ This is used as a request method from your supplier : if you send him a ListFiles() packet he will reply you with a list of stored files in a Files() packet. """ MyID = my_id.getLocalID() if not customer_idurl: customer_idurl = MyID if not str(target_supplier).isdigit(): RemoteID = target_supplier else: RemoteID = contactsdb.supplier(target_supplier, customer_idurl=customer_idurl) if not RemoteID: lg.warn("RemoteID is empty target_supplier=%s" % str(target_supplier)) return None if not key_id: # key_id = global_id.MakeGlobalID(idurl=customer_idurl, key_alias='customer') # TODO: due to issue with "customer" key backup/restore decided to always use my "master" key # to retrieve my list files info from supplier # expect remote user always poses my master public key from my identity. # probably require more work to build more reliable solution without using my master key at all # when my identity rotated supplier first needs to receive my new identity and then sending ListFiles() key_id = my_id.getGlobalID(key_alias='master') if not my_keys.is_key_registered(key_id) or not my_keys.is_key_private(key_id): lg.warn('key %r not exist or public, my "master" key to be used with ListFiles() packet' % key_id) key_id = my_id.getGlobalID(key_alias='master') PacketID = "%s:%s" % (key_id, packetid.UniqueID(), ) if not query_items: query_items = ['*', ] Payload = serialization.DictToBytes({'items': query_items, }) if _Debug: lg.out(_DebugLevel, "p2p_service.SendListFiles %r to %s with query : %r" % ( PacketID, nameurl.GetName(RemoteID), query_items, )) result = signed.Packet( Command=commands.ListFiles(), OwnerID=MyID, CreatorID=MyID, PacketID=PacketID, Payload=Payload, RemoteID=RemoteID, ) gateway.outbox(result, wide=wide, callbacks=callbacks, response_timeout=timeout) return result
def doReportConnected(self, *args, **kwargs): """ Action method. """ self.dht_lookup_use_cache = True for packet_id in self.outgoing_list_files_packets_ids: packetsToCancel = packet_out.search_by_packet_id(packet_id) for pkt_out in packetsToCancel: if pkt_out.outpacket.Command == commands.ListFiles(): lg.warn('sending "cancel" to %r from %r' % ( pkt_out, self, )) pkt_out.automat('cancel') events.send('share-connected', data=dict(self.to_json())) if self.result_defer: self.result_defer.callback(True) for cb_id in list(self.connected_callbacks.keys()): cb = self.connected_callbacks.get(cb_id) if cb: cb(cb_id, True)
def SendRequestListFiles(supplierNumORidurl, customer_idurl=None): MyID = my_id.getLocalID() if not customer_idurl: customer_idurl = MyID if not str(supplierNumORidurl).isdigit(): RemoteID = supplierNumORidurl else: RemoteID = contactsdb.supplier(supplierNumORidurl, customer_idurl=customer_idurl) if not RemoteID: lg.warn("RemoteID is empty supplierNumORidurl=%s" % str(supplierNumORidurl)) return None if _Debug: lg.out( _DebugLevel, "p2p_service.SendRequestListFiles [%s]" % nameurl.GetName(RemoteID)) PacketID = "%s:%s" % (global_id.UrlToGlobalID(customer_idurl), packetid.UniqueID()) Payload = settings.ListFilesFormat() result = signed.Packet(commands.ListFiles(), MyID, MyID, PacketID, Payload, RemoteID) gateway.outbox(result) return result
def inbox(newpacket, info, status, error_message): """ """ if newpacket.CreatorID != my_id.getLocalID( ) and newpacket.RemoteID != my_id.getLocalID(): # packet is NOT for us, skip return False commandhandled = False if newpacket.Command == commands.Ack(): # a response from remote node, typically handled in other places Ack(newpacket, info) commandhandled = False elif newpacket.Command == commands.Fail(): # some operation was failed on other side Fail(newpacket) commandhandled = False elif newpacket.Command == commands.Retrieve(): # retrieve some packet customer stored with us # handled by service_supplier() Retrieve(newpacket) commandhandled = False elif newpacket.Command == commands.RequestService(): # other node send us a request to get some service # handled by service_p2p_hookups() RequestService(newpacket, info) commandhandled = False elif newpacket.Command == commands.CancelService(): # other node wants to stop the service we gave him # handled by service_p2p_hookups() CancelService(newpacket, info) commandhandled = False elif newpacket.Command == commands.Data(): # new packet to store for customer, or data coming back from supplier # handled by service_backups() and service_supplier() Data(newpacket) commandhandled = False elif newpacket.Command == commands.ListFiles(): # customer wants list of their files # handled by service_supplier() ListFiles(newpacket, info) commandhandled = False elif newpacket.Command == commands.Files(): # supplier sent us list of files # handled by service_backups() Files(newpacket, info) commandhandled = False elif newpacket.Command == commands.DeleteFile(): # handled by service_supplier() DeleteFile(newpacket) commandhandled = False elif newpacket.Command == commands.DeleteBackup(): # handled by service_supplier() DeleteBackup(newpacket) commandhandled = False elif newpacket.Command == commands.Correspondent(): # TODO: contact asking for our current identity, not implemented yet Correspondent(newpacket) commandhandled = False elif newpacket.Command == commands.Broadcast(): # handled by service_broadcasting() Broadcast(newpacket, info) commandhandled = False elif newpacket.Command == commands.Coin(): # handled by service_accountant() Coin(newpacket, info) commandhandled = False elif newpacket.Command == commands.RetrieveCoin(): # handled by service_accountant() RetrieveCoin(newpacket, info) commandhandled = False elif newpacket.Command == commands.Key(): # handled by service_keys_registry() Key(newpacket, info) commandhandled = False elif newpacket.Command == commands.Event(): # handled by service_p2p_hookups() Event(newpacket, info) commandhandled = False elif newpacket.Command == commands.Message(): # handled by service_private_messages() Message(newpacket, info) commandhandled = False return commandhandled
def inbox(newpacket, info, status, error_message): """ """ if newpacket.CreatorID != my_id.getLocalID( ) and newpacket.RemoteID != my_id.getLocalID(): # packet is NOT for us, skip return False commandhandled = False if newpacket.Command == commands.Ack(): # a response from remote node, typically handled in other places Ack(newpacket, info) commandhandled = False elif newpacket.Command == commands.Fail(): # some operation was failed on other side Fail(newpacket) commandhandled = False elif newpacket.Command == commands.Retrieve(): # retrieve some packet customer stored with us Retrieve(newpacket) commandhandled = True elif newpacket.Command == commands.RequestService(): # other node send us a request to get some service RequestService(newpacket, info) commandhandled = True elif newpacket.Command == commands.CancelService(): # other node wants to stop the service we gave him CancelService(newpacket, info) commandhandled = True elif newpacket.Command == commands.Data(): # new packet to store for customer commandhandled = Data(newpacket) elif newpacket.Command == commands.ListFiles(): # customer wants list of their files ListFiles(newpacket) commandhandled = True elif newpacket.Command == commands.Files(): # supplier sent us list of files Files(newpacket, info) commandhandled = True elif newpacket.Command == commands.DeleteFile(): # will Delete a customer file for them DeleteFile(newpacket) commandhandled = True elif newpacket.Command == commands.DeleteBackup(): # will Delete all files starting in a backup DeleteBackup(newpacket) commandhandled = True elif newpacket.Command == commands.Message(): # will be handled in message.py commandhandled = False elif newpacket.Command == commands.Correspondent(): # contact asking for our current identity Correspondent(newpacket) commandhandled = True elif newpacket.Command == commands.Broadcast(): # handled by service_broadcasting() Broadcast(newpacket, info) commandhandled = False elif newpacket.Command == commands.Coin(): # handled by service_accountant() Coin(newpacket, info) commandhandled = False elif newpacket.Command == commands.RetrieveCoin(): # handled by service_accountant() RetrieveCoin(newpacket, info) commandhandled = False return commandhandled