Reported-by: Matthew White <on3moda@gmail.com>
Change-Id: I2404f379e42ed29d0d6b95863ad40364687c205f
(cherry picked from commit e34a892daf)
(cherry picked from commit c1746ebf72)
Both mean that the ice towards the offerer gets rejected.
When a certain peer who previously offered ice, sends SDP without ice
(e.g. T.38 re-invite), or the ice was requested to be removed
(when processing answer) with `ICE=remove` then the ice agent is left alive
with its learned ufrag, candidates and succeeded pairs.
The stream endpoint is then taken from that SDP (non-ice path).
If this peer later offers ice again with the same credentials (e.g.
falling back to audio after an error response like 488 for that T.38),
then this stale agent is reused:
`__fill_stream()` ignores the new endpoint because the ice data
considered as unchanged, and then the `ice_update()` drops these candidates as duplicates.
Therefore no connectivity checks run and then the endpoint stays at the old non-iced address.
Media gets bound to the wrong port.
Shutdown the ice agent whenever the peer's own sdp no longer carries ice,
or we get the `ICE=remove`.
Then the offered ice again later starts from scratch.
Change-Id: I5ff3b6454262099022bf4f61c84b978835130dcc
(cherry picked from commit 39fd49b6c4)
(cherry picked from commit a524d5e8ca)
The primary pair selection already checks this, but a retransmit can
still trigger a check on a socket that has since been closed.
Closes#2154
Change-Id: I8308693e7269bfa9dcfcb24daf6863669c065139
(cherry picked from commit c22d724aa9)
(cherry picked from commit 71dbfacd3a)
On some 32-bit architectures, such as armhf, the CPU does not have a
64-bit division instruction, and the compiler injects an intrinsic
function reference (such as __aeabi_ldivmod) that is provided for
example by libgcc.
When compiling Linux kernel code, we are not using libgcc, so such
references end up being undefined, failing the link. Instead we need to
use support provided by the kernel itself. In this case the do_div()
macro.
Change-Id: I5ed60aee487e66d6fcfc2293644d773b6820c178
(cherry picked from commit b688988363)
(cherry picked from commit 3e57259b73)
We are compressing the documentation explicitly with gzip, but were not
passing -n to get reproducible output.
Change-Id: I7819701ef33d34472eb2a63458ae16ef69ac352e
(cherry picked from commit 9b74a7fd12)
(cherry picked from commit 5ab9ac6508)
This is checked for race conditions but is not actually increased
anywhere.
Fixes#2148
Change-Id: Ia46ea32ffea6abf267f7ae872368f4f9c4446f29
(cherry picked from commit 5daae51b5b)
(cherry picked from commit b4190c2f53)
If a SSRC object is still in use (refcount is >1), keep it in the list,
even if the list is too large.
Otherwise we may end up recreating a new SSRC object for the same SSRC
that still has an object in use elsewhere, making locks unreliable.
Ref #2148
Change-Id: I2afd277696e05c356fc9cf5aea59f51e1fba0784
(cherry picked from commit 26fee2610a)
(cherry picked from commit 9c74c429d9)
Per RFC 4867 section 8.1, absent fmtp parameters imply defaults (bandwidth-efficient mode, no CRC,
no robust-sorting, no interleaving). Previously, codec matching was rejected when either side had no
``a=fmtp`` attribute for the AMR payload type, causing AMR to be dropped as a "stray answer codec".
This patch changes this behavior to instead "parse" fmtp even when absent so that the format struct
is populated with zero-initialized defaults and fmtp_parsed is set.
Closes#2141
Change-Id: I1371cb1fdb9354746a4019477845d777e619a2f6
(cherry picked from commit 702ccec969)
(cherry picked from commit 84d62960a3)
(cherry picked from commit a3e8240a97)
Run the check against ICE candidates not just for DTLS packets, but for
all received packets, except STUN which have authentication and are
needed to learn new ICE candidates.
Change-Id: I25df8fa6db4f828a68ba3b9e5cd35d2b56c0df08
(cherry picked from commit 8317cc7071)
(cherry picked from commit 1400fafa75)
To not come across the sink's mutation (e.g. `endpoint.address.family`)
just lock way earlier, before to start processing and
translating endpoint to the kernel related structs.
Otherwise the other signaling path may mutate something
which will make the sink unactual and provide
to the `__re_address_translate_ep()` NULLed or garbage structs.
Change-Id: I88d87ae88abe4e37aaa5d3cdda76ed0ca82e4842
(cherry picked from commit e16a2309e0)
(cherry picked from commit c58a3fa79f)
16de9688d6 resets the `socket.family` to NULL,
that makes the direct appeal to the corresponding
object unsafe.
E.g. `ps->selected_sfd->socket.family->name` when
filling the streams.
Add a simply guard and log `none` in case
the ip family is NULL.
Change-Id: I7ad7399e32e5d0ffb2fcc919822d05760fdc7421
(cherry picked from commit 05817bad13)
(cherry picked from commit 0643d7571b)
We use `family == NULL` as test for the socket being open in several
places, and expect it to match the familt of the addresses. Set it to
zero to make it consistent.
Change-Id: Ide2b41e84fc27b5f47f579dcf4ab2ec2f6b0a37e
(cherry picked from commit 16de9688d6)
(cherry picked from commit e299e941b2)
ICE drops packets early in media_demux_protocols() (via
ice_peer_address_known()), which means in media_packet_address_check()
we can immediately set any socket as confirmed that has received
anything.
Take receiving socket into account to determine whether the endpoint is
a match.
Disable endpoint learning with ICE. ICE is in charge of determining
endpoint address and local socket.
`media-handover` and `strict-source` handling remains in place. With
`media-handover` set, we allow changing endpoint and local socket based
on what is actually received, overriding the nomination from ICE.
Change-Id: Ieac2893355df6ee560b497867181e6f47d646f2e
(cherry picked from commit d3af013494)
(cherry picked from commit dd347cf5b4)
Don't just check for the selected_sfd to be non null, but also for the
socket to actually be open, as this is needed for the translate_ep set
of functions in particular.
Change-Id: I78cb0f7b8c9e4359c9e037485b29f63e0cd9476b
(cherry picked from commit 9cb902319c)
(cherry picked from commit 4847c8ad10)
A stream that needs to be unkernelized that wasn't actually kernelized
due to lack of support or information still needs to have the flag reset
so that it can retried.
Change-Id: I7de17236d382d4f4dbfc3225c37688769cc9c8ad
(cherry picked from commit ab8b7fb228)
(cherry picked from commit a6cb6daf04)
Pull the kernel in/out checks down below the "out" label, and use the
existing flags from the STUN connect event instead of directly calling
the relevant function.
Change-Id: Ide1ebf0d18446427535d9e63dadf7fdbbddc6c94
(cherry picked from commit 209e5a38dc)
(cherry picked from commit 2a358af600)