Files

47 lines
1.2 KiB
Python

"""
Basic file server over HTTP
"""
import concurrent.futures
import functools
import http.server
import socket
from infamy.util import until
class FileServer:
"""Open web server on (address, port) serving files from directory"""
def __init__(self, netns, address, port, directory):
self.address = address
self.port = port
self.directory = directory
self.netns = netns
self.process = None
self.check_addres = None
def start(self):
"""start HTTP file server"""
cmd = f"httpd -p {self.address}:{self.port} -f -h {self.directory}"
self.process = self.netns.popen(cmd.split(" "))
if self.address == "[::]":
check_address = "::1"
elif self.address == "0.0.0.0":
check_address = "127.0.0.1"
else:
check_address=self.address
cmd = f"nc -z {check_address} {self.port}".split()
until(lambda: self.netns.run(cmd).returncode == 0)
def stop(self):
"""Stop HTTP file server"""
if self.process:
self.process.terminate()
self.process.wait()
self.process = None
def __enter__(self):
self.start()
def __exit__(self, _, __, ___):
self.stop()