Previously, the ports used for a monologue subscription would leak upon re-subscribe.
``__assign_stream_fds`` cleared the stream fd queue without decrementing the ref count. This
prevented ``monologue_destroy`` from releasing the ports on unsubscribe.
Closes#2125
Change-Id: Ib86290d6a35e2388e34098f2847f1e34b3db2c5d
In case of the reverse direction of a subscription, no stream handler will be found. Previously, the
decrypt struct was left zeroed, the kernel module rejected this with ``EINVAL`` and the daemon logged:
```
[core] Failed to push relay stream to kernel: Invalid argument
```
This patch sets ``REC_NULL``/``REH_NULL`` and marks the target as non-forwarding, matching what is
expected by ``validate_srtp``.
Closes#2126
Change-Id: I5aa2b490c65e5d97dc9b2ddd24c09f9ae7b63892
ffmpeg's CNG expects a fixed frame size, or at least a maximum frame
size, as it allocates internal buffers on construction based on that
frame size. Calling the decoder with a larger frame size therefore leads
to an internal buffer overflow. Calling it with a smaller frame size is
fine.
Retain the simple one-shot CNG for the most common case (frame size
smaller than the max). For larger frames, call the CNG in a loop and
manually construct a return frame.
Change-Id: I0ebe0b7a9ad8a08bbabd0d8dea264b08cb44feee
Currently the helper accepts 0 length, but callers actually
can try to mutate it with `- 1` what means overflowing it.
e.g. `extmap_short_is_valid_data()` has a bitwise operation
including length `(id << 4) | (ext->len - 1)`
Change-Id: I74f7fa134355059b18ba8c2b4e671c735324bdb7
Currently the function has two cycles (while-outer-cycle and
for-inner-cycle).
The inner one operates on the given `pp` pointer and can potentially
mutate it (the pointer isn't const), hence the outer cycle will
continue with a mutated pointer.
Instead just use a local scope pointer to manipulate linked list's
data.
P.S.: the `pp` pointer isn't a double pointer, so unlikely was
expected (even by design) to be modified (e.g. its address or what
it actually points to).
Change-Id: Ia36bcb6fb47e9e72ae25a838f8005ca99f4c591d
When binding the port to a socket, init fd to -1
because 0 is actually a valid id for fd in the system,
this `struct socket_port_link spl = {0};` puts `.fd = 0`
and if socket binding fails, then `.fd == 0` which is
a totally valid fd.
Instead init it to -1 and then let `add_socket()` to
actually fill the structure's data properly,
if however that one fails to bind, then again return
`.fd = -1`.
Change-Id: Iaeeee534a66b43441253ddfe710c8163084ad444
After marking the socket as being processed by this
thread, reset it back in case processing in
`stream_fd_readable()` returns due to exceeded queue.
Change-Id: Ia7415daf7eb568716ec88215b9f07ef551656c7c
Allow invalid payload types for rejected RTP streams.
Allow empty codec store for zero-port streams.
Has some side effects on tests.
Closes#2122
Change-Id: I28c63a3e5b7309084e7899a19ff4550e8f56aac5
Don't test for presence of packages when not needed
Honour build profiles for dependencies and build flags
Closes#2121
Change-Id: Icad346fd1afe14e07d959c8d15778a76abc28477
Make both `media_player_opts_t.db_id` and `media_player_content_index.db_id`
unsigned because:
- they aren't used with any guards/init values
- most DB-media API functionality actually uses `unsigned long long`
So this makes the ids consistent with the usage of them
in the actual code.
Change-Id: I6c756c537b3c992099a6857683078c169d5e030d
Currently uses "media player" as a name,
but for debugging purposes of thread dumps/logs, it's clearer
to have according name, so just name it "send timer".
Change-Id: If2a9111d014a659514ccb8c40ee919135a57ca9e
Make this sentinel visible via header, because anywhere
where the `kernel_idx` is declared/used,
this won't be usable due to limited visibility to .c file.
Change-Id: I159fe1a87e92656fdd790dd98569cfebe80d4ddd
For comparison reasons. This last unrefactored condition
was missed during the refactoring here: 93c49e9c2e
Change-Id: Iee7c01e776945a34eaa87d6c0d7bba8d405395a8
To not leak on media changes (ssrc differs), release
previous `->ssrc_out`, then overwrite the pointer.
`get_ssrc()` returns an owned reference.
Change-Id: Iaae6e24fe7b6a28bea06fb58794416d6c79894a2
Before to start the media player, check if the
seek process for the start frame failed, because
otherwise it starts from the unexpected position,
and there is no awareness about it.
Just add log for this case.
Change-Id: I36a912a9ef044825b050f8b7a6ad5562571b7d34
So that their naming is self-evident and correlates
with the actual options flag:
- `media-files-expire` -> `media_files_expire_us`
- `db-cache-expire` -> `db_cache_expire_us`
- `db-media-expire` -> `db_media_expire_us`
Change-Id: I76ebe9f92ba22de7c19fbb2ff47d0bf1952e1480
When accessing the array members via the pointer they
are still read-only, but the entries themselves are mutable.
So just make the elements constant pointers.
Also comply with the indentation style, and use tabs, not spaces.
Change-Id: I2165d0bf0b7b3ee4ad053c235dae4f60f36c1a43
In case the allocation of pcre for streams regex
fails, but not for the info, we never free
the latter one, because on returning an error,
just calling `die()`, hence no de-allocation
procedures are fulfilled.
Change-Id: I4a39b2c3043798c59fa6ec2fe0d70b1b1b27517f
Previous approach based on the strhash used
to support an upper case variant of "cli" command.
Just preserve it.
Current NG_COMMANDS based macro generation, uses
only lower cases based on the command name from
the table, so not mess things more, just add
one exception for the "CLI".
Change-Id: I0bb373a50f56a44c13921a24fddf9534379b8e0d