|
|
|
|
@ -752,7 +752,9 @@ struct call_media *call_media_new(struct call *call) {
|
|
|
|
|
return med;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct call_media *__get_media(struct call_monologue *ml, GList **it, const struct stream_params *sp) {
|
|
|
|
|
static struct call_media *__get_media(struct call_monologue *ml, GList **it, const struct stream_params *sp,
|
|
|
|
|
const struct sdp_ng_flags *flags)
|
|
|
|
|
{
|
|
|
|
|
struct call_media *med;
|
|
|
|
|
struct call *call;
|
|
|
|
|
|
|
|
|
|
@ -762,6 +764,19 @@ static struct call_media *__get_media(struct call_monologue *ml, GList **it, con
|
|
|
|
|
else
|
|
|
|
|
*it = (*it)->next;
|
|
|
|
|
|
|
|
|
|
// check for trickle ICE SDP fragment
|
|
|
|
|
if (flags && flags->fragment && sp->media_id.s) {
|
|
|
|
|
// in this case, the media sections are out of order and the media ID
|
|
|
|
|
// string is used to determine which media section to operate on. this
|
|
|
|
|
// info must be present and valid.
|
|
|
|
|
med = g_hash_table_lookup(ml->media_ids, &sp->media_id);
|
|
|
|
|
if (med)
|
|
|
|
|
return med;
|
|
|
|
|
ilog(LOG_ERR, "Received trickle ICE SDP fragment with unknown media ID '"
|
|
|
|
|
STR_FORMAT "'",
|
|
|
|
|
STR_FMT(&sp->media_id));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* possible incremental update, hunt for correct media struct */
|
|
|
|
|
while (*it) {
|
|
|
|
|
med = (*it)->data;
|
|
|
|
|
@ -1757,8 +1772,8 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams,
|
|
|
|
|
|
|
|
|
|
/* first, check for existence of call_media struct on both sides of
|
|
|
|
|
* the dialogue */
|
|
|
|
|
media = __get_media(monologue, &ml_media, sp);
|
|
|
|
|
other_media = __get_media(other_ml, &other_ml_media, sp);
|
|
|
|
|
media = __get_media(monologue, &ml_media, sp, flags);
|
|
|
|
|
other_media = __get_media(other_ml, &other_ml_media, sp, flags);
|
|
|
|
|
/* OTHER is the side which has sent the message. SDP parameters in
|
|
|
|
|
* "sp" are as advertised by OTHER side. The message will be sent to
|
|
|
|
|
* THIS side. Parameters sent to THIS side may be overridden by
|
|
|
|
|
@ -1766,6 +1781,13 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams,
|
|
|
|
|
* THIS side (recipient) before, then the structs will be populated with
|
|
|
|
|
* details already. */
|
|
|
|
|
|
|
|
|
|
if (flags && flags->fragment) {
|
|
|
|
|
// trickle ICE SDP fragment. don't do anything other than update
|
|
|
|
|
// the ICE stuff.
|
|
|
|
|
ice_update(other_media->ice_agent, sp);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (flags && flags->opmode == OP_OFFER && flags->reset) {
|
|
|
|
|
MEDIA_CLEAR(media, INITIALIZED);
|
|
|
|
|
MEDIA_CLEAR(other_media, INITIALIZED);
|
|
|
|
|
|