-from getopt import getopt
-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 .config import readconfig
-from .GT06mod import handle_packet, make_response, LOGIN, set_config
+from . import common
+from .gps303proto import handle_packet, make_response, LOGIN
from .evstore import initdb, stow
+from .lookaside import prepare_response
CONF = "/etc/gps303.conf"
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))
- else:
- log.addHandler(SysLogHandler(address="/dev/log"))
- log.setLevel(DEBUG if "-d" in opts else INFO)
- log.info("starting with options: %s", opts)
-
- initdb(conf.get("daemon", "dbfn"))
- set_config(conf)
+def runserver(conf):
+ initdb(conf.get("storage", "dbfn"))
ctlsock = socket(AF_INET, SOCK_STREAM)
ctlsock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
- ctlsock.bind(("", conf.getint("daemon", "port")))
+ ctlsock.bind(("", conf.getint("collector", "port")))
ctlsock.listen(5)
ctlfd = ctlsock.fileno()
pollset = poll()
packet = clntsock.recv(4096)
when = time()
if packet:
- msg = handle_packet(packet, clntaddr, when)
+ msg = handle_packet(packet)
log.debug("%s from %s fd %d", msg, clntaddr, fd)
if isinstance(msg, LOGIN):
imei = msg.imei
when,
imei,
msg.length,
- msg.proto,
+ msg.PROTO,
msg.payload,
)
- response = make_response(msg)
+ kwargs = prepare_response(conf, msg)
+ response = make_response(msg, **kwargs)
if response:
try:
# Ignore possibility of blocking
del clnt_dict[fd]
if ev & ~POLLIN:
log.warning("unexpected event", ev, "on fd", fd)
+
+if __name__.endswith("__main__"):
+ runserver(common.init(log))