Simple wrappers around glib's GHashTable functions that add type
information, instead of just using void* for everything.
Change-Id: I3e7c0f095f1f58b943ba80d1e14e763707ee1698
Stop handling redundant media subscribing in the:
- `call_get_monologue_new()`
- `call_get_dialogue()`
and leave this work only for the offer/answer model:
- `monologue_offer_answer()`
In the meanwhile the subscribe request/answer model
keeps on using directly the:
- `__add_media_subscription()`
Change-Id: I6cfaef634b8b9e5e805df25f1c6f80225648b75a
The rtpengine GitHub issue tracker is not a support forum,
so let's point user to the mailing list instead, and provide
initial bug report + feature request templates, while at it.
Change-Id: I7414b94131def5f19cdc5cc17d41684007b12bf2
Allow codec_tracker_update to reference an existing codec_store. Then
when a supplemental codec type needs to be generated, make it look up
the type in the existing codec_store and re-use the existing payload
type if present instead of creating a new one. This allows payload type
numbers to remain unchanged during a re-invite.
Change-Id: I9e5edd897515a5e3eb5033aa6bbf21c8667d6133
During an offer, we update the codecs from the given list not only on
the side of the offerer, but also on the answerer's side, in order to
perform the codec answer routine during the answer phase. While doing
this, we empty out the existing list of codecs (on both sides) and
repopulate it fresh from the given list.
This can cause problems during a reverse re-invite, when the list of
codecs on the answerer's side already contained the codecs that had been
offered before. When setting up the new re-invite offer, we want to
retain codecs (and their payload types and format parameters) that were
already in place, instead of recreating a new list from scratch.
Improve this by adding a `merge_cs` option to the populating functions,
which points back to the stream_params codec_store. Codecs that would
have been removed from the codec_store during the repopulation are then
moved back into the stream_params codec_store instead. This then allows
the functions adding new codecs to the list (offer/transcode) to
reference these codecs that were previously in place, and so they can be
added back with the same options as they had existed before, instead of
recreating them from scratch.
Change-Id: I53e7ab10e9144a308a5c36be5ebfddd73c212f06
In case of repeated answers without additional offer in between, we
shouldn't reset the codec tracker status at the end of the codec answer
routine, so that we end up with the same state during the next answer.
Change-Id: I54f6136cc5684473553b4862c13ea9f4a3dcfe99
- add example mock chroots
- update for nftables, iptables deprecation in EL9
- ensure distro build flags are used %[set_build_flags}, especially
-fPIE
closes#1753
Change-Id: I11ef5791885fc6129f528ad0425c679ee26e5a08
Follow-up for commit eea3824725, remove further files and configuration
related to rtpengine-iptables removal.
Change-Id: I3bc9a2a452bd41fb346b7479e8b00e4cdedb93a6
*** CID 1570963: Null pointer dereferences (REVERSE_INULL)
/daemon/call.c: 3553 in monologue_subscribe_answer()
3547 /* set src_media based on subscription (assuming it is one-to-one) */
3548 struct call_media * dst_media = __get_media(dst_ml, sp, flags, 0);
3549 GList * src_ml_media_it = dst_media->media_subscriptions.head;
3550 struct media_subscription * ms = src_ml_media_it->data;
3551 struct call_media * src_media = ms->media;
3552
>>> CID 1570963: Null pointer dereferences (REVERSE_INULL)
>>> Null-checking "dst_media" suggests that it may be null, but it has already been dereferenced on all paths leading to the check.
3553 if (!dst_media || !src_media)
3554 continue;
3555
3556 /* additional attributes to be carried for `sdp_create()` */
3557 if (print_extra_sess_attrs && !g_queue_find(&attr_mls, ms->monologue)) {
3558 sdp_copy_session_attributes(ms->monologue, dst_ml);
Change-Id: I391b95f61237e5a7af206b0568a1cf421dcbb8f8
From now on the `call_subscription` concept gets
deprecated, and instead of it the `media_subscriptions`
concept gets applied.
Benefits of this change is:
- ability to subscribe one-to-multiple medias (different monologues)
- media level manipulations, without affecting whole SDP session
- no need to use medias offset, to detect proper subscription's media
- there is no need of particular medias order, they can be
subscribed to each other in any possible way
(even though RFC still requires to always have proper ordering)
Deprecated objects:
- `struct call_subscription`
- `GQueue subscriptions`
- `GQueue subscribers`
- `GHashTable * subscriptions_ht`
- `GHashTable * subscribers_ht`
Deprecated functionality:
- `__unsubscribe_one()`
- `__unsubscribe_all_offer_answer_subscribers()`
- `__unsubscribe_from_all()`
- `__subscribe_offer_answer_both_ways()`
- `__add_subscription()`
- `__unsubscribe_one_link()`
- `call_get_call_subscription()`
- `call_subscriptions_clear()`
- `call_subscriptions_free()`
Offtopic: additionally this commit adds helper func:
- `call_media_subscribed_to_monologue()`
Change-Id: Ifb44f7a1ba5b483b1472882b1b8d06444dba1727
Rework the `set_monologue_flags_per_subscribers()` to work on medias
instead of working on monologues and refactor according code
appealing to this func.
Also to reflect the sense of this function better, change naming
from: `set_monologue_flags_per_subscribers()`
to: `media_update_transcoding_flag()`
Change-Id: I517ea13c91240d8fb9d3608edee16f132f4f61e1
Rework the `__update_init_subscribers()` so, that it takes:
- `call_media`
- `stream_params`
directly for processing, instead of operating on the whole ml.
Therefore also refactored code that appeals to the concerned func.
Change-Id: I56a9c6aa54b17d8c8dede2181414c481ca0cf2ca
During the `monologues_intact` stage of the `call_get_monologue_new()`
use media subscription in order to:
- update `os` ml, if still not set before
- update subscription ml's tag with totag, if not set before
After the first possible subscription's `offer/answer` ml
has been found and all work done, break cycling expecting
that this is one-to-one (so offer/answer) model, where only
medias of two monologues are involved.
Change-Id: I8b06cee2090563da4ce4c290ab3c0b9ce8c7ab3f
Rework the logic of fromtag monologue detection in the
`call_get_dialogue()`.
Fristly, try to match using given from tag (if there is one).
Secondly, try to match using given viabranch.
Thirdly, try to use top-most subscription of the top-most
media related to the totag monologue (newer behavior).
Fourthly, if still not found just create a brand-new one.
This change relates to the fact, that we stop using call monologue
subscriptions model and switch to the media based one.
Change-Id: I106bdd79f5e4754f76bd048f51c8fc211ee57410