diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2018-02-25 21:10:16 +0000 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2018-04-04 15:35:11 +0100 |
commit | e7ae51fcaac7d100fc1f22f6c6df951776530b5b (patch) | |
tree | 9ced8ec9b1455dea2f7e0d5f2a9427ac7f128c91 | |
parent | b7749a72b44c0999ba5fe869b705dd440f3f6d49 (diff) |
ms: Create an event server to handle Unix datagram messages
Create an EventServer that will create a unix domain socket and
dispatch incoming datagram messages. The lua remotes are not
passing credentials so this is a one way communication channel
for now. Tests can register to handle the message.
Change-Id: Ida97c570e8e741410f2dba4a231a8058ca96da25
-rw-r--r-- | src/osmo_ms_driver/event_server.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/osmo_ms_driver/event_server.py b/src/osmo_ms_driver/event_server.py new file mode 100644 index 0000000..6b0232b --- /dev/null +++ b/src/osmo_ms_driver/event_server.py @@ -0,0 +1,33 @@ + +from osmo_gsm_tester import log +from functools import partial + +import time + + +class EventServer(log.Origin): + """ + Listen for AF_UNIX/SOCK_DGRAM messages from test apps and + forward them. + """ + def __init__(self, name, path): + super().__init__(log.C_RUN, name) + self._path = path + self._handlers = [] + + def register(self, cb): + self._handlers.append(cb) + + def server_path(self): + return self._path + + def listen(self, loop): + self._server = loop.create_unix_server(self.read_cb, self._path) + + def read_cb(self, obj, mask): + # addresss doesn't give us the remote but currently we don't + # need it. + (data, address) = self._server.recvfrom(4096) + now = time.clock_gettime(time.CLOCK_MONOTONIC) + for handler in self._handlers: + handler(data, now) |