]> sjero.net Git - linphone/commitdiff
Handle case where ICE is activated and the configured STUN server do not reply.
authorGhislain MARY <ghislain.mary@belledonne-communications.com>
Thu, 26 Jul 2012 08:49:12 +0000 (10:49 +0200)
committerGhislain MARY <ghislain.mary@belledonne-communications.com>
Thu, 26 Jul 2012 08:49:12 +0000 (10:49 +0200)
coreapi/misc.c
coreapi/sal_eXosip2_sdp.c

index 2f887bf0cd67e5d19c0bbbdec03e04551d92178c..51f217c70676b0178e432baac05293e26ad09bab 100644 (file)
@@ -692,17 +692,25 @@ void linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call)
        } while (!((audio_gatherings[0].response == TRUE) && (audio_gatherings[1].response == TRUE)
                && (!call->params.has_video || ((video_gatherings[0].response == TRUE) && (video_gatherings[1].response == TRUE)))));
 
-       ice_session_compute_candidates_foundations(ice_session);
-       ice_session_eliminate_redundant_candidates(ice_session);
-       ice_session_choose_default_candidates(ice_session);
+       if ((audio_gatherings[0].response == FALSE) || (audio_gatherings[1].response == FALSE)
+               || (call->params.has_video && ((video_gatherings[0].response == FALSE) || (video_gatherings[1].response == FALSE)))) {
+               /* Failed some STUN checks, deactivate ICE. */
+               ice_session_destroy(ice_session);
+               ice_session = NULL;
+               sal_op_set_ice_session(call->op, ice_session);
+       } else {
+               ice_session_compute_candidates_foundations(ice_session);
+               ice_session_eliminate_redundant_candidates(ice_session);
+               ice_session_choose_default_candidates(ice_session);
+       }
 
        close_socket(audio_gatherings[0].sock);
        close_socket(audio_gatherings[1].sock);
-       ice_dump_candidates(audio_check_list);
+       if (ice_session != NULL) ice_dump_candidates(audio_check_list);
        if (call->params.has_video && (video_check_list != NULL)) {
                if (video_gatherings[0].sock != -1) close_socket(video_gatherings[0].sock);
                if (video_gatherings[1].sock != -1) close_socket(video_gatherings[1].sock);
-               ice_dump_candidates(video_check_list);
+               if (ice_session != NULL) ice_dump_candidates(video_check_list);
        }
 }
 
index 688d32c08654aacaa540dab381e799bad9c8ed84..fee5a53135959adfbe917857d282c39dc7db9566 100644 (file)
@@ -373,7 +373,7 @@ static void add_line(sdp_message_t *msg, int lineno, const SalStreamDescription
        }
 
        /*only add a c= line within the stream description if address are differents*/
-       if (strcmp(rtp_addr,sdp_message_c_addr_get(msg, -1, 0))!=0){
+       if (rtp_addr[0]!='\0' && strcmp(rtp_addr,sdp_message_c_addr_get(msg, -1, 0))!=0){
                bool_t inet6;
                if (strchr(rtp_addr,':')!=NULL){
                        inet6=TRUE;