Changeset 5750


Ignore:
Timestamp:
Mar 6, 2018 7:42:54 AM (7 years ago)
Author:
nanang
Message:

Re #2096:

  • Fixed crash in media transport when application calls detach() while the transport only implements detach2().
  • Avoid assertion in UDP media transport when calling detach() without previously calling attach().
Location:
pjproject/trunk/pjmedia
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/transport.h

    r5478 r5750  
    683683 */ 
    684684PJ_INLINE(pj_status_t) pjmedia_transport_attach2(pjmedia_transport *tp, 
    685                                       pjmedia_transport_attach_param *att_param) 
     685                                  pjmedia_transport_attach_param *att_param) 
    686686{ 
    687687    if (tp->op->attach2) { 
    688         return tp->op->attach2(tp, att_param); 
     688        return (*tp->op->attach2)(tp, att_param); 
    689689    } else { 
    690         return tp->op->attach(tp, att_param->user_data,  
    691                               (pj_sockaddr_t*)&att_param->rem_addr,  
    692                               (pj_sockaddr_t*)&att_param->rem_rtcp,  
    693                               att_param->addr_len, att_param->rtp_cb,  
    694                               att_param->rtcp_cb); 
     690        return (*tp->op->attach)(tp, att_param->user_data,  
     691                                (pj_sockaddr_t*)&att_param->rem_addr,  
     692                                (pj_sockaddr_t*)&att_param->rem_rtcp,  
     693                                att_param->addr_len, att_param->rtp_cb,  
     694                                att_param->rtcp_cb); 
    695695    } 
    696696} 
     
    730730                                                                pj_ssize_t)) 
    731731{ 
    732     return tp->op->attach(tp, user_data, rem_addr, rem_rtcp, addr_len,  
    733                           rtp_cb, rtcp_cb); 
     732    if (tp->op->attach2) { 
     733        pjmedia_transport_attach_param param; 
     734 
     735        pj_bzero(&param, sizeof(param)); 
     736        param.user_data = user_data; 
     737        pj_sockaddr_cp(&param.rem_addr, rem_addr); 
     738        pj_sockaddr_cp(&param.rem_rtcp, rem_rtcp); 
     739        param.addr_len = addr_len; 
     740        param.rtp_cb = rtp_cb; 
     741        param.rtcp_cb = rtcp_cb; 
     742 
     743        return (*tp->op->attach2)(tp, &param); 
     744    } else { 
     745        return (*tp->op->attach)(tp, user_data, rem_addr, rem_rtcp, addr_len, 
     746                                 rtp_cb, rtcp_cb); 
     747    } 
    734748} 
    735749 
     
    750764                                         void *user_data) 
    751765{ 
    752     tp->op->detach(tp, user_data); 
     766    (*tp->op->detach)(tp, user_data); 
    753767} 
    754768 
  • pjproject/trunk/pjmedia/src/pjmedia/transport_srtp_dtls.c

    r5746 r5750  
    957957 
    958958            pj_bzero(&ap, sizeof(ap)); 
     959            ap.user_data = ds->srtp; 
    959960            pj_sockaddr_cp(&ds->rem_addr, &info.src_rtp_name); 
    960961            pj_sockaddr_cp(&ap.rem_addr, &ds->rem_addr); 
     
    11431144        pjmedia_transport_attach_param ap; 
    11441145        pj_bzero(&ap, sizeof(ap)); 
     1146        ap.user_data = ds->srtp; 
    11451147 
    11461148        if (sdp_remote) 
     
    12941296            pjmedia_transport_attach_param ap; 
    12951297            pj_bzero(&ap, sizeof(ap)); 
     1298            ap.user_data = ds->srtp; 
    12961299 
    12971300            /* Attach ourselves to member transport for DTLS nego. */ 
     
    14211424    /* Attach member transport, so we can send/receive DTLS init packets */ 
    14221425    pj_bzero(&ap, sizeof(ap)); 
     1426    ap.user_data = ds->srtp; 
    14231427    pj_sockaddr_cp(&ap.rem_addr, &ds->rem_addr); 
    14241428    pj_sockaddr_cp(&ap.rem_rtcp, &ds->rem_rtcp); 
  • pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c

    r5747 r5750  
    839839 
    840840        /* As additional checking, check if the same user data is specified */ 
    841         pj_assert(user_data == udp->user_data); 
     841        pj_assert(!udp->user_data || user_data == udp->user_data); 
    842842 
    843843        /* First, mark transport as unattached */ 
Note: See TracChangeset for help on using the changeset viewer.