From 5f57d64912b39b546c724f79eb0a3a15ecce7b0a Mon Sep 17 00:00:00 2001
From: Cameron Dale <camrdale@gmail.com>
Date: Mon, 18 Feb 2008 16:03:18 -0800
Subject: [PATCH] Don't add files to the DHT if a hash could not be found for
 them.

---
 TODO                    | 8 --------
 apt_dht/CacheManager.py | 2 +-
 apt_dht/apt_dht.py      | 6 ++++--
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/TODO b/TODO
index 5f9555b..9cef5c7 100644
--- a/TODO
+++ b/TODO
@@ -1,11 +1,3 @@
-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 
diff --git a/apt_dht/CacheManager.py b/apt_dht/CacheManager.py
index 517a009..c70cee2 100644
--- a/apt_dht/CacheManager.py
+++ b/apt_dht/CacheManager.py
@@ -211,7 +211,7 @@ class CacheManager:
             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:
diff --git a/apt_dht/apt_dht.py b/apt_dht/apt_dht.py
index 9d0241d..fd7b73d 100644
--- a/apt_dht/apt_dht.py
+++ b/apt_dht/apt_dht.py
@@ -152,15 +152,17 @@ class AptDHT:
             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)
-- 
2.39.5