MT#55283 split up dialogue_connect

Change-Id: I240f0bb089700f072258aa47d98da529d06e8b71
pull/2097/head
Richard Fuchs 3 months ago
parent d484f81b49
commit 3b27538fd4

@ -4930,8 +4930,9 @@ int monologue_inject_stop(struct call_monologue *src_ml, struct call_monologue *
}
__attribute__((nonnull(1, 2, 3)))
void dialogue_connect(const medias_q *src_medias, struct call_monologue *dst_ml, sdp_ng_flags *flags) {
void subscriber_connect(const medias_q *src_medias, struct call_monologue *dst_ml, sdp_ng_flags *flags,
bool directional, medias_q *upd_src_medias, medias_q *upd_dst_medias, medias_q *unconf_medias)
{
// for each source media, find a usable destination media
for (auto_iter(l, src_medias->head); l; l = l->next) {
__auto_type src_media = l->data;
@ -4975,10 +4976,8 @@ void dialogue_connect(const medias_q *src_medias, struct call_monologue *dst_ml,
__media_unconfirm(src_media, "connect");
__media_unconfirm(dst_media, "connect");
g_auto(medias_q) medias = TYPED_GQUEUE_INIT;
if (!flags->directional)
__subscribe_medias_both_ways(src_media, dst_media, false, &medias);
if (!directional)
__subscribe_medias_both_ways(src_media, dst_media, false, unconf_medias);
else {
__auto_type ms = call_get_media_subscription(dst_media->media_subscriptions_ht,
src_media);
@ -4993,23 +4992,47 @@ void dialogue_connect(const medias_q *src_medias, struct call_monologue *dst_ml,
}
}
__medias_unconfirm(&medias, "connect");
codec_update_medias_handlers(&medias);
t_queue_push_tail(upd_src_medias, src_media);
t_queue_push_tail(upd_dst_medias, dst_media);
}
}
media_set_audio_player(dst_media, flags);
void subscriber_connect_finish(medias_q *upd_src_medias, medias_q *upd_dst_medias, medias_q *unconf_medias,
sdp_ng_flags *flags)
{
__medias_unconfirm(unconf_medias, "connect");
codec_update_medias_handlers(unconf_medias);
codec_update_media_source_handlers(dst_media, .flags = flags);
for (auto_iter(l, upd_src_medias->head); l; l = l->next) {
__auto_type src_media = l->data;
codec_update_media_source_handlers(src_media);
codec_update_media_handlers(src_media);
codec_update_media_handlers(dst_media);
update_init_subscribers(src_media, NULL, NULL, flags->opmode);
}
for (auto_iter(l, upd_dst_medias->head); l; l = l->next) {
__auto_type dst_media = l->data;
media_set_audio_player(dst_media, flags);
codec_update_media_source_handlers(dst_media, .flags = flags);
codec_update_media_handlers(dst_media);
update_init_subscribers(dst_media, NULL, NULL, flags->opmode);
__update_init_medias(&medias, flags->opmode);
}
__update_init_medias(unconf_medias, flags->opmode);
}
void dialogue_connect(const medias_q *src_medias, struct call_monologue *dst_ml, sdp_ng_flags *flags) {
g_auto(medias_q) upd_src_medias = TYPED_GQUEUE_INIT;
g_auto(medias_q) upd_dst_medias = TYPED_GQUEUE_INIT;
g_auto(medias_q) unconf_medias = TYPED_GQUEUE_INIT;
subscriber_connect(src_medias, dst_ml, flags, flags->directional, &upd_src_medias,
&upd_dst_medias, &unconf_medias);
subscriber_connect_finish(&upd_src_medias, &upd_dst_medias, &unconf_medias, flags);
}
static int __rtp_stats_sort(const struct rtp_stats *a, const struct rtp_stats *b) {

@ -909,7 +909,18 @@ int monologue_inject_start(struct call_monologue *src, struct call_monologue *ds
sdp_ng_flags *flags);
int monologue_inject_stop(struct call_monologue *src, struct call_monologue *dst,
sdp_ng_flags *flags);
__attribute__((nonnull(1, 2, 3)))
void dialogue_connect(const medias_q *, struct call_monologue *, sdp_ng_flags *);
__attribute__((nonnull(1, 2, 3, 5, 6, 7)))
void subscriber_connect(const medias_q *src_medias, struct call_monologue *dst_ml, sdp_ng_flags *flags,
bool directional, medias_q *upd_src_medias, medias_q *upd_dst_medias, medias_q *unconf_medias);
__attribute__((nonnull(1, 2, 3, 4)))
void subscriber_connect_finish(medias_q *upd_src_medias, medias_q *upd_dst_medias, medias_q *unconf_medias,
sdp_ng_flags *flags);
__attribute__((nonnull(1, 2, 3)))
bool monologue_transform(struct call_monologue *, sdp_ng_flags *, medias_q *);
__attribute__((nonnull(1, 2)))

Loading…
Cancel
Save