X-Git-Url: https://git.distorted.org.uk/~mdw/hippotat/blobdiff_plain/4a7807035129c7bab2e22c7a5cea7c3ef2d415ea..1cc6968f38db0ade45242e08f9aab1b1db3e43b1:/hippotatd diff --git a/hippotatd b/hippotatd index 7e40c82..ec47c1d 100755 --- a/hippotatd +++ b/hippotatd @@ -1,4 +1,30 @@ #!/usr/bin/python3 +# +# Hippotat - Asinine IP Over HTTP program +# ./hippotatd - server main program +# +# Copyright 2017 Ian Jackson +# +# AGPLv3+ + CAFv2+ +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU Affero General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version, +# with the "CAF Login Exception" as published by Ian Jackson +# (version 2, or at your option any later version) as an Additional +# Permission. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License and the CAF Login Exception along with this program, in +# the file AGPLv3+CAFv2. If not, email Ian Jackson +# . + from hippotatlib import * @@ -10,6 +36,8 @@ import shutil import twisted.internet from twisted.web.server import NOT_DONE_YET +import twisted.web.static + import hippotatlib.ownsource from hippotatlib.ownsource import SourceShipmentPreparer @@ -206,42 +234,62 @@ class IphttpResource(NotStupidResource): log_debug(DBG.HTTP_CTRL, '...', idof=id(request)) return NOT_DONE_YET - def render_GET(self, request): - log_debug(DBG.HTTP, 'GET request') - return b'hippotat' - -class SourceResource(NotStupidResource): + # instantiator should set + # self.hippotat_sources = (source_names[0], source_names[1]) 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) + self.hippotat_sources = [None, None] + super().__init__() def render_GET(self, request): - return b'SUBDIR' + log_debug(DBG.HTTP, 'GET request') + return (''' + +hippotat +

+source +(and that of dependency packages) +available + +''' + % tuple(self.hippotat_sources)).encode('utf-8') def start_http(): resource = IphttpResource() - resource.putChild(b'source',SourceResource()) site = twisted.web.server.Site(resource) + for sa in c.saddrs: ep = sa.make_endpoint() crash_on_defer(ep.listen(site)) log_debug(DBG.INIT, 'listening on %s' % sa) + td = tempfile.mkdtemp() + + def cleanup(): + try: shutil.rmtree(td) + except FileNotFoundError: pass + + cleanups.append(cleanup) + + ssp = SourceShipmentPreparer(td) + ssp.logger = partial(log_debug, DBG.OWNSOURCE) + if DBG.OWNSOURCE in debug_set: ssp.stream_debug = sys.stdout + ssp.generate() + + for ix in (0,1): + bn = ssp.output_names[ix] + op = ssp.output_paths[ix] + resource.hippotat_sources[ix] = bn + subresource =twisted.web.static.File(op) + resource.putChild(bn.encode('utf-8'), subresource) + + reactor.callLater(0.1, (lambda: log.info('hippotatd started', dflag=False))) + #---------- config and setup ---------- -def process_cfg(putative_servers, putative_clients): +def process_cfg(_opts, putative_servers, putative_clients): + global opts + opts = _opts + global c c = ConfigResults() c.server = cfg.get('SERVER','server')