tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

infinite-slow-response.py (986B)


      1 import time
      2 
      3 
      4 def url_dir(request):
      5    return u'/'.join(request.url_parts.path.split(u'/')[:-1]) + u'/'
      6 
      7 
      8 def stash_write(request, key, value):
      9    """Write to the stash, overwriting any previous value"""
     10    request.server.stash.take(key, url_dir(request))
     11    request.server.stash.put(key, value, url_dir(request))
     12 
     13 
     14 def main(request, response):
     15    stateKey = request.GET.first(b"stateKey", b"")
     16    abortKey = request.GET.first(b"abortKey", b"")
     17 
     18    if stateKey:
     19        stash_write(request, stateKey, 'open')
     20 
     21    response.headers.set(b"Content-type", b"text/plain")
     22    response.write_status_headers()
     23 
     24    # Writing an initial 2k so browsers realise it's there. *shrug*
     25    response.writer.write(b"." * 2048)
     26 
     27    while True:
     28        if not response.writer.write(b"."):
     29            break
     30        if abortKey and request.server.stash.take(abortKey, url_dir(request)):
     31            break
     32        time.sleep(0.01)
     33 
     34    if stateKey:
     35        stash_write(request, stateKey, 'closed')