diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c index af8bde4573..5f3dd8e380 100644 --- a/pjmedia/src/pjmedia/transport_srtp.c +++ b/pjmedia/src/pjmedia/transport_srtp.c @@ -1892,11 +1892,6 @@ static pj_status_t transport_media_create(pjmedia_transport *tp, srtp->keying_cnt--; keying_status = st; continue; - } else if (srtp->offerer_side) { - /* Currently we can send one keying only in outgoing offer */ - srtp->keying[0] = srtp->keying[i]; - srtp->keying_cnt = 1; - break; } ++i; @@ -2002,14 +1997,6 @@ static pj_status_t transport_encode_sdp(pjmedia_transport *tp, srtp->keying_cnt = 0; } - if (srtp->keying_cnt != 0) { - /* At this point for now, keying count should be 1 */ - pj_assert(srtp->keying_cnt == 1); - PJ_LOG(4, (srtp->pool->obj_name, "SRTP uses keying method %s", - ((int)srtp->keying[0]->type==PJMEDIA_SRTP_KEYING_SDES? - "SDES":"DTLS-SRTP"))); - } - return PJ_SUCCESS; } @@ -2027,9 +2014,6 @@ static pj_status_t transport_media_start(pjmedia_transport *tp, PJ_ASSERT_RETURN(tp, PJ_EINVAL); - /* At this point for now, keying count should be 0 or 1 */ - pj_assert(srtp->keying_cnt <= 1); - srtp->started = PJ_TRUE; status = pjmedia_transport_media_start(srtp->member_tp, pool, diff --git a/pjmedia/src/pjmedia/transport_srtp_sdes.c b/pjmedia/src/pjmedia/transport_srtp_sdes.c index 8f98292baa..75b0c9b6b5 100644 --- a/pjmedia/src/pjmedia/transport_srtp_sdes.c +++ b/pjmedia/src/pjmedia/transport_srtp_sdes.c @@ -305,6 +305,11 @@ static pj_status_t sdes_media_create( pjmedia_transport *tp, /* Get transport protocol and drop any RTCP-FB flag */ rem_proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); + + /* Drop DTLS proto if crypto is present */ + if (pjmedia_sdp_media_find_attr(m, &ID_CRYPTO, NULL) != NULL) + PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS); + if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) { @@ -361,6 +366,12 @@ static pj_status_t sdes_encode_sdp( pjmedia_transport *tp, /* Get transport protocol and drop any RTCP-FB flag */ proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROFILE_RTCP_FB); + + /* Drop DTLS proto if crypto is present */ + if (!srtp->offerer_side && + pjmedia_sdp_media_find_attr(m, &ID_CRYPTO, NULL) != NULL) + PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROTO_DTLS); + if (proto != PJMEDIA_TP_PROTO_RTP_AVP && proto != PJMEDIA_TP_PROTO_RTP_SAVP) { @@ -444,6 +455,10 @@ static pj_status_t sdes_encode_sdp( pjmedia_transport *tp, rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); + /* Drop DTLS proto if crypto is present */ + if (pjmedia_sdp_media_find_attr(m_rem, &ID_CRYPTO, NULL) != NULL) + PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS); + /* Generate transport */ switch (srtp->setting.use) { case PJMEDIA_SRTP_DISABLED: @@ -662,6 +677,11 @@ static pj_status_t sdes_media_start( pjmedia_transport *tp, /* Get transport protocol and drop any RTCP-FB flag */ rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); + + /* Drop DTLS proto if crypto is present */ + if (pjmedia_sdp_media_find_attr(m_rem, &ID_CRYPTO, NULL) != NULL) + PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS); + if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) {