Ignore:
Timestamp:
Feb 21, 2008 10:08:27 AM (16 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_ice.c

    r1790 r1810  
    2525#define THIS_FILE   "transport_ice.c" 
    2626 
     27static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
     28 
    2729struct transport_ice 
    2830{ 
     
    3032    pj_ice_strans       *ice_st; 
    3133    pjmedia_ice_cb       cb; 
     34    unsigned             media_option; 
    3235 
    3336    pj_time_val          start_ice; 
     
    7578static pj_status_t transport_media_create(pjmedia_transport *tp, 
    7679                                       pj_pool_t *pool, 
     80                                       unsigned options, 
    7781                                       pjmedia_sdp_session *sdp_local, 
    7882                                       const pjmedia_sdp_session *sdp_remote, 
     
    259263static pj_status_t transport_media_create(pjmedia_transport *tp, 
    260264                                       pj_pool_t *pool, 
     265                                       unsigned options, 
    261266                                       pjmedia_sdp_session *sdp_local, 
    262267                                       const pjmedia_sdp_session *sdp_remote, 
     
    270275    unsigned i, cand_cnt; 
    271276    pj_status_t status; 
     277 
     278    tp_ice->media_option = options; 
     279 
     280    /* Validate media transport */ 
     281    /* By now, this transport only support RTP/AVP transport */ 
     282    if ((tp_ice->media_option & PJMEDIA_TPMED_NO_TRANSPORT_CHECKING) == 0) { 
     283        pjmedia_sdp_media *m_rem, *m_loc; 
     284 
     285        m_rem = sdp_remote? sdp_remote->media[media_index] : NULL; 
     286        m_loc = sdp_local->media[media_index]; 
     287 
     288        if (pj_stricmp(&m_loc->desc.transport, &ID_RTP_AVP) || 
     289           (m_rem && pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP))) 
     290        { 
     291            pjmedia_sdp_media_deactivate(pool, m_loc); 
     292            return PJMEDIA_SDP_EINPROTO; 
     293        } 
     294    } 
    272295 
    273296    /* Init ICE */ 
     
    500523    pj_status_t status; 
    501524 
    502     PJ_UNUSED_ARG(sdp_local); 
    503  
    504525    PJ_ASSERT_RETURN(tp && pool && sdp_remote, PJ_EINVAL); 
    505526    PJ_ASSERT_RETURN(media_index < sdp_remote->media_count, PJ_EINVAL); 
    506527 
    507528    sdp_med = sdp_remote->media[media_index]; 
     529 
     530    /* Validate media transport */ 
     531    /* By now, this transport only support RTP/AVP transport */ 
     532    if ((tp_ice->media_option & PJMEDIA_TPMED_NO_TRANSPORT_CHECKING) == 0) { 
     533        pjmedia_sdp_media *m_rem, *m_loc; 
     534 
     535        m_rem = sdp_remote->media[media_index]; 
     536        m_loc = sdp_local->media[media_index]; 
     537 
     538        if (pj_stricmp(&m_loc->desc.transport, &ID_RTP_AVP) || 
     539           (pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP))) 
     540        { 
     541            pjmedia_sdp_media_deactivate(pool, m_loc); 
     542            return PJMEDIA_SDP_EINPROTO; 
     543        } 
     544    } 
    508545 
    509546    /* Get the SDP connection for the media stream. 
Note: See TracChangeset for help on using the changeset viewer.