Example #1
0
    def download(self):
        if not is_valid_blobhash(self.blob_hash):
            return defer.fail(Failure(InvalidBlobHashError(self.blob_hash)))

        def cancel_download(d):
            self.stop()

        self.finished_deferred = defer.Deferred(canceller=cancel_download)
        self.download_manager = DownloadManager(self.blob_manager, True)
        self.download_manager.blob_requester = BlobRequester(self.blob_manager, self.peer_finder,
                                                             self.payment_rate_manager, self.wallet,
                                                             self.download_manager)
        self.download_manager.blob_info_finder = SingleBlobMetadataHandler(self.blob_hash,
                                                                           self.download_manager)
        self.download_manager.progress_manager = SingleProgressManager(self._blob_downloaded,
                                                                       self.download_manager)
        self.download_manager.blob_handler = DummyBlobHandler()
        self.download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger()
        self.download_manager.connection_manager = ConnectionManager(
            self, self.rate_limiter,
            [self.download_manager.blob_requester],
            [self.download_manager.wallet_info_exchanger]
        )
        d = self.download_manager.start_downloading()
        d.addCallback(lambda _: self.finished_deferred)
        return d
Example #2
0
 def __init__(self, blob_dir, blob_hash, length=None):
     if not is_valid_blobhash(blob_hash):
         raise InvalidBlobHashError(blob_hash)
     self.blob_hash = blob_hash
     self.length = length
     self.writers = {}  # {Peer: writer, finished_deferred}
     self._verified = False
     self.readers = 0
     self.blob_dir = blob_dir
     self.file_path = os.path.join(blob_dir, self.blob_hash)
     self.blob_write_lock = defer.DeferredLock()
     self.saved_verified_blob = False
     if os.path.isfile(self.file_path):
         self.set_length(os.path.getsize(self.file_path))
         # This assumes that the hash of the blob has already been
         # checked as part of the blob creation process. It might
         # be worth having a function that checks the actual hash;
         # its probably too expensive to have that check be part of
         # this call.
         self._verified = True
Example #3
0
 def is_blob_request(self, request_dict):
     if BLOB_HASH not in request_dict or BLOB_SIZE not in request_dict:
         return False
     if not is_valid_blobhash(request_dict[BLOB_HASH]):
         raise InvalidBlobHashError(request_dict[BLOB_HASH])
     return True
Example #4
0
 def is_descriptor_request(self, request_dict):
     if SD_BLOB_HASH not in request_dict or SD_BLOB_SIZE not in request_dict:
         return False
     if not is_valid_blobhash(request_dict[SD_BLOB_HASH]):
         raise InvalidBlobHashError(request_dict[SD_BLOB_HASH])
     return True