Ignore:
Timestamp:
Feb 21, 2008 10:08:27 AM (12 years ago)
Author:
bennylp
Message:

Ticket #467: fixed issues with RTP/AVP vs RTP/SAVP negotiation

File:
1 edited

Legend:

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

    r1763 r1810  
    3636#define MAX_BUFFER_LEN  1500 
    3737#define MAX_KEY_LEN     32 
    38 #define DEACTIVATE_MEDIA(pool, m) {\ 
    39             attr = pjmedia_sdp_attr_create(pool, ID_INACTIVE.ptr, NULL); \ 
    40             m->attr[m->attr_count++] = attr; \ 
    41             m->desc.port = 0; \ 
    42         } 
     38#define DEACTIVATE_MEDIA(pool, m) pjmedia_sdp_media_deactivate(pool, m) 
    4339 
    4440static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
     
    8480    pj_lock_t           *mutex; 
    8581    char                 tx_buffer[MAX_BUFFER_LEN]; 
    86  
    8782    pjmedia_srtp_setting setting; 
     83    unsigned             media_option; 
     84 
    8885    /* SRTP policy */ 
    8986    pj_bool_t            session_inited; 
     
    151148static pj_status_t transport_media_create(pjmedia_transport *tp, 
    152149                                       pj_pool_t *pool, 
     150                                       unsigned options, 
    153151                                       pjmedia_sdp_session *sdp_local, 
    154152                                       const pjmedia_sdp_session *sdp_remote, 
     
    925923static pj_status_t transport_media_create(pjmedia_transport *tp, 
    926924                                          pj_pool_t *pool, 
     925                                          unsigned options, 
    927926                                          pjmedia_sdp_session *sdp_local, 
    928927                                          const pjmedia_sdp_session *sdp_remote, 
     
    938937    pj_str_t attr_value; 
    939938    int i, j; 
     939    unsigned member_tp_option; 
    940940 
    941941    PJ_ASSERT_RETURN(tp && pool && sdp_local, PJ_EINVAL); 
     942     
     943    srtp->media_option = options; 
     944    member_tp_option = options | PJMEDIA_TPMED_NO_TRANSPORT_CHECKING; 
    942945 
    943946    pj_bzero(&srtp->rx_policy, sizeof(srtp->tx_policy)); 
     
    11311134BYPASS_SRTP: 
    11321135    srtp->bypass_srtp = PJ_TRUE; 
     1136    member_tp_option &= ~PJMEDIA_TPMED_NO_TRANSPORT_CHECKING; 
    11331137 
    11341138PROPAGATE_MEDIA_CREATE: 
    1135     return pjmedia_transport_media_create(srtp->real_tp, pool, sdp_local,  
    1136                                            sdp_remote, media_index); 
     1139    return pjmedia_transport_media_create(srtp->real_tp, pool,  
     1140                            member_tp_option, 
     1141                            sdp_local, sdp_remote, media_index); 
    11371142} 
    11381143 
     
    11481153    pjmedia_sdp_media *m_rem, *m_loc; 
    11491154    pj_status_t status; 
    1150     pjmedia_sdp_attr *attr; 
    11511155    int i; 
    11521156 
     
    11721176            goto BYPASS_SRTP; 
    11731177        } else if (srtp->setting.use == PJMEDIA_SRTP_OPTIONAL) { 
    1174             if (pj_stricmp(&m_rem->desc.transport, &m_loc->desc.transport)) { 
    1175                 DEACTIVATE_MEDIA(pool, m_loc); 
    1176                 return PJMEDIA_SDP_EINPROTO; 
    1177             } 
     1178            // Regardless the answer's transport type (RTP/AVP or RTP/SAVP), 
     1179            // the answer must be processed through in optional mode. 
     1180            // Please note that at this point transport type is ensured to be  
     1181            // RTP/AVP or RTP/SAVP, see transport_media_create() 
     1182            //if (pj_stricmp(&m_rem->desc.transport, &m_loc->desc.transport)) { 
     1183                //DEACTIVATE_MEDIA(pool, m_loc); 
     1184                //return PJMEDIA_SDP_EINPROTO; 
     1185            //} 
    11781186        } else if (srtp->setting.use == PJMEDIA_SRTP_MANDATORY) { 
    11791187            if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP)) { 
Note: See TracChangeset for help on using the changeset viewer.