X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht%2FHTTPServer.py;h=20f94cdfa5e3088193591455b269a1fbd6963b15;hb=f510a1c7954bf43a8817b92c31e05bdb3a891dd5;hp=38c7c0912d7da63815e40638ca1cc0ca61e468a9;hpb=d1a2027b26e3791e7e05f1247f00c279ce46ce99;p=quix0rs-apt-p2p.git diff --git a/apt_dht/HTTPServer.py b/apt_dht/HTTPServer.py index 38c7c09..20f94cd 100644 --- a/apt_dht/HTTPServer.py +++ b/apt_dht/HTTPServer.py @@ -1,6 +1,10 @@ +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 @@ -40,10 +44,10 @@ 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): @@ -51,16 +55,19 @@ class TopLevel(resource.Resource): 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 setDirectories(self, dirs): - self.subdirs = {} - for k in dirs: - # Don't allow empty subdirectory - if k: - self.subdirs[k] = dirs[k] - log.msg('new subdirectories initialized') - def render(self, ctx): return http.Response( 200, @@ -70,10 +77,19 @@ class TopLevel(resource.Resource):

TODO: eventually some stats will be shown here.""") def locateChild(self, request, segments): + log.msg('Got HTTP request for %s from %s' % (request.uri, request.remoteAddr)) name = segments[0] - if name in self.subdirs: - log.msg('Sharing %s with %s' % (request.uri, request.remoteAddr)) - return static.File(self.subdirs[name].path), segments[1:] + if name == '~': + if len(segments) != 2: + log.msg('Got a malformed request from %s' % request.remoteAddr) + return None, () + hash = unquote_plus(segments[1]) + files = self.db.lookupHash(hash) + if files: + log.msg('Sharing %s with %s' % (files[0]['path'].path, request.remoteAddr)) + return static.File(files[0]['path'].path), () + else: + log.msg('Hash could not be found in database: %s' % hash) if request.remoteAddr.host != "127.0.0.1": log.msg('Blocked illegal access to %s from %s' % (request.uri, request.remoteAddr)) @@ -83,6 +99,9 @@ class TopLevel(resource.Resource): return FileDownloader(self.directory.path, self.manager), segments[0:] else: return self, () + + log.msg('Got a malformed request for "%s" from %s' % (request.uri, request.remoteAddr)) + return None, () if __name__ == '__builtin__': # Running from twistd -y