From: Ian Jackson Date: Mon, 20 Mar 2017 20:08:37 +0000 (+0000) Subject: move more stuff X-Git-Tag: hippotat/1.0.0~55^2~222 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=commitdiff_plain;h=ae7c7784fc4505a2a6b0f88bffd60801ee1ebdb1 move more stuff --- diff --git a/hippotat/__init__.py b/hippotat/__init__.py index d25ff06..6af49b6 100644 --- a/hippotat/__init__.py +++ b/hippotat/__init__.py @@ -5,12 +5,22 @@ signal.signal(signal.SIGINT, signal.SIG_DFL) import twisted from twisted.internet import reactor +from twisted.logger import LogLevel import ipaddress from ipaddress import AddressValueError import hippotat.slip as slip +from optparse import OptionParser +from configparser import ConfigParser +from configparser import NoOptionError + +import collections + +cfg = ConfigParser() +optparser = OptionParser() + #---------- packet parsing ---------- def packet_addrs(packet): @@ -104,3 +114,34 @@ class PacketQueue(): try: (dummy, packet) = self._pq[0] except IndexError: return None return packet + +#---------- error handling ---------- + +def crash(err): + print('CRASH ', err, file=sys.stderr) + try: reactor.stop() + except twisted.internet.error.ReactorNotRunning: pass + +def crash_on_defer(defer): + defer.addErrback(lambda err: crash(err)) + +def crash_on_critical(event): + if event.get('log_level') >= LogLevel.critical: + crash(twisted.logger.formatEvent(event)) + +#---------- startup ---------- + +def common_startup(defcfg): + twisted.logger.globalLogPublisher.addObserver(crash_on_critical) + + optparser.add_option('-c', '--config', dest='configfile', + default='/etc/hippotat/config') + (opts, args) = optparser.parse_args() + if len(args): optparser.error('no non-option arguments please') + + cfg.read_string(defcfg) + cfg.read(opts.configfile) + +def common_run(): + reactor.run() + print('CRASHED (end)', file=sys.stderr) diff --git a/server b/server index 29321e9..66de6e5 100755 --- a/server +++ b/server @@ -8,17 +8,10 @@ import os import twisted.internet import twisted.internet.endpoints from twisted.web.server import NOT_DONE_YET -from twisted.logger import LogLevel #import twisted.web.server import Site #from twisted.web.resource import Resource -from optparse import OptionParser -from configparser import ConfigParser -from configparser import NoOptionError - -import collections - import syslog clients = { } @@ -48,20 +41,6 @@ max_request_time = 121 target_requests_outstanding = 10 ''' -#---------- error handling ---------- - -def crash(err): - print('CRASH ', err, file=sys.stderr) - try: reactor.stop() - except twisted.internet.error.ReactorNotRunning: pass - -def crash_on_defer(defer): - defer.addErrback(lambda err: crash(err)) - -def crash_on_critical(event): - if event.get('log_level') >= LogLevel.critical: - crash(twisted.logger.formatEvent(event)) - #---------- "router" ---------- def route(packet, saddr, daddr): @@ -256,25 +235,10 @@ def process_cfg(): ipif_command = cfg.get('server','ipif', vars=iic_vars) def startup(): - global cfg - - op = OptionParser() - op.add_option('-c', '--config', dest='configfile', - default='/etc/hippottd/server.conf') - global opts - (opts, args) = op.parse_args() - if len(args): op.error('no non-option arguments please') - - twisted.logger.globalLogPublisher.addObserver(crash_on_critical) - - cfg = ConfigParser() - cfg.read_string(defcfg) - cfg.read(opts.configfile) + common_startup(defcfg) process_cfg() - start_ipif(ipif_command, route) start_http() startup() -reactor.run() -print('CRASHED (end)', file=sys.stderr) +common_run() diff --git a/test.cfg b/test.cfg index c8cba03..51bd968 100644 --- a/test.cfg +++ b/test.cfg @@ -4,3 +4,14 @@ ipif = PATH=/usr/local/sbin:/sbin:/usr/sbin:$PATH really /home/ian/things/Userv/ [virtual] network = 192.0.2.0/24 + +[192.0.2.3] +password = sesame + +# normally only a client would have the [client] section and +# only a server the other sections + +[client] +server = http://127.0.0.1:8099/ +password = sesame +virtual = 192.0.2.3