Changeset 2144


Ignore:
Timestamp:
Jul 14, 2008 6:36:50 PM (16 years ago)
Author:
nanang
Message:

Ticket #569: Updated SRTP locking to not guard member transport when sending packet; added separate tx_buffer for RTCP since tx_buffer is not guarded by SRTP lock anymore

File:
1 edited

Legend:

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

    r2099 r2144  
    3434 
    3535/* Maximum size of packet */ 
    36 #define MAX_BUFFER_LEN  1500 
    37 #define MAX_KEY_LEN     32 
    38 #define DEACTIVATE_MEDIA(pool, m) pjmedia_sdp_media_deactivate(pool, m) 
     36#define MAX_RTP_BUFFER_LEN          1500 
     37#define MAX_RTCP_BUFFER_LEN         1500 
     38#define MAX_KEY_LEN                 32 
     39#define DEACTIVATE_MEDIA(pool, m)   pjmedia_sdp_media_deactivate(pool, m) 
    3940 
    4041static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
     
    7980    pj_pool_t           *pool; 
    8081    pj_lock_t           *mutex; 
    81     char                 tx_buffer[MAX_BUFFER_LEN]; 
     82    char                 rtp_tx_buffer[MAX_RTP_BUFFER_LEN]; 
     83    char                 rtcp_tx_buffer[MAX_RTCP_BUFFER_LEN]; 
    8284    pjmedia_srtp_setting setting; 
    8385    unsigned             media_option; 
     
    657659        return PJ_SUCCESS; 
    658660 
    659     if (size > sizeof(srtp->tx_buffer)) 
     661    if (size > sizeof(srtp->rtp_tx_buffer)) 
    660662        return PJ_ETOOBIG; 
    661663 
     664    pj_memcpy(srtp->rtp_tx_buffer, pkt, size); 
     665 
    662666    pj_lock_acquire(srtp->mutex); 
    663     pj_memcpy(srtp->tx_buffer, pkt, size); 
    664      
    665     err = srtp_protect(srtp->srtp_tx_ctx, srtp->tx_buffer, &len); 
     667    err = srtp_protect(srtp->srtp_tx_ctx, srtp->rtp_tx_buffer, &len); 
     668    pj_lock_release(srtp->mutex); 
     669 
    666670    if (err == err_status_ok) { 
    667         status = pjmedia_transport_send_rtp(srtp->member_tp, srtp->tx_buffer, len); 
     671        status = pjmedia_transport_send_rtp(srtp->member_tp, srtp->rtp_tx_buffer, len); 
    668672    } else { 
    669673        status = PJMEDIA_ERRNO_FROM_LIBSRTP(err); 
    670674    } 
    671675     
    672     pj_lock_release(srtp->mutex); 
    673  
    674676    return status; 
    675677} 
     
    701703        return PJ_SUCCESS; 
    702704 
    703     if (size > sizeof(srtp->tx_buffer)) 
     705    if (size > sizeof(srtp->rtcp_tx_buffer)) 
    704706        return PJ_ETOOBIG; 
    705707 
     708    pj_memcpy(srtp->rtcp_tx_buffer, pkt, size); 
     709 
    706710    pj_lock_acquire(srtp->mutex); 
    707     pj_memcpy(srtp->tx_buffer, pkt, size); 
    708  
    709     err = srtp_protect_rtcp(srtp->srtp_tx_ctx, srtp->tx_buffer, &len); 
    710      
     711    err = srtp_protect_rtcp(srtp->srtp_tx_ctx, srtp->rtcp_tx_buffer, &len); 
     712    pj_lock_release(srtp->mutex); 
     713 
    711714    if (err == err_status_ok) { 
    712715        status = pjmedia_transport_send_rtcp2(srtp->member_tp, addr, addr_len, 
    713                                               srtp->tx_buffer, len); 
     716                                              srtp->rtcp_tx_buffer, len); 
    714717    } else { 
    715718        status = PJMEDIA_ERRNO_FROM_LIBSRTP(err); 
    716719    } 
    717  
    718     pj_lock_release(srtp->mutex); 
    719720 
    720721    return status; 
Note: See TracChangeset for help on using the changeset viewer.