This patch fixes an issue where ice init fails when there is a bad server. Init should not fail, because other candidates might still work. Some of this patch was already integrated in the master branch of pjsip, but it does not cover all use cases. The author is Guillaume Roguez <guillaume.roguez@xxxxxxxxxxxxxxxxxxxx> (in CC). The patch was developed for Ring (https://ring.cx/) Related issue: https://trac.pjsip.org/repos/changeset/5465 Please let us know if you have any questions, -- Alexandre Viau aviau@xxxxxxxxxx
--- a/pjnath/src/pjnath/turn_session.c 2016-09-19 18:21:09.073614574 -0400 +++ b/pjnath/src/pjnath/turn_session.c 2016-09-19 18:21:30.648631620 -0400 @@ -653,3 +653,3 @@ - cnt = PJ_TURN_MAX_DNS_SRV_CNT; + cnt = 1; ai = (pj_addrinfo*) --- a/pjnath/src/pjnath/ice_strans.c 2016-09-19 18:36:04.180104330 -0400 +++ b/pjnath/src/pjnath/ice_strans.c 2016-09-19 18:37:10.614136809 -0400 @@ -1304,2 +1304,5 @@ + if (!comp->turn[n].sock) + continue; + /* Gather remote addresses for this component */ @@ -1995,4 +1998,37 @@ sess_init_update(comp->ice_st); + } else if ((old_state == PJ_TURN_STATE_RESOLVING || old_state == PJ_TURN_STATE_ALLOCATING) && + new_state >= PJ_TURN_STATE_DEALLOCATING) + { + pj_ice_sess_cand *cand = NULL; + unsigned i; + + /* DNS resolution has failed! */ + ++comp->turn[tp_idx].err_cnt; + + /* Unregister ourself from the TURN relay */ + pj_turn_sock_set_user_data(turn_sock, NULL); + comp->turn[tp_idx].sock = NULL; + + /* Wait until initialization completes */ + pj_grp_lock_acquire(comp->ice_st->grp_lock); + + /* Find relayed candidate in the component */ + for (i=0; i<comp->cand_cnt; ++i) { + if (comp->cand_list[i].type == PJ_ICE_CAND_TYPE_RELAYED && + comp->cand_list[i].transport_id == data->transport_id) + { + cand = &comp->cand_list[i]; + break; + } + } + pj_assert(cand != NULL); + + pj_grp_lock_release(comp->ice_st->grp_lock); + + cand->status = old_state == PJ_TURN_STATE_RESOLVING ? PJ_ERESOLVE : PJ_EINVALIDOP; + + sess_init_update(comp->ice_st); + } else if (new_state >= PJ_TURN_STATE_DEALLOCATING) { pj_turn_session_info info;
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Visit our blog: http://blog.pjsip.org pjsip mailing list pjsip@xxxxxxxxxxxxxxx http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org