2 from twisted.internet import defer
3 from twisted.web2 import server, http, http_headers
5 from apt_dht_conf import config
6 from PeerManager import PeerManager
7 from HTTPServer import TopLevel
8 from MirrorManager import MirrorManager
11 def __init__(self, dht):
13 self.http_server = TopLevel(config.get('DEFAULT', 'cache_dir'), self)
14 self.http_site = server.Site(self.http_server)
15 self.peers = PeerManager()
16 self.mirrors = MirrorManager(config.get('DEFAULT', 'cache_dir'))
21 def check_freshness(self, path, modtime, resp):
22 host, path = path.split('/',1)
24 host, path = path.split('/',1)
27 # Make sure a port is included for consistency
28 if host.find(':') >= 0:
29 host, port = host.split(':', 1)
34 d = self.peers.get([(host, port, path)], "HEAD", modtime)
35 d.addCallback(self.check_freshness_done, path, resp)
38 def check_freshness_done(self, resp, path, orig_resp):
39 if resp.code == "304":
42 return self.get_resp(path)
44 def get_resp(self, path):
47 findDefer = self.mirrors.findHash(path)
49 findDefer.addcallback(self.findHash_done, path, d)
52 def findHash_done(self, (hash, size), path, d):
54 host, path = path.split('/',1)
56 host, path = path.split('/',1)
59 # Make sure a port is included for consistency
60 if host.find(':') >= 0:
61 host, port = host.split(':', 1)
65 getDefer = self.peers.get([(host, port, path)])
66 getDefer.addCallback(d.callback)