예제 #1
0
 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)
예제 #2
0
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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
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
예제 #6
0
 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)
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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