You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.8 KiB
54 lines
1.8 KiB
3 years ago
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||
|
import argparse
|
||
|
import time
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import os
|
||
|
import threading
|
||
|
args = None
|
||
|
outerthread = None
|
||
|
|
||
|
barrier = threading.Barrier(2)
|
||
|
|
||
|
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
|
||
|
def do_GET(self):
|
||
|
barrier.wait()
|
||
|
self.send_response(200)
|
||
|
self.end_headers()
|
||
|
data = b'D'
|
||
|
|
||
|
if args.speed_limit:
|
||
|
slow_deadline = time.time()+args.limit_duration
|
||
|
|
||
|
while time.time() < slow_deadline:
|
||
|
self.wfile.write(data)
|
||
|
if args.speed_limit:
|
||
|
time.sleep(1.1)
|
||
|
|
||
|
data = data * 100
|
||
|
self.wfile.write(data)
|
||
|
self.close_connection = True
|
||
|
|
||
|
def runServer(fileName):
|
||
|
httpd = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler)
|
||
|
with open(fileName,"w") as f:
|
||
|
f.write('http://localhost:{}/test'.format(httpd.socket.getsockname()[1]))
|
||
|
httpd.handle_request()
|
||
|
os.remove(fileName)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument('--speed_limit', help='transfer rate limitation', action='store_true',default=False)
|
||
|
parser.add_argument('--limit_duration', help='duration of the transfer rate limitation',default=1, type=float)
|
||
|
parser.add_argument('--file', help='file to write the url to connect to')
|
||
|
parser.add_argument('--subprocess', action='store_true')
|
||
|
args = parser.parse_args()
|
||
|
if not args.subprocess:
|
||
|
subprocess.Popen([sys.executable]+sys.argv+['--subprocess'],stdin=subprocess.DEVNULL, stderr=subprocess.DEVNULL,stdout=subprocess.DEVNULL)
|
||
|
else:
|
||
|
serverThread = threading.Thread(target=runServer,args=(args.file,))
|
||
|
serverThread.daemon = True
|
||
|
serverThread.start()
|
||
|
barrier.wait(60)
|
||
|
serverThread.join(20)
|