blob: fb8a6c78510d8aedeaaeeede43f2e85288074bd0 [file] [log] [blame]
Holger Hans Peter Freythere7ae51f2018-02-25 21:10:16 +00001
Pau Espin Pedrole8bbcbf2020-04-10 19:51:31 +02002from osmo_gsm_tester.core import log
Holger Hans Peter Freythere7ae51f2018-02-25 21:10:16 +00003
4import time
5
6
7class EventServer(log.Origin):
8 """
9 Listen for AF_UNIX/SOCK_DGRAM messages from test apps and
10 forward them.
11 """
12 def __init__(self, name, path):
13 super().__init__(log.C_RUN, name)
14 self._path = path
15 self._handlers = []
16
17 def register(self, cb):
18 self._handlers.append(cb)
19
20 def server_path(self):
21 return self._path
22
23 def listen(self, loop):
24 self._server = loop.create_unix_server(self.read_cb, self._path)
25
26 def read_cb(self, obj, mask):
27 # addresss doesn't give us the remote but currently we don't
28 # need it.
Holger Hans Peter Freyther05895a92018-06-17 19:31:46 +010029 data, ancdata, flags, addr = self._server.recvmsg(4096, 4096)
Holger Hans Peter Freythere7ae51f2018-02-25 21:10:16 +000030 now = time.clock_gettime(time.CLOCK_MONOTONIC)
31 for handler in self._handlers:
Holger Hans Peter Freyther05895a92018-06-17 19:31:46 +010032 handler(data, addr, now)