Changeset 5852


Ignore:
Timestamp:
Aug 3, 2018 2:33:28 AM (6 years ago)
Author:
ming
Message:

Re #2096: DTLS updates

  • Fix assertion when DTLS tries to attach transport, but the ICE transport's source RTP address hasn't been updated.
  • Fix DTLS transport attachment in dtls_media_start() which misses rtcp-mux checking, causing rtcp-mux to be disabled.
Location:
pjproject/trunk/pjmedia/src/pjmedia
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/transport_ice.c

    r5850 r5852  
    8080    pj_bool_t            use_ice; 
    8181    pj_sockaddr          rtp_src_addr;  /**< Actual source RTP address.     */ 
     82    unsigned             rtp_src_cnt;   /**< How many pkt from this addr.   */ 
    8283    pj_sockaddr          rtcp_src_addr; /**< Actual source RTCP address.    */ 
    8384    unsigned             rtcp_src_cnt;  /**< How many pkt from this addr.   */ 
     
    17641765     * ICE activated or received any packets. 
    17651766     */ 
    1766     if (tp_ice->use_ice) { 
    1767         info->src_rtp_name  = tp_ice->rtp_src_addr; 
    1768     } 
    1769     if (tp_ice->use_ice || tp_ice->rtcp_src_cnt) { 
    1770         info->src_rtcp_name = tp_ice->rtcp_src_addr; 
     1767    if (tp_ice->use_ice || tp_ice->rtp_src_cnt) { 
     1768        pj_sockaddr_cp(&info->src_rtp_name, &tp_ice->rtp_src_addr); 
     1769        if (tp_ice->use_rtcp_mux) 
     1770            pj_sockaddr_cp(&info->src_rtcp_name, &tp_ice->rtp_src_addr); 
     1771    } 
     1772    if ((!tp_ice->use_rtcp_mux) && 
     1773        (tp_ice->use_ice || tp_ice->rtcp_src_cnt)) 
     1774    { 
     1775        pj_sockaddr_cp(&info->src_rtcp_name, &tp_ice->rtcp_src_addr); 
    17711776    } 
    17721777 
     
    18611866    tp_ice->rtp_src_addr = tp_ice->remote_rtp; 
    18621867    pj_bzero(&tp_ice->rtcp_src_addr, sizeof(tp_ice->rtcp_src_addr)); 
    1863     tp_ice->rtcp_src_cnt = 0; 
     1868    tp_ice->rtp_src_cnt = tp_ice->rtcp_src_cnt = 0; 
    18641869 
    18651870    return PJ_SUCCESS; 
     
    19461951        /* Destroy on progress */ 
    19471952        return; 
     1953    } 
     1954 
     1955    if (comp_id == 1) { 
     1956        ++tp_ice->rtp_src_cnt; 
     1957        pj_sockaddr_cp(&tp_ice->rtp_src_addr, src_addr); 
     1958    } else if (comp_id == 2) { 
     1959        pj_sockaddr_cp(&tp_ice->rtcp_src_addr, src_addr); 
    19481960    } 
    19491961 
  • pjproject/trunk/pjmedia/src/pjmedia/transport_srtp_dtls.c

    r5847 r5852  
    13301330    dtls_srtp *ds = (dtls_srtp *)tp; 
    13311331    pj_ice_strans_state ice_state; 
     1332    pj_bool_t use_rtcp_mux = PJ_FALSE; 
    13321333    pj_status_t status = PJ_SUCCESS; 
    13331334 
     
    13691370    } 
    13701371 
    1371     /* Check and update ICE status */ 
     1372    /* Check and update ICE and rtcp-mux status */ 
    13721373    { 
    13731374        pjmedia_transport_info info; 
     
    13761377        pjmedia_transport_info_init(&info); 
    13771378        pjmedia_transport_get_info(ds->srtp->member_tp, &info); 
     1379        if (pj_sockaddr_cmp(&info.sock_info.rtp_addr_name, 
     1380                            &info.sock_info.rtcp_addr_name) == 0) 
     1381        { 
     1382            use_rtcp_mux = PJ_TRUE; 
     1383        } 
    13781384        ice_info = (pjmedia_ice_transport_info*) 
    13791385                   pjmedia_transport_info_get_spc_info( 
     
    14351441                pj_sockaddr_init(pj_AF_INET(), &ap.rem_addr, 0, 0); 
    14361442 
    1437             if (pj_sockaddr_has_addr(&ds->rem_rtcp)) 
     1443            if (use_rtcp_mux) { 
     1444                /* Using RTP & RTCP multiplexing */ 
     1445                pj_sockaddr_cp(&ap.rem_rtcp, &ds->rem_addr); 
     1446            } else if (pj_sockaddr_has_addr(&ds->rem_rtcp)) { 
    14381447                pj_sockaddr_cp(&ap.rem_rtcp, &ds->rem_rtcp); 
    1439             else 
     1448            } else if (pj_sockaddr_has_addr(&ds->rem_addr)) { 
     1449                pj_sockaddr_cp(&ap.rem_rtcp, &ds->rem_addr); 
     1450                pj_sockaddr_set_port(&ap.rem_rtcp, 
     1451                                     pj_sockaddr_get_port(&ap.rem_rtcp) + 1); 
     1452            } else { 
    14401453                pj_sockaddr_init(pj_AF_INET(), &ap.rem_rtcp, 0, 0); 
     1454            } 
    14411455 
    14421456            ap.addr_len = pj_sockaddr_get_len(&ap.rem_addr); 
Note: See TracChangeset for help on using the changeset viewer.