aboutsummaryrefslogtreecommitdiff
path: root/service.py
diff options
context:
space:
mode:
authorJonathan Weth <mail@jonathanweth.de>2020-07-24 15:38:52 +0200
committerJonathan Weth <mail@jonathanweth.de>2020-07-24 15:38:52 +0200
commit4db238a1395b33e76711d310f92090f803af41d4 (patch)
tree40fe376960d4b223725428906ab46ee49e769299 /service.py
parent1ab805a06575658d99954ef3f559a6788f9156a7 (diff)
parent10e98e827e71c7a415e46b633381d56dbb1cc97c (diff)
downloadRWA.Support.SessionService-4db238a1395b33e76711d310f92090f803af41d4.tar.gz
RWA.Support.SessionService-4db238a1395b33e76711d310f92090f803af41d4.tar.bz2
RWA.Support.SessionService-4db238a1395b33e76711d310f92090f803af41d4.zip
Merge branch 'pr/bug-invalid-pid-dbus' into 'master'
Prevent crashing when asking for status with invalid pid See merge request remotewebapp/session-service!3
Diffstat (limited to 'service.py')
-rwxr-xr-xservice.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/service.py b/service.py
index 1faae4d..4c4e927 100755
--- a/service.py
+++ b/service.py
@@ -47,14 +47,21 @@ class RWAService(dbus.service.Object):
self._update_session(pid)
return self._get_status(pid)
- @dbus.service.method("org.ArcticaProject.RWA", in_signature="i")
+ @dbus.service.method("org.ArcticaProject.RWA", in_signature="i", out_signature="s")
def stop(self, pid: int):
"""Stop a remote session."""
- session = self.sessions[pid]
+ try:
+ session = self.sessions[pid]
+ except KeyError:
+ return json.dumps({"pid": pid, "status": "stopped"}, sort_keys=True)
session.stop()
+ return json.dumps({"id": pid, "status": "stopped"}, sort_keys=True)
def _get_status(self, pid: int) -> str:
- session = self.sessions[pid]
+ try:
+ session = self.sessions[pid]
+ except KeyError:
+ return json.dumps({"id": pid, "status": "dead"}, sort_keys=True)
return json.dumps(session.status)
def _ensure_update_service(self):
@@ -65,7 +72,13 @@ class RWAService(dbus.service.Object):
def _update_session(self, pid: int):
"""Update the status of a session."""
- session = self.sessions[pid]
+ try:
+ session = self.sessions[pid]
+ except KeyError:
+ print(f"Session #{pid}")
+ print("Session is dead.")
+ return
+
print(f"Session #{session.pid}")
# Check if VNC process is still running