aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2018-02-25 21:10:16 +0000
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2018-04-04 15:35:11 +0100
commite7ae51fcaac7d100fc1f22f6c6df951776530b5b (patch)
tree9ced8ec9b1455dea2f7e0d5f2a9427ac7f128c91
parentb7749a72b44c0999ba5fe869b705dd440f3f6d49 (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.py33
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)