X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=blobdiff_plain;f=server;h=e3fef89a02bf5300718b2e96cfedfdb886d39823;hp=2daf0b0223a2f692a1494629cd4db39890440f3c;hb=a4e03162bd84efc04c28d081ccf2c89f4efa796e;hpb=1321ad5f1dc05a97d58c4750863e645016fe0aa8 diff --git a/server b/server index 2daf0b0..e3fef89 100755 --- a/server +++ b/server @@ -18,7 +18,7 @@ clients = { } def route(packet, saddr, daddr): print('TRACE ', saddr, daddr, packet) - try: client = clients[daddr] + try: dclient = clients[daddr] except KeyError: dclient = None if dclient is not None: dclient.queue_outbound(packet) @@ -102,23 +102,12 @@ class Client(): break # request, and also some non-expired packets - while True: - packet = self.pq.popleft() - if packet is None: break - - encoded = slip.encode(packet) - - if request.sentLength > 0: - if (request.sentLength + len(slip.delimiter) - + len(encoded) > self.max_batch_down): - break - request.write(slip.delimiter) - - request.write(encoded) - self._pq.popLeft() + self._pq.process((lambda: request.sentLength), + request.write, + self.max_batch_down) assert(request.sentLength) - self._rq.popLeft() + self._rq.popleft() request.finish() # round again, looking for more to do @@ -126,25 +115,27 @@ class Client(): request = self._rq.popleft() request.finish() -class IphttpResource(twisted.web.resource.Resource): - isLeaf = True - def render_POST(self, request): - # find client, update config, etc. - metadata = request.args['m'] - (ci_s, pw, tro) = metadata.split(b'\n')[0:3] - ci = ipaddr(ci_s) - cl = clients[ci] - if pw != cl.pw: raise ValueError('bad password') +def process_request(request): + # find client, update config, etc. + metadata = request.args['m'] + (ci_s, pw, tro) = metadata.split(b'\n')[0:3] + ci = ipaddr(ci_s) + cl = clients[ci] + if pw != cl.pw: raise ValueError('bad password') - if pw != cl.target_requests_outstanding: - raise ... + if pw != cl.target_requests_outstanding: + raise ... - try: d = request.args['d'] - except KeyError: d = '' + try: d = request.args['d'] + except KeyError: d = '' - cl.process_arriving_data(d) - cl.new_request(request) + cl.process_arriving_data(d) + cl.new_request(request) +class IphttpResource(twisted.web.resource.Resource): + isLeaf = True + def render_POST(self, request): + process_request(request) def render_GET(self, request): return b'hippotat'