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);