tor-browser

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

video-with-range.py (1547B)


      1 import re
      2 import os
      3 import json
      4 from wptserve.utils import isomorphic_decode
      5 
      6 def main(request, response):
      7    path = os.path.join(request.doc_root, u"media", "sine440.mp3")
      8    total_size = os.path.getsize(path)
      9    rewrites = json.loads(request.GET.first(b'rewrites', '[]'))
     10    range_header = request.headers.get(b'Range')
     11    range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', isomorphic_decode(range_header))
     12    start = None
     13    end = None
     14    if range_header_match:
     15        response.status = 206
     16        start, end = range_header_match.groups()
     17    if range_header:
     18        status = 206
     19    else:
     20        status = 200
     21    for rewrite in rewrites:
     22        req_start, req_end = rewrite['request']
     23        if start == req_start or req_start == '*':
     24            if end == req_end or req_end == '*':
     25                if 'response' in rewrite:
     26                    start, end = rewrite['response']
     27                if 'status' in rewrite:
     28                    status = rewrite['status']
     29 
     30    start = int(start or 0)
     31    end = int(end or total_size)
     32    headers = []
     33    if status == 206:
     34        headers.append((b"Content-Range", b"bytes %d-%d/%d" % (start, end - 1, total_size)))
     35        headers.append((b"Accept-Ranges", b"bytes"))
     36 
     37    headers.append((b"Content-Type", b"audio/mp3"))
     38    headers.append((b"Content-Length", str(end - start)))
     39    headers.append((b"Cache-Control", b"no-cache"))
     40    video_file = open(path, "rb")
     41    video_file.seek(start)
     42    content = video_file.read(end)
     43    return status, headers, content