-Files for which a hash cannot be found should not be added to the DHT.
-
-If the hash can't found, it stands to reason that other peers will not
-be able to find the hash either. So adding those files to the DHT will
-just clutter it with useless information. Examples include Release.gpg,
-Release, Translation-de.bz2, and Contents.gz.
-
-
Use python-debian for parsing RFC 822 files.
There are already routines for parsing these files, so there is no need
if self.scanning[0] == self.cache_dir:
url = 'http:/' + file.path[len(self.cache_dir.path):]
self.db.storeFile(file, result.digest())
- df = self.manager.new_cached_file(file, result, url)
+ df = self.manager.new_cached_file(file, result, url, True)
if df is None:
reactor.callLater(0, self._scanDirectories, None, walker)
else:
return getDefer
return response
- def new_cached_file(self, file_path, hash, url = None):
+ def new_cached_file(self, file_path, hash, url = None, forceDHT = False):
"""Add a newly cached file to the DHT.
If the file was downloaded, set url to the path it was downloaded for.
+ Don't add a file to the DHT unless a hash was found for it
+ (but do add it anyway if forceDHT is True).
"""
if url:
self.mirrors.updatedFile(url, file_path)
- if self.my_addr and hash:
+ if self.my_addr and hash and (hash.expected() is not None or forceDHT):
site = self.my_addr + ':' + str(config.getint('DEFAULT', 'PORT'))
key = hash.norm(bits = config.getint(config.get('DEFAULT', 'DHT'), 'HASH_LENGTH'))
storeDefer = self.dht.storeValue(key, site)