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

    r1794 r1810  
    3636#define MAX_PENDING 4 
    3737 
     38static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
     39 
    3840/* Pending write buffer */ 
    3941typedef struct pending_write 
     
    5052    pj_pool_t          *pool;           /**< Memory pool                    */ 
    5153    unsigned            options;        /**< Transport options.             */ 
     54    unsigned            media_options;  /**< Transport media options.       */ 
    5255    void               *user_data;      /**< Only valid when attached       */ 
    5356    pj_bool_t           attached;       /**< Has attachment?                */ 
     
    121124static pj_status_t transport_media_create(pjmedia_transport *tp, 
    122125                                       pj_pool_t *pool, 
     126                                       unsigned options, 
    123127                                       pjmedia_sdp_session *sdp_local, 
    124128                                       const pjmedia_sdp_session *sdp_remote, 
     
    765769static pj_status_t transport_media_create(pjmedia_transport *tp, 
    766770                                  pj_pool_t *pool, 
     771                                  unsigned options, 
    767772                                  pjmedia_sdp_session *sdp_local, 
    768773                                  const pjmedia_sdp_session *sdp_remote, 
    769774                                  unsigned media_index) 
    770775{ 
    771     PJ_UNUSED_ARG(tp); 
    772     PJ_UNUSED_ARG(pool); 
    773     PJ_UNUSED_ARG(sdp_local); 
    774     PJ_UNUSED_ARG(sdp_remote); 
    775     PJ_UNUSED_ARG(media_index); 
     776    struct transport_udp *udp = (struct transport_udp*)tp; 
     777 
     778    PJ_ASSERT_RETURN(tp && pool && sdp_local, PJ_EINVAL); 
     779    udp->media_options = options; 
     780 
     781    /* Validate media transport */ 
     782    /* By now, this transport only support RTP/AVP transport */ 
     783    if ((udp->media_options & PJMEDIA_TPMED_NO_TRANSPORT_CHECKING) == 0) { 
     784        pjmedia_sdp_media *m_rem, *m_loc; 
     785 
     786        m_rem = sdp_remote? sdp_remote->media[media_index] : NULL; 
     787        m_loc = sdp_local->media[media_index]; 
     788 
     789        if (pj_stricmp(&m_loc->desc.transport, &ID_RTP_AVP) || 
     790           (m_rem && pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP))) 
     791        { 
     792            pjmedia_sdp_media_deactivate(pool, m_loc); 
     793            return PJMEDIA_SDP_EINPROTO; 
     794        } 
     795    } 
    776796 
    777797    return PJ_SUCCESS; 
     
    784804                                  unsigned media_index) 
    785805{ 
    786     PJ_UNUSED_ARG(tp); 
    787     PJ_UNUSED_ARG(pool); 
    788     PJ_UNUSED_ARG(sdp_local); 
    789     PJ_UNUSED_ARG(sdp_remote); 
    790     PJ_UNUSED_ARG(media_index); 
     806    struct transport_udp *udp = (struct transport_udp*)tp; 
     807 
     808    PJ_ASSERT_RETURN(tp && pool && sdp_local, PJ_EINVAL); 
     809 
     810    /* Validate media transport */ 
     811    /* By now, this transport only support RTP/AVP transport */ 
     812    if ((udp->media_options & PJMEDIA_TPMED_NO_TRANSPORT_CHECKING) == 0) { 
     813        pjmedia_sdp_media *m_rem, *m_loc; 
     814 
     815        m_rem = sdp_remote->media[media_index]; 
     816        m_loc = sdp_local->media[media_index]; 
     817 
     818        if (pj_stricmp(&m_loc->desc.transport, &ID_RTP_AVP) || 
     819            pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP)) 
     820        { 
     821            pjmedia_sdp_media_deactivate(pool, m_loc); 
     822            return PJMEDIA_SDP_EINPROTO; 
     823        } 
     824    } 
    791825 
    792826    return PJ_SUCCESS; 
Note: See TracChangeset for help on using the changeset viewer.