chiark / gitweb /
move more stuff
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 20 Mar 2017 20:08:37 +0000 (20:08 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 20 Mar 2017 20:08:59 +0000 (20:08 +0000)
hippotat/__init__.py
server
test.cfg

index d25ff06..6af49b6 100644 (file)
@@ -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 (executable)
--- 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()
index c8cba03..51bd968 100644 (file)
--- 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