summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2011-12-09 07:19:25 +0000
committerBenny Prijono <bennylp@teluu.com>2011-12-09 07:19:25 +0000
commit53f86de5d3872bcbe7e9d11b427a03f8dfb12695 (patch)
tree72174a9625a6329f838f133ff25932d306dac90e
parent2ead2b5de766b211c61b8dd4a3c1696850fc5a71 (diff)
Fixed #1416: Allow application to send data after ICE negotiation fails
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@3906 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c9
-rw-r--r--pjnath/src/pjnath/ice_strans.c5
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);
}