2 from twisted.internet import defer
3 from twisted.web2 import server, http, http_headers
4 from twisted.python import log
6 from apt_dht_conf import config
7 from PeerManager import PeerManager
8 from HTTPServer import TopLevel
9 from MirrorManager import MirrorManager
12 def __init__(self, dht):
13 log.msg('Initializing the main apt_dht application')
15 self.http_server = TopLevel(config.get('DEFAULT', 'cache_dir'), self)
16 self.http_site = server.Site(self.http_server)
17 self.peers = PeerManager()
18 self.mirrors = MirrorManager(config.get('DEFAULT', 'cache_dir'))
23 def check_freshness(self, path, modtime, resp):
24 d = self.peers.get([path], "HEAD", modtime)
25 d.addCallback(self.check_freshness_done, path, resp)
28 def check_freshness_done(self, resp, path, orig_resp):
29 if resp.code == "304":
32 return self.get_resp(path)
34 def get_resp(self, path):
37 findDefer = self.mirrors.findHash(path)
39 findDefer.addcallback(self.findHash_done, path, d)
42 def findHash_done(self, (hash, size), path, d):
44 getDefer = self.peers.get([path])
45 getDefer.addCallback(d.callback)
47 # Lookup hash from DHT
48 lookupDefer = self.dht.getValue(hash)
49 lookupDefer.addCallback(self.lookupHash_done, hash, size, path, d)
51 def lookupHash_done(self, locations, hash, size, path, d):
53 getDefer = self.peers.get([path])
54 getDefer.addCallback(d.callback)
56 # Download from the found peers
57 getDefer = self.peers.get(locations)
58 getDefer.addCallback(d.callback)