Gather candidates in one step, and create candidate pairings against
local sockets in a second step.
Change-Id: I85bba7fe95af14d7f77a14d5baad4ea072a83bd3
The internally used VALID flag doesn't reflect the "valid" state from
the RFC, possibly leading to legitimate packets (DTLS etc) to be
ignored. Introduce a new flag to track which ICE pairs have been
authenticated through requests or responses.
Change-Id: I11b8e2bb6a7638ab9405304c6f45c29b20d3739c
Instead of keeping one global hash/list of all received ICE fragments,
indexed by string call ID and from-tag, move the hash/list of ICE
fragments into the call object, now indxed only by the from-tag.
This requires a call object to exist before an ICE fragment can be
stored. Change the order of operations to always create a call object
first, then parse the SDP, then check for ICE fragment processing. The
determining factor now is only whether the monologue exists.
Duplicate the raw SDP into the call's memory arena instead of onto the
heap.
ICE fragments now don't need to store the pre-parsed SDP any more, and
the trickle ICE handling code is guaranteed to always have the fully
parsed SDP information.
Strings for fragment indexes can now be allocated from the call's memory
arena.
Obsolete the extra thread used to delete old ICE fragments. This is now
done in-line with regular call timeout processing.
Change-Id: I7acbc4c52666c4cdf1c02324bf33cf0bfcb4f0d0
For trickle ICE updates that need to be queued up, this requires storing
the unparsed SDP in the fragment object, and then doing the parsing when
actually processing the fragment.
This allows the call's memory arena to be used for parsing.
Change-Id: I28ed192c4443cedfa3095007cc8a555e3aa7a17a
In the header files follow the rules:
1. Firstly goes ifndef/define construction, then one empty row.
2. Secondly go system headers, so in angle-brackets, then one empty row.
3. If there are important pre-processor definitions, which affect
the following custom file headers, they are added next, then one empty row.
4. Thirdly custom header files, so in double quotes,
then at least one empty row.
5. If there is "xt_RTPENGINE.h", it's mentioned next, but separately,
then one empty row.
6. Then pre-processor definitions, and one empty row before the code.
In some situations it's allowed to step aside from the rules,
when inclusions are dependent on each other, so on specific sequence,
and also possibly on some inline objects definitions.
But, if possible to follow the rules, it should be done.
Change-Id: I6bec69b508653947c04e7785775373d21112eb58
Make it possible for a looper thread function to break out of the loop
by returning an appropriate status code.
Change-Id: I22e7789270eed4bf3340e7dae941929de58700ea
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
Defer handling of trickle ICE updates to the appropriate function, which
also handles queuing up the updates in case they're processed before the
call or call party has been fully created.
Change-Id: I2489cb0ee96fba35003765bbdd692f02caed7055
Move trickle ICE handling out of __media_init_from_flags and into a
higher-level function. This obsoletes the special magic return value to
indicate a trickle ICE failure.
All methods accepting trickle ICE updates must now explicitly call the
trickle ICE update function.
The requirement to have a full dialogue for trickle ICE updates is
removed as trickle ICE only affects one side.
Change-Id: I0850e1858876ca7bcdd39b7144b53b5a4afed53e
Moving code for handling (queuing, dequeuing) trickle ICE fragments into
ice.c, where it makes no sense. No functional changes.
Change-Id: Ib68f82e8d58efe066fdc48cd32ca9869cdeab846
Whether a bit-field is signed or unsigned is implementation specific, so
we should be explicit about this.
Change-Id: I744df3d24bc08e95fa816ba4135f19cd3a5dcb17
Warned-by: lgtm
stun.c: In function ‘stun_error_len’:
stun.c:388:62: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
388 | output_init(&mh, iov, &hdr, STUN_BINDING_ERROR_RESPONSE, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘stun_binding_success’:
stun.c:479:64: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
479 | output_init(&mh, iov, &hdr, STUN_BINDING_SUCCESS_RESPONSE, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘__stun_success’:
stun.c:540:42: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
540 | return ice_response(sfd, sin, attrs, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘__stun_error’:
stun.c:545:42: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
545 | return ice_response(sfd, sin, attrs, req->transaction);
| ~~~^~~~~~~~~~~~~
redis.c: In function ‘redis_hash_get_sdes_params.isra.0’:
redis.c:1095:39: warning: ‘_tag’ directive output may be truncated writing 4 bytes into a region of size between 1 and 32 [-Wformat-truncation=]
1095 | snprintf(tagkey, sizeof(tagkey), "%s_tag", kk);
| ^~~~
In file included from /usr/include/stdio.h:867,
from ../lib/str.h:9,
from ../lib/compat.h:16,
from ../include/redis.h:8,
from redis.c:1:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: ‘__builtin___snprintf_chk’ output between 5 and 36 bytes into a destination of size 32
67 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Change-Id: I214458fd3f596e565b1bba9d88808b7c99f9c876
This brings master up to date with branch `rfuchs/socket-rework` at
commit `b1bcc096b7`. The branches have diverged too much for a proper
merge, so this is a manual (squashed) merge.
The old master before this merge can be found in branch
`old-master-before-socket-rework` (commit `82199216b2`).
This is a complete rewrite of all socket handling routines. The most
important functional change is that sockets aren't indiscriminately
bound to INADDR_ANY (or rather in6addr_any), but instead are always
bound to their respective local interface address and with the correct
address family.
Side effects of this are that in multi-homed environments, multiple
sockets must be opened (one per interface address and family) which must
be taken into account when considering RLIMIT_NOFILE values. As a
benefit, this change allows rtpengine to utilize the full UDP port space
per interface address, instead of just one port space per machine.
The socket abstraction also makes it possible to support RTP over TCP in
the future.
Change-Id: If6cf4f42136229490186d2d2482fb4fc140c2b53
Squashed commit of the following:
commit 00213e66c7
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 27 09:40:04 2015 -0500
perform ICE restart if we change ports
commit 27fbcbd6cb
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 15:58:12 2015 -0500
locking fixes
commit 60c1c5ae13
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 15:58:06 2015 -0500
unkernelize when ICE completes
commit 1d816f9864
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 15:54:44 2015 -0500
relaxed locking where not needed
commit 75b58a9093
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 11:46:08 2015 -0500
use atomic bitfield instead of bitfield+mutex
commit 03552eeed9
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 11:24:59 2015 -0500
shuffle around aux.h a bit more
commit b9b8a3aa5e
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 11:16:12 2015 -0500
remove some code redundancy through a "state machine"
commit 0b4bfef1b1
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 10:10:41 2015 -0500
reorder to match struct
commit a2a51d81a8
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 10:10:03 2015 -0500
clear more states for ICE restart
commit d554a2b858
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 09:58:29 2015 -0500
dont duplicate candidates on re-invite
commit 4c804652b7
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 09:58:20 2015 -0500
retain ICE role across re-invites
commit 4a586dd72d
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 09:42:09 2015 -0500
eliminate duplicate log messages
commit ef0be2e308
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 26 09:32:36 2015 -0500
fix incorrect log message
commit 2544b60f00
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 15:26:48 2015 -0500
better logging for ICE agents
commit c42807384e
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 15:18:27 2015 -0500
dont run ICE checks if we dont have a password
commit 1b56cb75b5
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 15:16:19 2015 -0500
ICE pairs should go in triggered queue only once
commit d10c56f3ae
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 14:04:00 2015 -0500
obsolete the ICE agent running flag
commit 52237e3399
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 14:02:06 2015 -0500
cease checks once ICE is completed
commit 5332d18612
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 13:53:57 2015 -0500
fix ICE completion logging
commit 85f5fd63aa
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 13:53:33 2015 -0500
make better use of bit flags
commit 796b48bb78
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 12:09:46 2015 -0500
improved learned candidate pairing and completion logic
commit d15561072e
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 11:21:45 2015 -0500
support upper case transport strings
commit 557da7b1c3
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 10:43:57 2015 -0500
use struct endpoint in ice candidates
commit 951040bfd6
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 10:31:13 2015 -0500
more meaningful ICE log messages
commit 8ec2426bd3
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 09:54:49 2015 -0500
shut down agent if no components - limit number of candidates
commit 149260f3a6
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 25 09:44:13 2015 -0500
handle ICE restarts
commit 6a18c31f81
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 16:29:01 2015 -0500
dont clear succeeded flag when nominating
commit 93e0861d02
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 16:21:40 2015 -0500
use correct pwd in stun binding response
commit 32ba3ea406
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 16:03:09 2015 -0500
use deterministic foundation for prflx cands
commit 2f2dc91515
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 15:21:13 2015 -0500
handle initial ICE role
commit a6b8ad25e6
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 14:43:47 2015 -0500
another ICE scheduling fix
commit c572b04e55
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 14:14:29 2015 -0500
make ICE aware of rtcp-mux
commit 93cd2d2560
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 14:13:27 2015 -0500
print timestamp when logging to stderr
commit 22a52ffda2
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 14:13:13 2015 -0500
ICE scheduling fixes
commit 5d2d1a7739
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 13:27:59 2015 -0500
increase ICE pwd length to make chrome happy
commit ceff6698db
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 13:09:54 2015 -0500
dont discard RTP if ICE hasnt finished yet
commit e809877d0e
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 13:06:31 2015 -0500
implement remote-candidates (untested)
commit 41670eadbb
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 11:58:13 2015 -0500
shut down ICE agent when everything fails
commit 1ca26c4a81
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 11:10:46 2015 -0500
fix up SDP output for ICE candidates
commit 0287d68f33
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 10:09:49 2015 -0500
process ICE completion and fire up DTLS if desired
commit 5b6386036b
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 09:37:52 2015 -0500
use a btree to schedule ice checks
commit 2bc25f1e0f
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 24 09:37:02 2015 -0500
convert shutdown condition into global var
commit ecf0c5587c
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 14:50:46 2015 -0500
replace poller_now with timeval g_now
commit 164ecdd7ac
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 13:00:15 2015 -0500
handle nominations if we're controlling
commit d013659365
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 12:11:40 2015 -0500
copy controlling/ed role into agent
commit 09f1cae14a
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 12:02:54 2015 -0500
separate nominated pairs from valid pairs
commit f75f338cde
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 11:55:30 2015 -0500
organize aux.h into sections
commit d6acee1392
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Mon Feb 23 11:55:17 2015 -0500
use b-tree for various ICE lists
commit af9804d139
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 16:21:09 2015 -0500
prepare to finalize ice processing
commit 18df118375
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 16:19:50 2015 -0500
prettier logging
commit 280755c61a
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 15:02:14 2015 -0500
implement unfreezing of other components on success
commit 5d13657d5b
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 15:00:24 2015 -0500
bitfield access macros
commit 71746ad6a1
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 14:15:05 2015 -0500
handle ice updates and duplicate candidates
commit 02309d1b5b
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 12:22:29 2015 -0500
handle role conflicts
commit 52acf54ba5
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 10:24:01 2015 -0500
proper pair priorities calculation
commit 307af79e8d
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 09:54:18 2015 -0500
fix address family mixups
commit 7cbfd4d36a
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 20 09:14:49 2015 -0500
delay dtls startup and timeout checks while ice is running
commit 2a8ab75228
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 19 16:47:56 2015 -0500
process ice/stun responses
commit 92da323dcf
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 19 15:14:30 2015 -0500
adding stun server script for testing
commit c5cfeb122c
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 19 13:42:40 2015 -0500
act on stun requests, learn prflx candidates
commit 1cafd35e7a
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 19 13:30:14 2015 -0500
fix pktinfo for ipv4 packets
commit 8e338b8426
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu Feb 19 11:48:55 2015 -0500
rework interface handling to prepare to learn ICE candidate
commit 09e365c142
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 18 16:24:42 2015 -0500
add some locking
commit 8fc7b75095
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 18 16:05:20 2015 -0500
extend logic in response to stun req and implement triggered checks
commit 35eeb04376
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 18 12:46:42 2015 -0500
handle ice/stun retransmits and timeouts
commit b5637565b6
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Wed Feb 18 11:19:19 2015 -0500
first implementation of sending ICE checks
commit f0c1928c05
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 17 14:39:11 2015 -0500
preliminary list and loop for ICE checks
commit c38d6e22c1
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue Feb 17 12:00:24 2015 -0500
pair up candidates and prepare to run checks
commit d9559b4c59
Author: Richard Fuchs <rfuchs@sipwise.com>
Date: Fri Feb 13 15:36:29 2015 -0500
parse and remeber basic ICE attributes