Affects Version/s: 13.15.0
Security Level: None
Environment:built with pjprojects bundled.
Frequency of Occurrence:Constant
When asterisk (chan_sip) receives a SDP offer with rtcp_mux capabilities announced as optional in the sense that the SDP offer contains ice candidates for both RTP and RTCP components (this is the default case for firefox), it seems the resulting check_list that asterisk creates fails. Both parties support RTCP mux and do end up using RTCP MUX, but asterisk builds its ice-check-list with the ice->rcand structure containing candidates for both components.
I hope you can reproduce this issue in a proper test environment. At this time I only have my test notes:
A chan_sip webrtc client makes an outgoing call
Description of general setup:
Webrtc client uses SIPml and matches a registered chan_sip peer A.x in asterisk configured as in https://wiki.asterisk.org/wiki/display/AST/WebRTC+tutorial+using+SIPML5
Test case 1.1
Webrtc client uses firefox (which by default has rtcpmuxpolicy negotiate). Peer A.x has rtcp_mux=yes. X sends a SDP offer like the following to asterisk:
Result: Asterisk sends a 200 OK within a second, but ast_rtp_on_ice_complete fires after 8 seconds and consequently 2-way audio is delayed 8 seconds in the corresponding call.
Internal notes: By using gdb and inserting a breakpoint in ast_rtp_on_ice_complete I could inspect the ice session attributes and I could verify "(gdb) p ice->clist" that none of the tests in the ice_checklist had succeeded, moreover the ice->rcand was populated with candidates for both components RTP and RTCP.
Test case 1.2
As 1.2 but using chrome with rtcpmuxpolicy require.
X then sends a SDP offer like the following:
Result: success, ice completion within a second, and there is only one component in the ice->rcand.
Test case 1.3
As 1.1 but webrtc client uses chrome with rtcpMuxPolicy explicitly set to "negotiate"
Result: same result as 1.1
Test case 1.4
As 1.1 but A.x has rtcp_mux=no,
Result, success, rtcp_mux is not used, ice->rcand contains seperate RTP and RTCP candidates and the ice check_list succeseds.