]> average.org Git - loctrkd.git/blobdiff - gps303/__main__.py
rename protocol module to "gps303proto"
[loctrkd.git] / gps303 / __main__.py
index 0f6484a01fb8d1712933b42ba0326ac7de3280d4..d3d6d1e7bfc5d0c8bf54205e1039cebcbcee5bef 100755 (executable)
@@ -1,3 +1,4 @@
+from getopt import getopt
 from logging import getLogger, StreamHandler, DEBUG, INFO
 from logging.handlers import SysLogHandler
 from select import poll, POLLIN, POLLERR, POLLHUP, POLLPRI
 from logging import getLogger, StreamHandler, DEBUG, INFO
 from logging.handlers import SysLogHandler
 from select import poll, POLLIN, POLLERR, POLLHUP, POLLPRI
@@ -5,25 +6,33 @@ from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
 import sys
 from time import time
 
 import sys
 from time import time
 
-from .GT06mod import handle_packet, make_response, LOGIN
+from .config import readconfig
+from .gps303proto import handle_packet, make_response, LOGIN, set_config
 from .evstore import initdb, stow
 from .evstore import initdb, stow
+from .lookaside import prepare_response
+
+CONF = "/etc/gps303.conf"
 
 
-PORT = 4303
 log = getLogger("gps303")
 
 if __name__.endswith("__main__"):
 log = getLogger("gps303")
 
 if __name__.endswith("__main__"):
+    opts, _ = getopt(sys.argv[1:], "c:d")
+    opts = dict(opts)
+    conf = readconfig(opts["-c"] if "-c" in opts else CONF)
+
     if sys.stdout.isatty():
         log.addHandler(StreamHandler(sys.stderr))
     if sys.stdout.isatty():
         log.addHandler(StreamHandler(sys.stderr))
-        log.setLevel(DEBUG)
     else:
         log.addHandler(SysLogHandler(address="/dev/log"))
     else:
         log.addHandler(SysLogHandler(address="/dev/log"))
-        log.setLevel(INFO)
+    log.setLevel(DEBUG if "-d" in opts else INFO)
+    log.info("starting with options: %s", opts)
 
 
-    initdb("/tmp/gps303.sqlite")
+    initdb(conf.get("daemon", "dbfn"))
+    set_config(conf)
 
     ctlsock = socket(AF_INET, SOCK_STREAM)
     ctlsock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 
     ctlsock = socket(AF_INET, SOCK_STREAM)
     ctlsock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
-    ctlsock.bind(("", PORT))
+    ctlsock.bind(("", conf.getint("daemon", "port")))
     ctlsock.listen(5)
     ctlfd = ctlsock.fileno()
     pollset = poll()
     ctlsock.listen(5)
     ctlfd = ctlsock.fileno()
     pollset = poll()
@@ -61,12 +70,20 @@ if __name__.endswith("__main__"):
                     when = time()
                     if packet:
                         msg = handle_packet(packet, clntaddr, when)
                     when = time()
                     if packet:
                         msg = handle_packet(packet, clntaddr, when)
-                        log.debug("%s from %s fd %d'", msg, clntaddr, fd)
+                        log.debug("%s from %s fd %d", msg, clntaddr, fd)
                         if isinstance(msg, LOGIN):
                             imei = msg.imei
                             clnt_dict[fd] = (clntsock, clntaddr, imei)
                         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
                         if response:
                             try:
                                 # Ignore possibility of blocking
@@ -74,6 +91,7 @@ if __name__.endswith("__main__"):
                             except OSError as e:
                                 log.debug("sending to fd %d error %s", fd, e)
                     else:
                             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()
                         log.info("disconnect fd %d imei %s", fd, imei)
                         pollset.unregister(fd)
                         clntsock.close()