diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b2d61127fc63eac3f8501b1ef019b47073f2a79a..812232ef1486466b9c81fd618b48daae34c523a6 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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);