From c7114d8306e4fd1f7f14fe5d161017bd9ba7f80e Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 30 Mar 2023 14:51:17 -0400 Subject: [PATCH] MT#56447 support destroy method Change-Id: I4fabc4505beaeb99a0b2e8ddb673f167d733f4d9 --- daemon/janus.c | 25 +++++++++++++++++++++++++ t/auto-daemon-tests-websocket.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/daemon/janus.c b/daemon/janus.c index 78926c77d..b59c69c0e 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -1407,6 +1407,27 @@ const char *janus_detach(struct websocket_message *wm, JsonReader *reader, JsonB } +const char *janus_destroy(struct websocket_message *wm, JsonReader *reader, JsonBuilder *builder, + struct janus_session *session, + int *retcode) +{ + *retcode = 458; + if (!session) + return "Session ID not found"; + + LOCK(&janus_lock); + + struct janus_session *ht_session = NULL; + g_hash_table_steal_extended(janus_sessions, &session->id, NULL, (void **) &ht_session); + if (ht_session != session) + return "Sesssion ID not found"; // already removed/destroyed + + obj_put(session); + + return NULL; +} + + const char *janus_message(struct websocket_message *wm, JsonReader *reader, JsonBuilder *builder, struct janus_session *session, const char *transaction, @@ -1780,6 +1801,10 @@ static const char *websocket_janus_process_json(struct websocket_message *wm, err = janus_detach(wm, reader, builder, session, handle_id, &retcode); break; + case CSH_LOOKUP("destroy"): // destroy session + err = janus_destroy(wm, reader, builder, session, &retcode); + break; + case CSH_LOOKUP("message"): err = janus_message(wm, reader, builder, session, transaction, handle_id, &success, &retcode); diff --git a/t/auto-daemon-tests-websocket.py b/t/auto-daemon-tests-websocket.py index 7c9a71628..4449b5099 100644 --- a/t/auto-daemon-tests-websocket.py +++ b/t/auto-daemon-tests-websocket.py @@ -309,6 +309,25 @@ class TestVideoroom(unittest.TestCase): }, ) + def destroySession(self, token, session): + eventloop.run_until_complete( + testIOJanus( + self, + { + "janus": "destroy", + "session_id": session, + "token": token, + }, + ) + ) + self.assertEqual( + self._res, + { + "janus": "success", + "session_id": session, + }, + ) + def closeConns(self): eventloop.run_until_complete(close_ws(self)) @@ -675,6 +694,8 @@ class TestVideoroom(unittest.TestCase): }, ) + self.destroySession(token, session) + def testVideoroomWebRTCAlt(self): # alternative usage: publisher == controller, no extra feed_id, no room specified @@ -967,6 +988,8 @@ class TestVideoroom(unittest.TestCase): }, ) + self.destroySession(token, session) + def testVideoroomSDESDTLS(self): (token, session, control_handle, room) = self.startVideoroom() @@ -1067,6 +1090,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) def testVideoroomSDES(self): (token, session, control_handle, room) = self.startVideoroom() @@ -1164,6 +1188,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) def testVideoroomDTLS(self): (token, session, control_handle, room) = self.startVideoroom() @@ -1263,6 +1288,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) def testVideoroomWebrtcup(self): (token, session, control_handle, room) = self.startVideoroom() @@ -1388,6 +1414,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) pub_sock.close() def testVideoroomWebRTCVideo(self): @@ -1783,6 +1810,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) def testVideoroomICE(self): (token, session, control_handle, room) = self.startVideoroom() @@ -2096,6 +2124,7 @@ class TestVideoroom(unittest.TestCase): self.assertEqual(self._res, {"janus": "ack", "session_id": session}) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) pub_sock.close() sub_sock.close() @@ -2506,6 +2535,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) def testVideoroomMultiConn(self): (token, session_1, control_handle, room) = self.startVideoroom() @@ -2833,6 +2863,7 @@ class TestVideoroom(unittest.TestCase): pub_sock_1.close() pub_sock_2.close() self.destroyVideoroom(token, session_1, control_handle, room) + self.destroySession(token, session_1) def testVideoroomMute(self): (token, session, control_handle, room) = self.startVideoroom() @@ -3320,6 +3351,7 @@ class TestVideoroom(unittest.TestCase): ) self.destroyVideoroom(token, session, control_handle, room) + self.destroySession(token, session) pub_sock_audio.close() pub_sock_video.close() sub_sock_audio.close()