From 7bae4a780c0f32ec654b204124f98edc307c43cb Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 18 Oct 2024 09:48:14 +0200 Subject: [PATCH] MT#60476 Add `call_media_get_top_ms()` getter Add a getter function for retrieval of top most media from given media. Currently existing getter for the top most monologue's media subscription, just rename so it makes more sense and is better to differentiate: `call_get_top_media_subscription()` -> `call_ml_get_top_ms()` Change-Id: I5bf13b69b4d5f67cd6b53018b5a16d759542cd41 --- daemon/call.c | 12 +++++++++++- daemon/sdp.c | 16 ++++++++-------- include/call.h | 3 ++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 00ae952a2..87d5054b9 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -3322,6 +3322,7 @@ static void __subscribe_medias_both_ways(struct call_media * a, struct call_medi /** * Retrieve exsisting media subscriptions for a call monologue. + * Checks if given media is in subscriptions/subscribers HT of opposite media. */ struct media_subscription *call_get_media_subscription(subscription_ht ht, struct call_media * cm) { subscription_list *l = t_hash_table_lookup(ht, cm); @@ -3330,12 +3331,21 @@ struct media_subscription *call_get_media_subscription(subscription_ht ht, struc return l->data; } +/** + * Retrieve top most media subscription of given media. + */ +struct media_subscription *call_media_get_top_ms(struct call_media * cm) { + if (cm->media_subscriptions.head) + return cm->media_subscriptions.head->data; + return NULL; +} + /** * Retrieve top most media subscription of top media for a given call monologue. * It's useful for offer/answer model cases, * where most of cases single-to-single subscription model is used. */ -struct media_subscription *call_get_top_media_subscription(struct call_monologue *ml) { +struct media_subscription *call_ml_get_top_ms(struct call_monologue *ml) { for (int i = 0; i < ml->medias->len; i++) { struct call_media * media = ml->medias->pdata[i]; diff --git a/daemon/sdp.c b/daemon/sdp.c index d5db92223..38864a7b1 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -2477,7 +2477,7 @@ static void sdp_version_check(GString *s, struct call_monologue *monologue, sdp_origin *origin = monologue->session_last_sdp_orig; sdp_origin *other_origin = NULL; - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); if (ms && ms->monologue && ms->monologue->session_sdp_orig) other_origin = ms->monologue->session_sdp_orig; @@ -2736,7 +2736,7 @@ static void sdp_out_add_origin(GString *out, struct call_monologue *monologue, /* for the offer/answer model or subscribe don't use the given monologues SDP, * but try the one of the subscription, because the given monologue itself * has likely no session attributes set yet */ - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); if (ms && ms->monologue) ml = ms->monologue; @@ -2791,7 +2791,7 @@ static void sdp_out_add_session_name(GString *out, struct call_monologue *monolo /* for the offer/answer model or subscribe don't use the given monologues SDP, * but try the one of the subscription, because the given monologue itself * has likely no session attributes set yet */ - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); if (ms && ms->monologue) { /* if a session name was empty in the s= attr of the coming message, @@ -2811,7 +2811,7 @@ static void sdp_out_add_timing(GString *out, struct call_monologue *monologue) /* sdp timing per session level */ g_string_append(out, "t="); - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); if (ms && ms->monologue && ms->monologue->sdp_session_timing.len) g_string_append_len(out, ms->monologue->sdp_session_timing.s, ms->monologue->sdp_session_timing.len); else @@ -2827,7 +2827,7 @@ static void sdp_out_add_other(GString *out, struct call_monologue *monologue, bool media_has_ice = MEDIA_ISSET(media, ICE); bool media_has_ice_lite_self = MEDIA_ISSET(media, ICE_LITE_SELF); - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); /* add loop protectio if required */ if (flags->loop_protect) @@ -2855,7 +2855,7 @@ static void sdp_out_add_bandwidth(GString *out, struct call_monologue *monologue /* if there's a media given, only do look up the values for that one */ if (media) { /* sdp bandwidth per media level */ - struct media_subscription *ms = media->media_subscriptions.head ? media->media_subscriptions.head->data : NULL; + struct media_subscription *ms = call_media_get_top_ms(media); if (!ms || !ms->media) return; if (ms->media->sdp_media_bandwidth.as >= 0) @@ -2870,7 +2870,7 @@ static void sdp_out_add_bandwidth(GString *out, struct call_monologue *monologue else { /* sdp bandwidth per session/media level * 0 value is supported (e.g. b=RR:0 and b=RS:0), to be able to disable rtcp */ - struct media_subscription *ms = call_get_top_media_subscription(monologue); + struct media_subscription *ms = call_ml_get_top_ms(monologue); if (!ms || !ms->monologue) return; if (ms->monologue->sdp_session_bandwidth.as >= 0) @@ -3034,7 +3034,7 @@ static struct call_media *sdp_out_set_source_media_address(struct call_media *me /* the port and address that goes into the SDP also depends on this */ *sdp_address = rtp_ps->selected_sfd ? &rtp_ps->selected_sfd->socket.local : NULL; - struct media_subscription *ms = media->media_subscriptions.head ? media->media_subscriptions.head->data : NULL; + struct media_subscription *ms = call_media_get_top_ms(media); if (ms && ms->media) { source_media = ms->media; /* cases with message, force relay and pass through */ diff --git a/include/call.h b/include/call.h index 9d293bed0..f5afb08cb 100644 --- a/include/call.h +++ b/include/call.h @@ -805,7 +805,8 @@ void __monologue_viabranch(struct call_monologue *ml, const str *viabranch); struct packet_stream *__packet_stream_new(call_t *call); void __add_media_subscription(struct call_media * which, struct call_media * to, const struct sink_attrs *attrs); -struct media_subscription *call_get_top_media_subscription(struct call_monologue *ml); +struct media_subscription *call_ml_get_top_ms(struct call_monologue *ml); +struct media_subscription *call_media_get_top_ms(struct call_media * cm); struct media_subscription *call_get_media_subscription(subscription_ht ht, struct call_media * cm); struct call_monologue * ml_medias_subscribed_to_single_ml(struct call_monologue *ml);