Changeset 5746 for pjproject/trunk/pjmedia/src/pjmedia/transport_srtp.c
- Timestamp:
- Feb 26, 2018 7:50:18 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/transport_srtp.c
r5725 r5746 120 120 #endif 121 121 122 /* Maximum number of SRTP keying method */ 123 #define MAX_KEYING 2 124 122 125 static const pj_str_t ID_RTP_AVP = { "RTP/AVP", 7 }; 123 126 static const pj_str_t ID_RTP_SAVP = { "RTP/SAVP", 8 }; … … 284 287 * method, any other keying methods will be stopped and destroyed. 285 288 */ 289 unsigned all_keying_cnt; 290 pjmedia_transport *all_keying[MAX_KEYING]; 291 292 /* Current active SRTP keying methods. */ 286 293 unsigned keying_cnt; 287 pjmedia_transport *keying[ 2];294 pjmedia_transport *keying[MAX_KEYING]; 288 295 289 296 /* If not zero, keying nego is ongoing (async-ly, e.g: by DTLS-SRTP). … … 718 725 719 726 /* Initialize SRTP keying method. */ 720 for (i = 0; i < srtp->setting.keying_count ; ++i) {727 for (i = 0; i < srtp->setting.keying_count && i < MAX_KEYING; ++i) { 721 728 switch(srtp->setting.keying[i]) { 722 729 723 730 case PJMEDIA_SRTP_KEYING_SDES: 724 731 #if defined(PJMEDIA_SRTP_HAS_SDES) && (PJMEDIA_SRTP_HAS_SDES != 0) 725 sdes_create(srtp, &srtp-> keying[srtp->keying_cnt++]);732 sdes_create(srtp, &srtp->all_keying[srtp->all_keying_cnt++]); 726 733 #endif 727 734 break; … … 729 736 case PJMEDIA_SRTP_KEYING_DTLS_SRTP: 730 737 #if defined(PJMEDIA_SRTP_HAS_DTLS) && (PJMEDIA_SRTP_HAS_DTLS != 0) 731 dtls_create(srtp, &srtp-> keying[srtp->keying_cnt++]);738 dtls_create(srtp, &srtp->all_keying[srtp->all_keying_cnt++]); 732 739 #endif 733 740 break; … … 1039 1046 sizeof(srtp_info)); 1040 1047 1041 /* Invoke get_info() of all keying methods*/1048 /* Invoke get_info() from any active keying method */ 1042 1049 for (i=0; i < srtp->keying_cnt; i++) 1043 1050 pjmedia_transport_get_info(srtp->keying[i], info); … … 1372 1379 struct transport_srtp *srtp = (struct transport_srtp*) tp; 1373 1380 unsigned member_tp_option; 1374 pj_status_t last_err_st = PJ_EBUG;1381 pj_status_t keying_status = PJ_SUCCESS; 1375 1382 pj_status_t status; 1376 1383 unsigned i; … … 1384 1391 srtp->offerer_side = (sdp_remote == NULL); 1385 1392 1386 if (srtp->offerer_side && srtp->setting.use == PJMEDIA_SRTP_DISABLED) 1393 if (srtp->offerer_side && srtp->setting.use == PJMEDIA_SRTP_DISABLED) { 1387 1394 srtp->bypass_srtp = PJ_TRUE; 1388 else 1395 srtp->keying_cnt = 0; 1396 } else { 1397 srtp->bypass_srtp = PJ_FALSE; 1398 srtp->keying_cnt = srtp->all_keying_cnt; 1399 for (i = 0; i < srtp->all_keying_cnt; ++i) 1400 srtp->keying[i] = srtp->all_keying[i]; 1401 1389 1402 member_tp_option |= PJMEDIA_TPMED_NO_TRANSPORT_CHECKING; 1403 } 1390 1404 1391 1405 status = pjmedia_transport_media_create(srtp->member_tp, sdp_pool, 1392 1406 member_tp_option, sdp_remote, 1393 1407 media_index); 1394 if (status != PJ_SUCCESS || srtp->bypass_srtp)1408 if (status != PJ_SUCCESS) 1395 1409 return status; 1396 1410 … … 1406 1420 srtp->keying_cnt, i); 1407 1421 srtp->keying_cnt--; 1408 last_err_st= st;1422 keying_status = st; 1409 1423 continue; 1410 1424 } else if (srtp->offerer_side) { … … 1420 1434 /* All keying method failed to process remote SDP? */ 1421 1435 if (srtp->keying_cnt == 0) 1422 return last_err_st;1436 return keying_status; 1423 1437 1424 1438 return PJ_SUCCESS; … … 1432 1446 { 1433 1447 struct transport_srtp *srtp = (struct transport_srtp*) tp; 1434 pj_status_t last_err_st = PJ_EBUG;1448 pj_status_t keying_status = PJ_SUCCESS; 1435 1449 pj_status_t status; 1436 1450 unsigned i; … … 1445 1459 status = pjmedia_transport_encode_sdp(srtp->member_tp, sdp_pool, 1446 1460 sdp_local, sdp_remote, media_index); 1447 if (status != PJ_SUCCESS || srtp->bypass_srtp)1461 if (status != PJ_SUCCESS) 1448 1462 return status; 1449 1463 … … 1459 1473 srtp->keying_cnt, i); 1460 1474 srtp->keying_cnt--; 1461 last_err_st= st;1475 keying_status = st; 1462 1476 continue; 1463 1477 } … … 1483 1497 /* All keying method failed to process remote SDP? */ 1484 1498 if (srtp->keying_cnt == 0) 1485 return last_err_st;1499 return keying_status; 1486 1500 1487 1501 return PJ_SUCCESS; … … 1496 1510 { 1497 1511 struct transport_srtp *srtp = (struct transport_srtp*) tp; 1498 pj_status_t last_err_st = PJ_EBUG;1512 pj_status_t keying_status = PJ_SUCCESS; 1499 1513 pj_status_t status; 1500 1514 unsigned i; … … 1505 1519 sdp_local, sdp_remote, 1506 1520 media_index); 1507 if (status != PJ_SUCCESS || srtp->bypass_srtp)1521 if (status != PJ_SUCCESS) 1508 1522 return status; 1509 1523 … … 1518 1532 srtp->keying_cnt, i); 1519 1533 srtp->keying_cnt--; 1520 last_err_st= status;1534 keying_status = status; 1521 1535 continue; 1522 1536 } … … 1542 1556 /* All keying method failed to process remote SDP? */ 1543 1557 if (srtp->keying_cnt == 0) 1544 return last_err_st;1558 return keying_status; 1545 1559 1546 1560 /* If SRTP key is being negotiated, just return now. … … 1624 1638 1625 1639 #endif 1626 1627
Note: See TracChangeset
for help on using the changeset viewer.