From f37aff1452ce6ba3cbf02abed72a51811cea5ab7 Mon Sep 17 00:00:00 2001 From: Sebastian Reimers Date: Sat, 20 Sep 2025 20:55:10 +0200 Subject: [PATCH 01/26] sip: fix session hangup handling --- src/sip.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/src/sip.c b/src/sip.c index 3583791..2a013df 100644 --- a/src/sip.c +++ b/src/sip.c @@ -1,7 +1,27 @@ -#include #include static struct ua *sip_ua; +static struct list sip_sessl = LIST_INIT; + +struct sip_sess_e { + struct le le; + struct call *call; + struct session *sess; +}; + + +static void destruct_sess_e(void *arg) +{ + struct sip_sess_e *e = arg; + + char *json = NULL; + user_event_json(&json, USER_DELETED, e->sess); + sl_ws_send_event(e->sess, json); + mem_deref(json); + + list_unlink(&e->le); + mem_deref(e->sess); +} static void ua_event_handler(enum bevent_ev ev, struct bevent *event, @@ -10,6 +30,8 @@ static void ua_event_handler(enum bevent_ev ev, struct bevent *event, struct mix *mix = arg; struct call *call = bevent_get_call(event); const struct sip_msg *msg = bevent_get_msg(event); + struct sip_sess_e *e = NULL; + int err = 0; switch (ev) { @@ -28,8 +50,21 @@ static void ua_event_handler(enum bevent_ev ev, struct bevent *event, pl_set_str(&peer_pl, peer); - slmix_session_alloc(&sess, mix, NULL, NULL, &peer_pl, false, - true); + err = slmix_session_alloc(&sess, mix, NULL, NULL, &peer_pl, + false, true); + if (err) + goto hangup; + + e = mem_zalloc(sizeof(struct sip_sess_e), destruct_sess_e); + if (!e) { + mem_deref(sess); + goto hangup; + } + + e->call = call; + e->sess = sess; + + list_append(&sip_sessl, &e->le, e); pl_strcpy(&peer_pl, sess->user->id, sizeof(sess->user->id)); @@ -50,18 +85,34 @@ static void ua_event_handler(enum bevent_ev ev, struct bevent *event, slmix_disp_enable(mix, peer, true); + slmix_source_append_all(mix, call, peer); break; case BEVENT_CALL_CLOSED: { slmix_source_deref(mix, call, NULL); + struct le *le; + struct le *le_tmp; + LIST_FOREACH_SAFE(&sip_sessl, le, le_tmp) + { + e = le->data; + + if (e->call != call) + continue; + + mem_deref(e); + } break; } default: break; } + + return; +hangup: + call_hangup(call, 500, "Server Error"); } From 5fcb40060e44a0086fccc9df66425e2e6c017e27 Mon Sep 17 00:00:00 2001 From: Sebastian Reimers Date: Wed, 17 Sep 2025 18:04:40 +0200 Subject: [PATCH 02/26] sip: add pidx --- src/sip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sip.c b/src/sip.c index 2a013df..f48e057 100644 --- a/src/sip.c +++ b/src/sip.c @@ -83,7 +83,7 @@ static void ua_event_handler(enum bevent_ev ev, struct bevent *event, sess->connected = true; sess->user->video = true; - slmix_disp_enable(mix, peer, true); + sess->user->pidx = slmix_disp_enable(mix, peer, true); slmix_source_append_all(mix, call, peer); From 51e9986bb6eb4d4d5fde7f3793b8c7b312688480 Mon Sep 17 00:00:00 2001 From: Sebastian Reimers Date: Tue, 16 Sep 2025 17:53:44 +0200 Subject: [PATCH 03/26] enable source view --- src/sess.c | 2 +- webui/src/components/WebrtcVideo.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sess.c b/src/sess.c index 0a2d1f8..0be72c1 100644 --- a/src/sess.c +++ b/src/sess.c @@ -138,7 +138,7 @@ static void pc_estab_handler(struct media_track *media, void *arg) stream_enable_tx(media_get_stream(media), true); /* Enable/Disable Source view */ -#if 0 +#if 1 if (!sess->user->host) slmix_source_append_all(sess->mix, NULL, sess->user->id); diff --git a/webui/src/components/WebrtcVideo.vue b/webui/src/components/WebrtcVideo.vue index 05c38f3..38a67ba 100644 --- a/webui/src/components/WebrtcVideo.vue +++ b/webui/src/components/WebrtcVideo.vue @@ -1,6 +1,6 @@