Stop using call subscription in the `monologue_offer_answer()`,
which is used here to update transcoding related attributes and
use media subscriptions model instead.
Change-Id: I27abfe23ed2f3f532c3899e5d483cb302e43a142
Start using the media subscriptions model
(based on newly introduced `media_subscription` objects)
in scope of:
- `redis_encode_json()`
- `json_link_medias()`
- `rbl_subs_cb()`
Change-Id: I3f7267ab156b361d7e7bec4ff91a8976a7be02ee
Start using the media subscriptions model
(based on newly introduced `media_subscription` objects)
in scope of `call_get_dialogue()`.
Change-Id: Id7b8f84354bcc0525ff180d94cedfc6dc29a7c63
The following functions have been deprecated
due to no use:
- `__offer_answer_get_subscriptions()`
- `__tags_get_subscriptions()`
Change-Id: Id71dcd1a5573720299711b369410cd7fcd9de476
Start using the media subscriptions model
(based on newly introduced `media_subscription` objects)
in scope of `__update_init_subscribers()`.
Change-Id: I45446239384cf2813d9ae6ecadb2499eefa86ca8
Start using the media subscriptions model
(based on newly introduced `media_subscription` objects)
parallel to existing model, which is based on
the `call_subscription`.
Change-Id: I1f111ef181b2d698609c0b28dd72431bb3f2cf0a
Introduce `media_unconfirm()` to do a selective handling
of medias to unkernelize the correlated to it streams.
This is analogue of the of the `__monologue_unconfirm()`
but for medias.
Change-Id: Id8ede0fc56412021c301e97764fd5dd070b7d484
Previous implementation assumes that we use the `call_subscription`
objects in:
- `call_offer_answer_ng()`
- `call_update_lookup_udp()`
- `call_request_lookup_tcp()`
when appealing to the `call_get_mono_dialogue()`, in order to
get the `call_subscription` objects, in order to then pass it
for usage in the `monologue_offer_answer()`, where the most important
again is to use monologue references stored inside
the given `call_subscription` objects.
Instead of using the `call_subscription`, just use `call_monologue`
objects as a base data objects for this work,
which will allow us in the coming commits to deprecate
the `call_subscriptions` based model and
get to the subscription model based on medias.
Change-Id: Ia9ee5ba66522929acbceca28854ebccd3705635a
Introduction of the basic functions required for
a handling of the media subscriptions:
- `__unsubscribe_media_link()`
- `__unsubscribe_media()`
- `__unsubscribe_all_medias()`
- `__add_media_subscription()`
- `__subscribe_medias_both_ways()`
- `__subscribe_matched_medias()`
- `call_get_media_subscription()`
- `call_totag_subscribed_to_monologue()`
- `call_viabranch_intact_monologue()`
Change-Id: Iad2af5323b2ea8a10a83064d9ee72106c1d8f9c0
Forking to background kills already created threads, so forking must
happen first and thread creation after.
closes#1695
Change-Id: I743b890b83903d9e0b3248b032844e7e357d2307
Make sure we don't try to send on closed sockets or to endpoints which
haven't been initialised.
Fixes unexpected fallout from 83c7336e
Change-Id: If73d61e52edeb72257515adab7428ecef82c2797
Transcoding is flow-specific, so it doesn't make sense to have a flag
for it in a call_media section. Instead we use the transcoding flag set
on the call_subscription objects (on subscribers), and set/unset a flag
on the monologue struct, depending on whether any media flows (going to
subscribers) have transcoding enabled.
Change-Id: Id671d56e56a22eaa8e56f6d449770b0c7b086cea
Pass the subscription object to codec_handlers_update to eliminate the
need for a return type and the subsequent if/else.
Change-Id: I311b3e8ca14ee5090cf329163975354385cee800
Do a direct lookup of the call subscription object and set the
transcoding flag directly. Remove obsolete function.
Change-Id: I8b8329e53afb641fad80d38b45120efd46c408db
This is a convenience function that does an unnecessary loop iteration.
We have a hash table to perform the exact lookup needed. Turn the
function into a simple wrapper which uses the hash table.
Change-Id: If91976a955dea80e882656849b0b13d426e5748f
We have the subscription objects available now, so we can directly set
the transcoding flag without having to do a hash table lookup.
Change-Id: I2b85f34ca4d03dfaf81d92ea252902d1ee194efd
Instead of just return the monologues involved in an offer/answer,
return the respective subscription objects that have the monologues
pointing to each other. This makes it possible to set flags within these
objects.
Change-Id: Id88e56e1bf164a75e2172d0df04316cde5d8a955
Deprecate increasing/decreasing functionality of
the call timer run duration, because it's not needed anymore,
most of the unnecessary functionality has been moved lately
to separate dedicated threads and the `call_timer`
is simply unloaded for now.
Additionally: remove logging with timestamps, because
we do not need to monitor it anymore.
Change-Id: I8d1fd260472528fcee6a12f48b9a92f195893787
Move the `ice_slow_timer()` functionality to a separate thread,
so that we do the work more efficiently, and not be dependent
on the call_timer runs by poller.
Furthermore it makes more sense to keep in the `ice.c`,
since it obviously has to do with ice timing.
Additionally:
Update the test-stats due to these changes in the `call_timer()`
We have to call the `ice_slow_timer()` now explicitely from
the test-stats.c, because the `call_timer()` is not anymore
responsible for providing stats counters rate calculations.
Change-Id: I03377dd59ea71c27497e1f4d30164075f05165cd
Similarly as for the `stats_rate_min_max()`,
move the `stats_counters_calc_rate()` functionality
to the same separate thread, so that we do the work
more efficiently and not be dependent on the call_timer
runs by poller.
Furthermore it makes more sense to keep in the `statistics.c`,
since it obviously has to do with statistics.
Additionally:
Update the test-stats due to these changes in the `call_timer()`
We have to call the `stats_counters_calc_rate()` now explicitely from
the test-stats.c, because the `call_timer()` is not anymore
responsible for providing stats counters rate calculations.
Change-Id: I1682eb76e3057f0f431c27b9633717d965313a1a
To do the work more efficiently,
and not be dependent on the call_timer runs by poller,
we should move the ports iterations (stats update from the kernel)
functionality to a separate thread, to make it faster and
not be dependent on what happens in the `call_timer` at all.
Since it has nothing to do with the call timers.
As an additional benefit: we unload the `call_timer` runner.
Change-Id: I511529ce504ef3d29f4e9d6d731ffd470d78d27a
To do the work more efficiently,
and not be dependent on the call_timer runs by poller,
we should move the `stats_rate_min_max()` to a separate thread,
to make it faster and not be dependent on what happens in the `call_timer` at all.
Since it has nothing to do with the call timers.
Change-Id: I9a39e1b63cb8741377f5af5b2d52d4f8b428a0ad
To do the work more efficiently and not be dependent on
the `call_timer` runs by poller, we should move
the releasing of sockets to a separate thread, to make it
faster and not be dependent on what happens in the `call_timer`
at all. Since it has nothing to do with the call timers.
Since now we have two queues:
- thread scope (local): ports_to_release
- global one: ports_to_release_glob
`sockets_releaser()` uses the ports_to_release_glob,
meanwhile appending in the `call_timer()` happens using the
ports_to_release.
Change-Id: Iadd966ac895b2dd64f81269d4fdf5d83747fe0b7
Deprecate usage of the bit flags for return.
And instead do:
- only return true/false for the redis update
- check if we have to destroy the whole call using the
`call_monologues_associations_left()` only
Additionally remove unused variables.
Change-Id: Ie858c533d1aa4b74024d65c7064aa56437389882
Check globally left monologues (with associations left) after
the `monologue_delete_iter()` has already done its job.
This is needed to prevent cases, when a recursive call of the
`monologue_delete_iter()` leads to blocking of the whole call
destorying, meanwhile it's required, e.g.:
- A is in progress of destorying
- B gets recursive call of `monologue_delete_iter()` and sees
that A has still one association left with C, which A simply
hasn't manage to remove yet.
This commit introduces new function: `call_monologues_associations_left()`
Change-Id: I0941c18a76fa8c2a78d3864aee9e6433283bec88
This commit: 6f0ad0db0f
introduced an improved behavior of the call deconstruction
when dealing with multiple forked legs. But it also
introduced a regression related to TPCC related calls.
This is because it takes into consideration existing
`->viabranches`, which is not efficient in certain cases.
Instead, we just have to ensure, whether there are
other monologues of the call object, which are not directly
"visible" for this branch being cancelled (so they are not directly
associated to that), but they might have own associations
present, which means the call mustn't be globally destoroyed.
Change-Id: I630f2d88ef3b557af3a95816fc2703daccaff374
Upon calling the `monologue_delete_iter()`, we have to take into account
an amount of forked legs we have now entirely in the call.
If there's more than 1 forked leg, don't mark the whole call for a full destruction,
since other forks might be successful (and they are not in a scope of processing now).
Only destroy this branch and associated to it monologue(s).
Change-Id: I6fdb4ba33ae7582578d84d57d91f9536d932ca47
When the `discard-recording` flag is given in one of the commands to
rtpengine (e.g. in the `delete` command), the metafile is renamed to a
.DISCARD suffix and then deleted.
The recording daemon then, seeing the .DISCARD suffix, proceeds to
immediately close all recordings, delete the files if any, and delete
the entries from the DB.
Change-Id: I3f0cac129f2d56cbccd770d43bf434dea6c0a0db