Skip to content

Commit 5c14cff

Browse files
committed
transport_srtp: Allow multiple keying methods in SDP offer. Callee will select first available keying method.
1 parent 8a17607 commit 5c14cff

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

pjmedia/src/pjmedia/transport_srtp.c

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,11 +1892,6 @@ static pj_status_t transport_media_create(pjmedia_transport *tp,
18921892
srtp->keying_cnt--;
18931893
keying_status = st;
18941894
continue;
1895-
} else if (srtp->offerer_side) {
1896-
/* Currently we can send one keying only in outgoing offer */
1897-
srtp->keying[0] = srtp->keying[i];
1898-
srtp->keying_cnt = 1;
1899-
break;
19001895
}
19011896

19021897
++i;
@@ -2002,14 +1997,6 @@ static pj_status_t transport_encode_sdp(pjmedia_transport *tp,
20021997
srtp->keying_cnt = 0;
20031998
}
20041999

2005-
if (srtp->keying_cnt != 0) {
2006-
/* At this point for now, keying count should be 1 */
2007-
pj_assert(srtp->keying_cnt == 1);
2008-
PJ_LOG(4, (srtp->pool->obj_name, "SRTP uses keying method %s",
2009-
((int)srtp->keying[0]->type==PJMEDIA_SRTP_KEYING_SDES?
2010-
"SDES":"DTLS-SRTP")));
2011-
}
2012-
20132000
return PJ_SUCCESS;
20142001
}
20152002

@@ -2027,9 +2014,6 @@ static pj_status_t transport_media_start(pjmedia_transport *tp,
20272014

20282015
PJ_ASSERT_RETURN(tp, PJ_EINVAL);
20292016

2030-
/* At this point for now, keying count should be 0 or 1 */
2031-
pj_assert(srtp->keying_cnt <= 1);
2032-
20332017
srtp->started = PJ_TRUE;
20342018

20352019
status = pjmedia_transport_media_start(srtp->member_tp, pool,

pjmedia/src/pjmedia/transport_srtp_sdes.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,11 @@ static pj_status_t sdes_media_create( pjmedia_transport *tp,
305305
/* Get transport protocol and drop any RTCP-FB flag */
306306
rem_proto = pjmedia_sdp_transport_get_proto(&m->desc.transport);
307307
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB);
308+
309+
/* Drop DTLS proto if crypto is present */
310+
if (pjmedia_sdp_media_find_attr(m, &ID_CRYPTO, NULL) != NULL)
311+
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS);
312+
308313
if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP &&
309314
rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP)
310315
{
@@ -361,6 +366,12 @@ static pj_status_t sdes_encode_sdp( pjmedia_transport *tp,
361366
/* Get transport protocol and drop any RTCP-FB flag */
362367
proto = pjmedia_sdp_transport_get_proto(&m->desc.transport);
363368
PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROFILE_RTCP_FB);
369+
370+
/* Drop DTLS proto if crypto is present */
371+
if (!srtp->offerer_side &&
372+
pjmedia_sdp_media_find_attr(m, &ID_CRYPTO, NULL) != NULL)
373+
PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROTO_DTLS);
374+
364375
if (proto != PJMEDIA_TP_PROTO_RTP_AVP &&
365376
proto != PJMEDIA_TP_PROTO_RTP_SAVP)
366377
{
@@ -444,6 +455,10 @@ static pj_status_t sdes_encode_sdp( pjmedia_transport *tp,
444455
rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport);
445456
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB);
446457

458+
/* Drop DTLS proto if crypto is present */
459+
if (pjmedia_sdp_media_find_attr(m_rem, &ID_CRYPTO, NULL) != NULL)
460+
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS);
461+
447462
/* Generate transport */
448463
switch (srtp->setting.use) {
449464
case PJMEDIA_SRTP_DISABLED:
@@ -662,6 +677,11 @@ static pj_status_t sdes_media_start( pjmedia_transport *tp,
662677
/* Get transport protocol and drop any RTCP-FB flag */
663678
rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport);
664679
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB);
680+
681+
/* Drop DTLS proto if crypto is present */
682+
if (pjmedia_sdp_media_find_attr(m_rem, &ID_CRYPTO, NULL) != NULL)
683+
PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROTO_DTLS);
684+
665685
if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP &&
666686
rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP)
667687
{

0 commit comments

Comments
 (0)