diff options
-rw-r--r-- | src/ogClient.py | 30 | ||||
-rw-r--r-- | src/ogRest.py | 3 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/ogClient.py b/src/ogClient.py index 5fff77c..45f7007 100644 --- a/src/ogClient.py +++ b/src/ogClient.py @@ -35,6 +35,10 @@ class ogClient: self.mode = self.CONFIG['opengnsys']['mode'] if self.mode not in {'virtual', 'live', 'linux', 'windows'}: raise ValueError('Mode not supported.') + if self.mode in {'linux', 'windows'}: + self.event_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.event_sock.setblocking(0) + self.event_sock.bind(('127.0.0.1', 55885)) if self.CONFIG['samba']['activate']: assert('user' in self.CONFIG['samba']) @@ -47,9 +51,29 @@ class ogClient: def get_socket(self): return self.sock + def get_event_socket(self): + return self.event_sock + def get_state(self): return self.state + def send_event_hint(self, message): + try: + event, action, user = message.split(" ") + logging.warning("%s, %s, %s", event, action, user) + except: + logging.warning("Error parsing session datagram") + return + + if (event != "session" or + action not in ['start', 'stop'] or + not user): + logging.warning("Invalid value in session datagram: %s", message) + + payload = jsonBody({'event': event, 'action': action, 'user': user}) + response = restResponse(ogResponses.EARLY_HINTS, payload) + self.send(response.get()) + def cleanup(self): self.data = "" self.content_len = 0 @@ -138,6 +162,7 @@ class ogClient: def run(self): while 1: sock = self.get_socket() + event_sock = self.get_event_socket() state = self.get_state() if state == State.CONNECTING: @@ -147,7 +172,7 @@ class ogClient: elif state == State.FORCE_DISCONNECTED: return 0 else: - readset = [ sock ] + readset = [ sock, event_sock ] if event_sock else [ sock ] writeset = [ ] exceptset = [ ] @@ -158,5 +183,8 @@ class ogClient: self.receive() elif state == State.CONNECTING and sock in exception: self.connect2() + elif state == State.RECEIVING and event_sock in readable: + message = event_sock.recv(4096).decode('utf-8').rstrip() + self.send_event_hint(message) else: print('wrong state, not ever happen!' + str(state)) diff --git a/src/ogRest.py b/src/ogRest.py index db6a60e..0207af0 100644 --- a/src/ogRest.py +++ b/src/ogRest.py @@ -54,6 +54,8 @@ class restResponse(): self.msg = 'HTTP/1.0 401 Unauthorized' elif response == ogResponses.SERVICE_UNAVAILABLE: self.msg = 'HTTP/1.0 503 Service Unavailable' + elif response == ogResponses.EARLY_HINTS: + self.msg = 'HTTP/1.0 103 Early Hints' else: return self.msg @@ -244,6 +246,7 @@ class ogResponses(Enum): INTERNAL_ERR=3 UNAUTHORIZED=4 SERVICE_UNAVAILABLE=5 + EARLY_HINTS=6 class ogRest(): LOG_LENGTH = 32 |