- Timestamp:
- Jul 12, 2018 8:22:31 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/transport_srtp_sdes.c
r5755 r5820 274 274 { 275 275 struct transport_srtp *srtp = (struct transport_srtp*)tp->user_data; 276 pj_uint32_t rem_proto = 0; 276 277 277 278 PJ_UNUSED_ARG(options); … … 281 282 if (!srtp->offerer_side) { 282 283 pjmedia_sdp_media *m = sdp_remote->media[media_index]; 283 if (pj_stricmp(&m->desc.transport, &ID_RTP_AVP) != 0 && 284 pj_stricmp(&m->desc.transport, &ID_RTP_SAVP) != 0) 284 285 /* Get transport protocol and drop any RTCP-FB flag */ 286 rem_proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); 287 PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 288 if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && 289 rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 285 290 { 286 291 return PJMEDIA_SRTP_ESDPINTRANSPORT; … … 292 297 /* As offerer: do nothing. */ 293 298 } else { 294 pjmedia_sdp_media *m_rem = sdp_remote->media[media_index];295 296 299 /* Validate remote media transport based on SRTP usage option. */ 297 300 switch (srtp->setting.use) { 298 301 case PJMEDIA_SRTP_DISABLED: 299 if ( pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0)302 if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 300 303 return PJMEDIA_SRTP_ESDPINTRANSPORT; 301 304 break; … … 303 306 break; 304 307 case PJMEDIA_SRTP_MANDATORY: 305 if ( pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0)308 if (rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 306 309 return PJMEDIA_SRTP_ESDPINTRANSPORT; 307 310 break; … … 334 337 { 335 338 pjmedia_sdp_media *m = sdp_remote? m_rem : m_loc; 336 if (pj_stricmp(&m->desc.transport, &ID_RTP_AVP) != 0 && 337 pj_stricmp(&m->desc.transport, &ID_RTP_SAVP) != 0) 339 pj_uint32_t proto = 0; 340 341 /* Get transport protocol and drop any RTCP-FB flag */ 342 proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); 343 PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROFILE_RTCP_FB); 344 if (proto != PJMEDIA_TP_PROTO_RTP_AVP && 345 proto != PJMEDIA_TP_PROTO_RTP_SAVP) 338 346 { 339 347 return PJMEDIA_SRTP_ESDPINTRANSPORT; … … 409 417 } else { 410 418 /* Answerer side */ 419 pj_uint32_t rem_proto = 0; 411 420 412 421 pj_assert(sdp_remote && m_rem); 422 423 /* Get transport protocol and drop any RTCP-FB flag */ 424 rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); 425 PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 413 426 414 427 /* Generate transport */ … … 416 429 case PJMEDIA_SRTP_DISABLED: 417 430 /* Should never reach here */ 418 if ( pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0)431 if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 419 432 return PJMEDIA_SRTP_ESDPINTRANSPORT; 420 433 return PJ_SUCCESS; … … 422 435 break; 423 436 case PJMEDIA_SRTP_MANDATORY: 424 if ( pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0)437 if (rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 425 438 return PJMEDIA_SRTP_ESDPINTRANSPORT; 426 439 break; … … 496 509 */ 497 510 if ((!has_crypto_attr || matched_idx == -1) && 498 pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP) == 0)511 rem_proto == PJMEDIA_TP_PROTO_RTP_AVP) 499 512 { 500 513 return PJ_SUCCESS; … … 610 623 611 624 /* Verify media transport, it has to be RTP/AVP or RTP/SAVP */ 612 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP) != 0 &&613 pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0)614 625 { 615 return PJMEDIA_SRTP_ESDPINTRANSPORT; 616 } 617 618 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0) 619 srtp->peer_use = PJMEDIA_SRTP_MANDATORY; 620 else 621 srtp->peer_use = PJMEDIA_SRTP_OPTIONAL; 626 pj_uint32_t rem_proto; 627 628 /* Get transport protocol and drop any RTCP-FB flag */ 629 rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); 630 PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 631 if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && 632 rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 633 { 634 return PJMEDIA_SRTP_ESDPINTRANSPORT; 635 } 636 637 /* Also check if peer signal SRTP as mandatory */ 638 if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 639 srtp->peer_use = PJMEDIA_SRTP_MANDATORY; 640 else 641 srtp->peer_use = PJMEDIA_SRTP_OPTIONAL; 642 } 622 643 623 644 /* For answerer side, this function will just have to start SRTP as … … 647 668 fill_local_crypto(srtp->pool, m_loc, loc_crypto, &loc_cryto_cnt); 648 669 } else if (srtp->setting.use == PJMEDIA_SRTP_MANDATORY) { 649 if ( pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP)) {670 if (srtp->peer_use != PJMEDIA_SRTP_MANDATORY) { 650 671 DEACTIVATE_MEDIA(pool, m_loc); 651 672 return PJMEDIA_SDP_EINPROTO;
Note: See TracChangeset
for help on using the changeset viewer.