diff options
-rw-r--r-- | pjmedia/src/pjmedia/transport_ice.c | 9 | ||||
-rw-r--r-- | pjnath/src/pjnath/ice_strans.c | 5 |
2 files changed, 11 insertions, 3 deletions
diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c index 3e6db887..9b777501 100644 --- a/pjmedia/src/pjmedia/transport_ice.c +++ b/pjmedia/src/pjmedia/transport_ice.c @@ -402,7 +402,9 @@ static pj_status_t encode_session_in_sdp(struct transport_ice *tp_ice, * the session, in this case we will answer with full ICE SDP and * new ufrag/pwd pair. */ - if (!restart_session && pj_ice_strans_sess_is_complete(tp_ice->ice_st)) { + if (!restart_session && pj_ice_strans_sess_is_complete(tp_ice->ice_st) && + pj_ice_strans_get_state(tp_ice->ice_st) != PJ_ICE_STRANS_STATE_FAILED) + { const pj_ice_sess_check *check; char *attr_buf; pjmedia_sdp_conn *conn; @@ -532,7 +534,10 @@ static pj_status_t encode_session_in_sdp(struct transport_ice *tp_ice, pjmedia_sdp_attr_add(&m->attr_count, m->attr, attr); } - } else if (pj_ice_strans_has_sess(tp_ice->ice_st)) { + } else if (pj_ice_strans_has_sess(tp_ice->ice_st) && + pj_ice_strans_get_state(tp_ice->ice_st) != + PJ_ICE_STRANS_STATE_FAILED) + { /* Encode all candidates to SDP media */ char *attr_buf; unsigned comp; diff --git a/pjnath/src/pjnath/ice_strans.c b/pjnath/src/pjnath/ice_strans.c index f5acfdb6..d44e5a25 100644 --- a/pjnath/src/pjnath/ice_strans.c +++ b/pjnath/src/pjnath/ice_strans.c @@ -1163,8 +1163,11 @@ PJ_DEF(pj_status_t) pj_ice_strans_sendto( pj_ice_strans *ice_st, /* If ICE is available, send data with ICE, otherwise send with the * default candidate selected during initialization. + * + * https://trac.pjsip.org/repos/ticket/1416: + * Once ICE has failed, also send data with the default candidate. */ - if (ice_st->ice) { + if (ice_st->ice && ice_st->state < PJ_ICE_STRANS_STATE_FAILED) { if (comp->turn_sock) { pj_turn_sock_lock(comp->turn_sock); } |