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
12 self.http_server = TopLevel(config.defaults()['cache_dir'], self)
13 self.http_site = server.Site(self.http_server)
14 self.peers = PeerManager()
15 self.mirrors = MirrorManager(config.defaults()['cache_dir'])
20 def check_freshness(self, path, modtime, resp):
21 host, path = path.split('/',1)
23 host, path = path.split('/',1)
26 # Make sure a port is included for consistency
27 if host.find(':') >= 0:
28 host, port = host.split(':', 1)
33 d = self.peers.get([(host, port, path)], "HEAD", modtime)
34 d.addCallback(self.check_freshness_done, path, resp)
37 def check_freshness_done(self, resp, path, orig_resp):
38 if resp.code == "304":
41 return self.get_resp(path)
43 def get_resp(self, path):
46 findDefer = self.mirrors.findHash(path)
48 findDefer.addcallback(self.findHash_done, path, d)
51 def findHash_done(self, (hash, size), path, d):
53 host, path = path.split('/',1)
55 host, path = path.split('/',1)
58 # Make sure a port is included for consistency
59 if host.find(':') >= 0:
60 host, port = host.split(':', 1)
64 getDefer = self.peers.get([(host, port, path)])
65 getDefer.addCallback(d.callback)