X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=gps303%2Fcollector.py;h=e63da322f6ef1fb7c5f5da11d945c610aa135958;hb=5e1e7a4d37a1e149d5e899dada7b55a863cd8e64;hp=921833c083be0ac8aecda838a338a4f72b5f818c;hpb=ecb31fcdc354471235ba44edbad3b24a6bded905;p=loctrkd.git diff --git a/gps303/collector.py b/gps303/collector.py index 921833c..e63da32 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -1,6 +1,7 @@ """ TCP server that communicates with terminals """ from logging import getLogger +from os import umask from socket import socket, AF_INET6, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR from time import time from struct import pack @@ -100,6 +101,7 @@ class Clients: def add(self, clntsock, clntaddr): fd = clntsock.fileno() + log.info("Start serving fd %d from %s", fd, clntaddr) self.by_fd[fd] = Client(clntsock, clntaddr) return fd @@ -121,6 +123,12 @@ class Clients: if proto_of_message(packet) == LOGIN.PROTO: # Could do blindly... self.by_imei[clnt.imei] = clnt result.append((clnt.imei, when, peeraddr, packet)) + log.debug( + "Received from %s (IMEI %s): %s", + peeraddr, + clnt.imei, + packet.hex(), + ) return result def response(self, resp): @@ -133,9 +141,11 @@ class Clients: def runserver(conf): zctx = zmq.Context() zpub = zctx.socket(zmq.PUB) - zpub.bind(conf.get("collector", "publishurl")) zpull = zctx.socket(zmq.PULL) + oldmask = umask(0o117) + zpub.bind(conf.get("collector", "publishurl")) zpull.bind(conf.get("collector", "listenurl")) + umask(oldmask) tcpl = socket(AF_INET6, SOCK_STREAM) tcpl.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) tcpl.bind(("", conf.getint("collector", "port"))) @@ -156,7 +166,16 @@ def runserver(conf): while True: try: msg = zpull.recv(zmq.NOBLOCK) - tosend.append(Resp(msg)) + zmsg = Resp(msg) + zpub.send( + Bcast( + is_incoming=False, + proto=proto_of_message(zmsg.packet), + imei=zmsg.imei, + packet=zmsg.packet, + ).packed + ) + tosend.append(zmsg) except zmq.Again: break elif sk == tcpfd: