X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=gps303%2F__main__.py;h=5e9a93547daef39425bf9befae0a484ab6f68938;hb=f85690956cf13e342ac02dea298fe876c4163c95;hp=0f6484a01fb8d1712933b42ba0326ac7de3280d4;hpb=d75412f9c32046da5659728e82adaa9607dd0b74;p=loctrkd.git diff --git a/gps303/__main__.py b/gps303/__main__.py index 0f6484a..5e9a935 100755 --- a/gps303/__main__.py +++ b/gps303/__main__.py @@ -1,29 +1,24 @@ -from logging import getLogger, StreamHandler, DEBUG, INFO -from logging.handlers import SysLogHandler +from logging import getLogger from select import poll, POLLIN, POLLERR, POLLHUP, POLLPRI from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR import sys from time import time -from .GT06mod import handle_packet, make_response, LOGIN +from . import common +from .gps303proto import handle_packet, make_response, LOGIN from .evstore import initdb, stow +from .lookaside import prepare_response -PORT = 4303 -log = getLogger("gps303") +CONF = "/etc/gps303.conf" -if __name__.endswith("__main__"): - if sys.stdout.isatty(): - log.addHandler(StreamHandler(sys.stderr)) - log.setLevel(DEBUG) - else: - log.addHandler(SysLogHandler(address="/dev/log")) - log.setLevel(INFO) +log = getLogger("gps303") - initdb("/tmp/gps303.sqlite") +def runserver(conf): + initdb(conf.get("storage", "dbfn")) ctlsock = socket(AF_INET, SOCK_STREAM) ctlsock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) - ctlsock.bind(("", PORT)) + ctlsock.bind(("", conf.getint("collector", "port"))) ctlsock.listen(5) ctlfd = ctlsock.fileno() pollset = poll() @@ -60,13 +55,21 @@ if __name__.endswith("__main__"): packet = clntsock.recv(4096) when = time() if packet: - msg = handle_packet(packet, clntaddr, when) - log.debug("%s from %s fd %d'", msg, clntaddr, fd) + msg = handle_packet(packet) + log.debug("%s from %s fd %d", msg, clntaddr, fd) if isinstance(msg, LOGIN): imei = msg.imei clnt_dict[fd] = (clntsock, clntaddr, imei) - stow(clntaddr, when, imei, msg.proto, msg.payload) - response = make_response(msg) + stow( + clntaddr, + when, + imei, + msg.length, + msg.PROTO, + msg.payload, + ) + kwargs = prepare_response(conf, msg) + response = make_response(msg, **kwargs) if response: try: # Ignore possibility of blocking @@ -74,9 +77,13 @@ if __name__.endswith("__main__"): except OSError as e: log.debug("sending to fd %d error %s", fd, e) else: + # TODO: Also disconnect on HIBERNATION log.info("disconnect fd %d imei %s", fd, imei) pollset.unregister(fd) clntsock.close() del clnt_dict[fd] if ev & ~POLLIN: log.warning("unexpected event", ev, "on fd", fd) + +if __name__.endswith("__main__"): + runserver(common.init(log))