chiark / gitweb /
wip, config reorg
[hippotat.git] / hippotat / __init__.py
index 821923848a19d48579b31370b6638d7537a52ebd..6f0d3e87d8a2ba2dcf5f7d4e1f7ea154b716f22e 100644 (file)
@@ -144,6 +144,64 @@ def process_cfg_common_always():
   global mtu
   c.mtu = cfg.get('virtual','mtu')
 
+def process_cfg_ipif(section, varmap):
+  for d, s in varmap:
+    try: v = getattr(c, s)
+    except KeyError: pass
+    setattr(c, d, v)
+
+  print(repr(c))
+
+  c.ipif_command = cfg.get(section,'ipif', vars=c.__dict__)
+
+def process_cfg_network():
+  c.network = ipnetwork(cfg.get('virtual','network'))
+  if c.network.num_addresses < 3 + 2:
+    raise ValueError('network needs at least 2^3 addresses')
+
+def process_cfg_server():
+  try:
+    c.server = cfg.get('virtual','server')
+  except NoOptionError:
+    process_cfg_network()
+    c.server = next(c.network.hosts())
+
+class ServerAddr():
+  def __init__(self, port, addrspec):
+    self.port = port
+    # also self.addr
+    try:
+      self.addr = ipaddress.IPv4Address(addrspec)
+      self._endpointfactory = twisted.internet.endpoints.TCP4ServerEndpoint
+      self._inurl = '%s'
+    except AddressValueError:
+      self.addr = ipaddress.IPv6Address(addrspec)
+      self._endpointfactory = twisted.internet.endpoints.TCP6ServerEndpoint
+      self._inurl = '[%s]'
+  def make_endpoint(self):
+    return self._endpointfactory(reactor, self.port, self.addr)
+  def url(self):
+    url = 'http://' + (self._inurl % self.addr)
+    if self.port != 80: url += ':%d' % self.port
+    url += '/'
+    return url
+    
+def process_cfg_saddrs():
+  port = cfg.getint('server','port')
+
+  c.saddrs = [ ]
+  for addrspec in cfg.get('server','addrs').split():
+    sa = ServerAddr(port, addrspec)
+    c.saddrs.append(sa)
+
+def process_cfg_clients(constructor):
+  c.clients = [ ]
+  for cs in cfg.sections():
+    if not (':' in cs or '.' in cs): continue
+    ci = ipaddr(cs)
+    pw = cfg.get(cs, 'password')
+    constructor(ci,cs,pw)
+
 #---------- startup ----------
 
 def common_startup(defcfg):