X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht%2FHTTPServer.py;h=20f94cdfa5e3088193591455b269a1fbd6963b15;hb=f510a1c7954bf43a8817b92c31e05bdb3a891dd5;hp=ebb34f173900d8fd9c2ba12d47adbbccb9a57b8c;hpb=3348b1340e4c881d930071e85d0ef986c71c93cf;p=quix0rs-apt-p2p.git diff --git a/apt_dht/HTTPServer.py b/apt_dht/HTTPServer.py index ebb34f1..20f94cd 100644 --- a/apt_dht/HTTPServer.py +++ b/apt_dht/HTTPServer.py @@ -1,7 +1,10 @@ -import os.path, time + +from urllib import unquote_plus from twisted.python import log from twisted.internet import defer +#from twisted.protocols import htb +#from twisted.protocols.policies import ThrottlingFactory from twisted.web2 import server, http, resource, channel from twisted.web2 import static, http_headers, responsecode @@ -26,10 +29,10 @@ class FileDownloader(static.File): if self.manager: path = 'http:/' + req.uri if resp.code >= 200 and resp.code < 400: - return self.manager.check_freshness(path, resp.headers.getHeader('Last-Modified'), resp) + return self.manager.check_freshness(req, path, resp.headers.getHeader('Last-Modified'), resp) log.msg('Not found, trying other methods for %s' % req.uri) - return self.manager.get_resp(path) + return self.manager.get_resp(req, path) return resp @@ -41,25 +44,30 @@ class FileDownloader(static.File): class TopLevel(resource.Resource): addSlash = True - def __init__(self, directory, manager): + def __init__(self, directory, db, manager): self.directory = directory + self.db = db self.manager = manager - self.subdirs = [] + self.factory = None + + def getHTTPFactory(self): + if self.factory is None: + self.factory = channel.HTTPFactory(server.Site(self), + **{'maxPipeline': 10, + 'betweenRequestsTimeOut': 60}) +# serverFilter = htb.HierarchicalBucketFilter() +# serverBucket = htb.Bucket() +# +# # Cap total server traffic at 20 kB/s +# serverBucket.maxburst = 20000 +# serverBucket.rate = 20000 +# +# serverFilter.buckets[None] = serverBucket +# +# self.factory.protocol = htb.ShapedProtocolFactory(self.factory.protocol, serverFilter) +# self.factory = ThrottlingFactory(self.factory, writeLimit = 300*1024) + return self.factory - def addDirectory(self, directory): - assert directory - try: - idx = self.subdirs.index(directory) - except ValueError: - idx = len(self.subdirs) - self.subdirs.append(directory) - path = "~" + str(idx) - return path - - def removeDirectory(self, directory): - loc = self.subdirs.index(directory) - self.subdirs[loc] = '' - def render(self, ctx): return http.Response( 200, @@ -69,39 +77,40 @@ class TopLevel(resource.Resource):
TODO: eventually some stats will be shown here.