Browse Source

MT#55283 use two hash tables

We need separate tracking for A and B sides

Change-Id: I9aeb91beb58e9efc5e8f79f336d120e46c25b8c9
(cherry picked from commit fa3de35448)
(cherry picked from commit bee016322d)
mr13.1.1
Richard Fuchs 8 months ago
parent
commit
b6d8bddfac
1 changed files with 10 additions and 8 deletions
  1. +10
    -8
      daemon/call.c

+ 10
- 8
daemon/call.c View File

@ -3016,7 +3016,8 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
else
ML_CLEAR(sender_ml, FINAL_RESPONSE);
g_autoptr(GHashTable) mid_tracker = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
g_autoptr(GHashTable) mid_tracker_sender = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
g_autoptr(GHashTable) mid_tracker_receiver = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
for (__auto_type sp_iter = streams->head; sp_iter; sp_iter = sp_iter->next) {
struct stream_params *sp = sp_iter->data;
@ -3030,7 +3031,7 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
/* handling of media sessions level manipulations (media sessions remove) */
if (flags->sdp_media_remove[sp->type_id]) {
sender_media = monologue_add_zero_media(sender_ml, sp, &num_ports_other, flags, mid_tracker);
sender_media = monologue_add_zero_media(sender_ml, sp, &num_ports_other, flags, mid_tracker_sender);
medias_offset++;
if (sender_media->logical_intf == NULL)
@ -3043,10 +3044,10 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
/* OP_OFFER, receiver's side, get by index */
receiver_media = NULL;
if (is_offer)
receiver_media = __get_media(receiver_ml, sp, flags, (medias_offset ? (sp->index - medias_offset) : 0), mid_tracker);
receiver_media = __get_media(receiver_ml, sp, flags, (medias_offset ? (sp->index - medias_offset) : 0), mid_tracker_receiver);
/* OP_OFFER/OP_ANSWER, sender's side, get by index */
sender_media = __get_media(sender_ml, sp, flags, 0, mid_tracker);
sender_media = __get_media(sender_ml, sp, flags, 0, mid_tracker_sender);
sender_media->media_sdp_id = sp->media_sdp_id;
/* OP_ANSWER, receiver's side, only media subscriptions lookup */
@ -3059,7 +3060,7 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
}
else {
ilog(LOG_DEBUG, "No matching media (index: %d) for answer using subscription, just use an index.", sp->index);
receiver_media = __get_media(receiver_ml, sp, flags, 0, mid_tracker);
receiver_media = __get_media(receiver_ml, sp, flags, 0, mid_tracker_receiver);
}
}
receiver_media->media_sdp_id = sp->media_sdp_id;
@ -3503,13 +3504,14 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca
sdp_ng_flags *flags, unsigned int *index)
{
unsigned int idx_diff = 0, rev_idx_diff = 0;
g_autoptr(GHashTable) mid_tracker = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
g_autoptr(GHashTable) mid_tracker_dst = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
g_autoptr(GHashTable) mid_tracker_src = g_hash_table_new((GHashFunc) str_hash, (GEqualFunc) str_equal);
for (__auto_type l = src_ml->last_in_sdp_streams.head; l; l = l->next) {
struct stream_params *sp = l->data;
struct call_media *dst_media = __get_media(dst_ml, sp, flags, (*index)++, mid_tracker);
struct call_media *src_media = __get_media(src_ml, sp, flags, 0, mid_tracker);
struct call_media *dst_media = __get_media(dst_ml, sp, flags, (*index)++, mid_tracker_dst);
struct call_media *src_media = __get_media(src_ml, sp, flags, 0, mid_tracker_src);
/* subscribe dst_ml (subscriber) to src_ml, don't forget to carry the egress flag, if required */
__add_media_subscription(dst_media, src_media, &(struct sink_attrs) { .egress = !!flags->egress });


Loading…
Cancel
Save