Avoid trying to acquire a recursive lock by making sure the response is
always generated in a different thread.
Fixes#1656
Change-Id: I6c4c5bb52cb95a204823848bb427ab24f42dcccd
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
For efficiency reasons `substitute` kind of SDP manipulations
commands have been moved to the `GHashTable` instead of the `GQueue`.
Change-Id: Iec6c44109ae912ba0de440bbed6ecaee6a238b97
This replicates the code to replace audio packets with injected DTMF
events. Unfortunately the code paths between forwarding audio and
processing/forwarding DTMF events is quite different, so some slight
duplication is needed.
Additionally the case of blocked DTMF + injected DTMF must be handled.
Change-Id: Ieb576b4b6644c9b154ba4c6ebd48fe12ff08e1de
DTMF injection must use the codec handler of the primary payload (audio
stream), not the handler of the DTMF PT itself.
Change-Id: Ied2d1f969bfc76ef7af0ada063b90a47c4633557
Add special return value to indicate that an event was a duplicate and
should be discarded.
Functional no-op.
Change-Id: I5d40bcc4a0bc45ba7875f4132873e7b8d747e132
Add a flag to inhibit kernel mode while DTMF injection is active. Tie in
DTMF playback trigger function: Remove stream from kernel, set inhibit
flag, play DTMF, then unset inhibit flag when all events have been
injected.
Change-Id: I533ec95a676bc7edf4dd973217f8d9499f1e22b6
DTMF requires the "end" event to be sent multiple times, requiring
sequence number adjustments after DTMF injection has finished. Add
support for this to the kernel module.
Change-Id: Ie5c8f18eda39553a6ebbdd35ef2341be01f2a59f
Support using the SSRC TS derived from received RTP packets as "encoder"
TS (the "next" expected TS) for passthrough RTP in addition to the FIFO
TS of an actual encoder.
Change-Id: I7c49c27651eb89c5349bbf290b1c0ad160f77e3b
The "duration" is not valid for events which are not end events as
there's no previous event to derive a duration from.
Change-Id: I3f9dad536b168cce24d1a58c5bcf25e5cacfe7a8
Make the decision whether or not to use SSRC passthrough handlers in the
upper level calling function, instead of implicitly in
__make_passthrough_gsl()
Change-Id: Ied88120ea4f12d50e3c5afb96023bdd86c42c6e1
__make_passthrough_ssrc() is only used after a passthrough handler has
already been created via __make_passthrough(), and the two functions do
exactly the same thing other than using a different handler functions.
So we can skip completely shutting down the handler and creating a new
one, and only update the handler function instead.
Change-Id: I5acdb5f5508b385320dda6b8bbb18cccd315f99d
Instead of just setting the "force transcoding" flag when DTMF injection
is required, check it on a per-codec basis, so we can be more granular
with this decision.
Functional no-op.
Change-Id: I496f3d1fba5840e7870c373f94190243392db438
Instead of doing two calls to the kernel every time a forwarding stream
is deleted (one to update the stats and one to delete), combine these
two into a single call using REMG_DEL_TARGET_STATS.
Change-Id: I9fcb148930c24bc866f842a50edd613fb6296de0
Separate out the call to kernel_update_stats() from the function
actually consuming the stats and updating the userspace internal
counters.
Functional no-op.
Change-Id: I4d357e2649c31db7839d8f1369bca9750ef7eae2
This combines the REMG_DEL_TARGET method with REMG_GET_STATS. It
retrieves the stats of an existing target, returns them to userspace,
then proceeds to delete the target.
Change-Id: Ibd715c176f0415c49ac94b9e3c8d8cafdd829e1a
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
Rename the original call_delete_branch() to call_delete_branch_by_id()
and provide a new call_delete_branch() which takes a reference to a call
object instead of a call ID.
Change-Id: Ie549e7f550fab5edc6e81472e78565e1925fae67
These are two different file paths and each belongs to its respective
recording method. Move them into the appropriate struct. Also use
g_clear_pointer() for memory bookkeeping.
Change-Id: I25a897636d4f6e8fea3c533f9ca39c90f81390f8
Check all the struct sizes as part of the startup NOOP command, to try
to catch incompatible kernel module versions.
Change-Id: Ib617878e1e5a813de199c5405db3680c1e4d3351
The unified `rtpengine_message` struct has become quite large, and most
fields are not used for most of the messages sent to the kernel module.
Use command-specific structures that only contain the required
information. Adapt the I/O code and the size checks to use the correct
sizes.
Do special handling for GET_*_STATS as these commands do both input and
output at the same time. Copy in only the input portion of the struct.
(Copy-out still copies the entire struct at this point.)
Change-Id: Ia8aec6135fd7de42ae4e62e7f2dc23804e1f0914