summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-12-01 08:20:28 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-12-01 08:20:28 +0000
commita8e98c468d836b37bd202d356626a22a0a8863ea (patch)
treea5ad1c58c6847ebe5a8a5a90d8dc604ef555d598
parent186a61a84e87b3e0c1d4944a3b79ad94a999b744 (diff)
Fix #1165:
- Fixed pjsua_media_channel_create_sdp() to re-calculate audio index of the remote offer, instead of using existing audio index calculated by pjsua_media_channel_init(), as for subsequent SDP offer/answer, pjsua_media_channel_init() may not be called. - Fixed SRTP transport to be able to switch SRTP status from active to inactive/by-passed and vice versa. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3376 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/transport_srtp.c6
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c14
2 files changed, 19 insertions, 1 deletions
diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c
index 1c6c7f93..4a1d08de 100644
--- a/pjmedia/src/pjmedia/transport_srtp.c
+++ b/pjmedia/src/pjmedia/transport_srtp.c
@@ -645,6 +645,8 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_stop(pjmedia_transport *srtp)
}
p_srtp->session_inited = PJ_FALSE;
+ pj_bzero(&p_srtp->rx_policy, sizeof(p_srtp->rx_policy));
+ pj_bzero(&p_srtp->tx_policy, sizeof(p_srtp->tx_policy));
pj_lock_release(p_srtp->mutex);
@@ -1221,6 +1223,7 @@ static pj_status_t transport_encode_sdp(pjmedia_transport *tp,
PJ_ASSERT_RETURN(tp && sdp_pool && sdp_local, PJ_EINVAL);
srtp->offerer_side = sdp_remote == NULL;
+ srtp->bypass_srtp = PJ_FALSE;
m_rem = sdp_remote ? sdp_remote->media[media_index] : NULL;
m_loc = sdp_local->media[media_index];
@@ -1576,6 +1579,9 @@ static pj_status_t transport_media_start(pjmedia_transport *tp,
BYPASS_SRTP:
srtp->bypass_srtp = PJ_TRUE;
srtp->peer_use = PJMEDIA_SRTP_DISABLED;
+ if (srtp->session_inited) {
+ pjmedia_transport_srtp_stop(tp);
+ }
PROPAGATE_MEDIA_START:
return pjmedia_transport_media_start(srtp->member_tp, pool,
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 28920079..8ede0f8c 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -1247,7 +1247,7 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id,
pj_bool_t srtp_active;
#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
- srtp_active = acc->cfg.use_srtp && srtp != NULL;
+ srtp_active = acc->cfg.use_srtp;
#else
srtp_active = PJ_FALSE;
#endif
@@ -1301,6 +1301,18 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
return PJ_EBUSY;
}
+ if (rem_sdp && rem_sdp->media_count != 0) {
+ pj_bool_t srtp_active;
+
+#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
+ srtp_active = pjsua_var.acc[call->acc_id].cfg.use_srtp;
+#else
+ srtp_active = PJ_FALSE;
+#endif
+
+ call->audio_idx = find_audio_index(rem_sdp, srtp_active);
+ }
+
/* Media index must have been determined before */
pj_assert(call->audio_idx != -1);