From 4a7807035129c7bab2e22c7a5cea7c3ef2d415ea Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 4 Apr 2017 17:46:47 +0100 Subject: [PATCH] ownsource: tie in (part 1) and cleanup stuff --- hippotatd | 44 ++++++++++++++++++++++++++++++++++++++++- hippotatlib/__init__.py | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/hippotatd b/hippotatd index 3adf9b3..7e40c82 100755 --- a/hippotatd +++ b/hippotatd @@ -3,15 +3,23 @@ from hippotatlib import * import os +import tempfile +import atexit +import shutil import twisted.internet from twisted.web.server import NOT_DONE_YET +import hippotatlib.ownsource +from hippotatlib.ownsource import SourceShipmentPreparer + #import twisted.web.server import Site #from twisted.web.resource import Resource import syslog +cleanups = [ ] + clients = { } #---------- "router" ---------- @@ -203,6 +211,22 @@ class IphttpResource(NotStupidResource): return b'hippotat' class SourceResource(NotStupidResource): + def __init__(self): + td = tempfile.mkdtemp() + + def cleanup(): + try: shutil.rmtree(td) + except FileNotFoundError: pass + + cleanups.append(cleanup) + + self._ssp = SourceShipmentPreparer(td) + self._ssp.logger = self.log + self._ssp.generate() + + def log(self, m): + log_debug(DBG.OWNSOURCE, m) + def render_GET(self, request): return b'SUBDIR' @@ -216,7 +240,7 @@ def start_http(): log_debug(DBG.INIT, 'listening on %s' % sa) #---------- config and setup ---------- - + def process_cfg(putative_servers, putative_clients): global c c = ConfigResults() @@ -249,7 +273,25 @@ def process_cfg(putative_servers, putative_clients): ('peer', 'vrelay'), ('rnets','vnetwork'))) +def catch_termination(): + def run_cleanups(): + for cleanup in cleanups: + cleanup() + + atexit.register(run_cleanups) + + def signal_handler(name, sig, *args): + signal.signal(sig, signal.SIG_DFL) + print('exiting due to %s' % name, file=sys.stderr) + run_cleanups() + os.kill(os.getpid(), sig) + raise RuntimeError('did not die due to signal %s !' % name) + + for sig in (signal.SIGINT, signal.SIGTERM): + signal.signal(sig, partial(signal_handler, sig.name)) + common_startup(process_cfg) +catch_termination() ipif = start_ipif(c.ipif_command, (lambda p,s,d: route(p,"[ipif]",s,d))) start_http() common_run() diff --git a/hippotatlib/__init__.py b/hippotatlib/__init__.py index 48ece83..cbcd967 100644 --- a/hippotatlib/__init__.py +++ b/hippotatlib/__init__.py @@ -40,6 +40,7 @@ class DBG(twisted.python.constants.Names): CONFIG = NamedConstant() ROUTE = NamedConstant() DROP = NamedConstant() + OWNSOURCE = NamedConstant() FLOW = NamedConstant() HTTP = NamedConstant() TWISTED = NamedConstant() -- 2.30.2