| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
To be able to call it from a context that is already locked.
|
| |
|
|
|
|
|
|
|
|
|
| |
nice_socket_recv_messages() may return a NiceInputMessage of length = 0,
so before attempting to read the RFC4571 header check the message really
has at least sizeof (guint16) bytes of data.
The bug's always been there, the previous commit only made it more
apparent.
|
|
|
|
|
|
|
|
|
|
| |
There might be multiple RFC4571-framed messages (or fragments thereof)
within a single TCP-TURN message. Make sure each NiceInputMessage
passed by the user into socket_recv_messages() gets exactly one RFC4571
frame, or remains empty if there aren't any messages to receive.
We should keep any data that doesn't fit into the user buffers for
the next time socket_recv_messages() gets called with the socket.
|
|
|
|
|
|
|
|
|
|
|
|
| |
After being parsed, a TURN control message turns into a NiceInputMessage
with zero length. Such message doesn't increment the iteration counter i
and so is re-processed in the next iteration, which detects right away
that message->length == 0 and continues to the next element in
recv_messages.
Thus, n_valid_messages variable serves no real purpose and to achieve
the same result we can simply increment the iteration counter after each
message.
|
| |
|
|
|
|
|
| |
The socket abstraction not being reference counted, we need a global
lock for them in the short term.
|
|
|
|
| |
It's not locked in any way.
|
| |
|
|
|
|
| |
This should make it safer.
|
| |
|
|
|
|
| |
Remove all pointers that don't include have a reference except to agents
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Work on libnice's bug #1 in Gitlab. This work is composed of multiple
merged parts:
- "Global lock contention removed"
Phabricator D1900: https://phabricator.freedesktop.org/D1900
By @nifigase
Opened in GitLab as Merge Request !12
- "agent: properly handle NiceAgent ref in callbacks from timeout
sources"
Phabricator D1898: https://phabricator.freedesktop.org/D1898
By @mparis
This patch was itself based upon a previous version of the work done in
D1900. After the switch of hosting, it got lost.
On top of these, additions to follow some review comments from @ocrete:
- https://phabricator.freedesktop.org/D1900#40412
- https://phabricator.freedesktop.org/D1898#39332
|
| |
|
|
|
|
| |
getifaddrs() may only be available if the target API is >= 24
|
|
|
|
|
| |
This makes it possible to enable keepalive for TCP candidates. It is useful
to detect disappearing peers or network failures faster.
|
|
|
|
|
|
|
| |
By default, 'candidate_identifier == NULL' only happens for 'compatibility
== NICE_COMPATIBILITY_GOOGLE'. However, keepalive=true will also trigger
the same code path so candidate_identifier must be checked to avoid a
segfault.
|
|
|
|
|
| |
For some connection types nicesock->fileno is never set.
Make sure it is not NULL before using it.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Now, we use GitLab at https://gitlab.freedesktop.org/libnice/libnice
|
|
|
|
|
|
| |
MacOS X and Windows don't have MSG_NOSIGNAL.
Signed-off-by: Justin Kim <justin.kim@collabora.com>
|
|
|
|
|
|
|
|
|
| |
There was two cases where instead of freeing the queue, we actually
clear the queue so it's ready for reused. Notably in
nice_socket_free_send_queue(), a missed name function and nicesrc
element state change.
This regression was introduced by: fa783b1dd727a6ee2b99a111ca24790ae850c2f7
|
|
|
|
|
|
| |
This is new warning introduced with GCC 8. This is being fixed by using appropriate function, like g_queue_free_full/g_list_free_full or by casting to GCallback before casting to the target function signature.
Closes: #46
|
|
|
|
|
|
|
|
| |
Following [1] and [2], "-" character is not allowed for foundation
Refs
[1] https://tools.ietf.org/html/rfc5245#page-73
[2] https://tools.ietf.org/html/rfc5234#appendix-B.1
|
|
|
|
|
|
| |
32-bit
Closes: ttps://gitlab.freedesktop.org/libnice/libnice/issues/45
|
|
|
|
|
|
|
| |
Like all other instances of nice_RAND_bytes that were renamed
to nice_RAND_nonce.
Fixes the windows build
|
|
|
|
| |
In the same way we do it for the other error messages
|
| |
|
| |
|
|
|
|
| |
This makes GLib usage annoying as it makes GSourceFunc casts invalid.
|
|
|
|
|
|
|
|
|
| |
Setting writable socket callbacks doesn't have to be limited to reliable
agents. TCP sockets need the callback in any case for correct operation
and calling nice_socket_set_writable_callback() on a NiceSocket that has
UDP as its base has no effect.
Differential Revision: https://phabricator.freedesktop.org/D1726
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If main SfB TURN server sends our allocation request to an alternate
server, the response will have XOR_MAPPED_ADDRESS containing the IP
address of the turn server that proxied the message instead of our own
actual external IP.
Before we create server reflexive candidates upon receiving an allocate
response, check that the TURN port got assigned on the same server we
sent out allocate request to. Otherwise, the request was proxied and
XOR_MAPPED_ADDRESS contains a bogus value we should ignore.
Issue introduced by 59fcf95d505c3995f858b826d10cd48321ed383e.
Differential Revision: https://phabricator.freedesktop.org/D1949
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With this patch we prevent the username and the password of a candidate
to be modified during a session, as required by the RFC, sect 9.1.2.
This is also needed from a memory management point of view, because the
password string pointer may be recorded in the components stun agent
sent_ids[] struct key member, and freeing these values there may cause
an use-after-free condition, when an inbound stun is received from this
candidate. This behavior has been observed with pidgin, xmpp, and
farstream when a same remote candidates are "updated" several times,
even if the credentials don't change in this case.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1917
|
|
|
|
|
|
|
|
| |
The tcp server reflexive discovered local candidates must be ignored
when force_relay is set.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1899
|
|
|
|
|
|
|
|
| |
Since commit 17f30e4, we may have a stream with an empty conncheck list,
and such a stream obviously should not be tested for failed components.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1895
|
|
|
|
|
|
|
|
| |
Verify the compatibility of the socket domain with the stun server
IP address, before sending a request.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1894
|
|
|
|
|
| |
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1893
|
|
|
|
|
| |
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1892
|
|
|
|
|
|
|
|
| |
With this patch, we put the pair in state failed if we cannot send
the connection check, for example due to missing local credentials.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1891
|
|
|
|
|
|
|
|
|
|
|
|
| |
the first case of test-new-dribble (standard-test) is updated, by making
the credentials swap between the left and right agent asymmetric.
Previously, ragent started to receive stun requests without initially
knowing lagent candidates. Now, ragent also ignores lagent credentials.
This modification allows to test changes introduced by the previous
commit.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1890
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With this patch we simplify the code used to handle the incoming stun
request when remote candidates or remote credentials have not been
received yet.
When the remote credentials is unknown, the stun request is stored
in a list of incoming_checks for later processing, and no further
processing is done, except responding to the request.
When the remote credentials are received, the triggered checks for these
incoming checks can now be queued, and the related pairs are created.
If the remote candidates have not been received when the stun request
on a valid local port arrives, a peer-reflexive remote candidate will be
created. This candidate may need to be updated later when remote
candidates are finally received, including candidate priority and
foundation, and also related pairs.
Reviewed-by: Olivier Crête <olivier.crete@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D1889
|
|
|
|
| |
The variable tie is actually never read.
|
|
|
|
|
|
|
| |
If a relay gives us an alternate-server, we need to cancel and reset
every candidate discovery attempt that uses the same server, to avoid
ending up with one component on one server and the other component on
another server (causing relay candidates with mismatched foundations).
|