Skip to content
Snippets Groups Projects
Commit be693539 authored by Eugene Voityuk's avatar Eugene Voityuk Committed by Joshua Colp
Browse files

chan_sip.c: Start ICE negotiation when response is sent or received.

The current logic for ICE negotiation starts it
when receiving an SDP with ICE candidates. This is
incorrect as ICE negotiation can only start when each 
call party have at least one pair of local and remote 
candidate. Starting ICE negotiation early would result 
in negotiation failure and ultimately no audio.

This change makes it so ICE negotiation is only started
when a response with SDP is received or when a response
with SDP is sent.

ASTERISK-24146

Change-Id: I55a632bde9e9827871b09141d82747e08379a8ca
parent 4cf470c7
No related branches found
No related tags found
No related merge requests found
......@@ -10629,7 +10629,11 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action
/* Setup audio address and port */
if (p->rtp) {
if (sa && portno > 0) {
start_ice(p->rtp, (req->method != SIP_RESPONSE) ? 0 : 1);
/* Start ICE negotiation here, only when it is response, and setting that we are conrolling agent,
as we are offerer */
if (req->method == SIP_RESPONSE) {
start_ice(p->rtp, 1);
}
ast_sockaddr_set_port(sa, portno);
ast_rtp_instance_set_remote_address(p->rtp, sa);
if (debug) {
......@@ -13403,6 +13407,11 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
if (!doing_directmedia) {
if (ast_test_flag(&p->flags[2], SIP_PAGE3_ICE_SUPPORT)) {
add_ice_to_sdp(p->rtp, &a_audio);
/* Start ICE negotiation, and setting that we are controlled agent,
as this is response to offer */
if (resp->method == SIP_RESPONSE) {
start_ice(p->rtp, 0);
}
}
 
add_dtls_to_sdp(p->rtp, &a_audio);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment