Ignore:
Timestamp:
Jul 12, 2018 8:22:31 AM (13 months ago)
Author:
nanang
Message:

Close #2126: Initial implementation of RTCP Feedback.

File:
1 edited

Legend:

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

    r5753 r5820  
    16421642                                               const pj_str_t *t2) 
    16431643{ 
    1644     static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
    1645     static const pj_str_t ID_RTP_SAVP = { "RTP/SAVP", 8 }; 
     1644    pj_uint32_t t1_proto, t2_proto; 
    16461645 
    16471646    /* Exactly equal? */ 
     
    16491648        return PJ_SUCCESS; 
    16501649 
     1650    /* Check if boths are RTP/AVP based */ 
     1651    t1_proto = pjmedia_sdp_transport_get_proto(t1); 
     1652    t2_proto = pjmedia_sdp_transport_get_proto(t2); 
     1653    if (PJMEDIA_TP_PROTO_HAS_FLAG(t1_proto, PJMEDIA_TP_PROTO_RTP_AVP) &&  
     1654        PJMEDIA_TP_PROTO_HAS_FLAG(t2_proto, PJMEDIA_TP_PROTO_RTP_AVP)) 
     1655    { 
     1656        return PJ_SUCCESS; 
     1657    } 
     1658 
    16511659    /* Compatible? */ 
    1652     if ((!pj_stricmp(t1, &ID_RTP_AVP) || !pj_stricmp(t1, &ID_RTP_SAVP)) && 
    1653         (!pj_stricmp(t2, &ID_RTP_AVP) || !pj_stricmp(t2, &ID_RTP_SAVP))) 
    1654         return PJ_SUCCESS; 
     1660    //{ 
     1661    //  static const pj_str_t ID_RTP_AVP  = { "RTP/AVP", 7 }; 
     1662    //  static const pj_str_t ID_RTP_SAVP = { "RTP/SAVP", 8 }; 
     1663    //  if ((!pj_stricmp(t1, &ID_RTP_AVP) || !pj_stricmp(t1, &ID_RTP_SAVP)) && 
     1664    //      (!pj_stricmp(t2, &ID_RTP_AVP) || !pj_stricmp(t2, &ID_RTP_SAVP))) 
     1665    //      return PJ_SUCCESS; 
     1666    //} 
    16551667 
    16561668    return PJMEDIA_SDP_ETPORTNOTEQUAL; 
     1669} 
     1670 
     1671 
     1672/* 
     1673 * Get media transport info, e.g: protocol and profile. 
     1674 */ 
     1675PJ_DEF(pj_uint32_t) pjmedia_sdp_transport_get_proto(const pj_str_t *tp) 
     1676{ 
     1677    pj_str_t token, rest = {0}; 
     1678    pj_ssize_t idx; 
     1679 
     1680    PJ_ASSERT_RETURN(tp, PJMEDIA_TP_PROTO_NONE); 
     1681 
     1682    idx = pj_strtok2(tp, "/", &token, 0); 
     1683    if (idx != tp->slen) 
     1684        pj_strset(&rest, tp->ptr + token.slen + 1, tp->slen - token.slen - 1); 
     1685 
     1686    if (pj_stricmp2(&token, "RTP") == 0) { 
     1687        /* Starts with "RTP" */ 
     1688 
     1689        /* RTP/AVP */ 
     1690        if (pj_stricmp2(&rest, "AVP") == 0) 
     1691            return PJMEDIA_TP_PROTO_RTP_AVP; 
     1692 
     1693        /* RTP/SAVP */ 
     1694        if (pj_stricmp2(&rest, "SAVP") == 0) 
     1695            return PJMEDIA_TP_PROTO_RTP_SAVP; 
     1696 
     1697        /* RTP/AVPF */ 
     1698        if (pj_stricmp2(&rest, "AVPF") == 0) 
     1699            return PJMEDIA_TP_PROTO_RTP_AVPF; 
     1700 
     1701        /* RTP/SAVPF */ 
     1702        if (pj_stricmp2(&rest, "SAVPF") == 0) 
     1703            return PJMEDIA_TP_PROTO_RTP_SAVPF; 
     1704 
     1705    } else if (pj_stricmp2(&token, "UDP") == 0) { 
     1706        /* Starts with "UDP" */ 
     1707 
     1708        /* Plain UDP */ 
     1709        if (rest.slen == 0) 
     1710            return PJMEDIA_TP_PROTO_UDP; 
     1711 
     1712        /* DTLS-SRTP */ 
     1713        if (pj_stricmp2(&rest, "TLS/RTP/SAVP") == 0) 
     1714            return PJMEDIA_TP_PROTO_DTLS_SRTP; 
     1715 
     1716        /* DTLS-SRTP with RTCP-FB */ 
     1717        if (pj_stricmp2(&rest, "TLS/RTP/SAVPF") == 0) 
     1718            return PJMEDIA_TP_PROTO_DTLS_SRTPF; 
     1719    } 
     1720 
     1721    /* Unknown transport */ 
     1722    return PJMEDIA_TP_PROTO_UNKNOWN; 
    16571723} 
    16581724 
Note: See TracChangeset for help on using the changeset viewer.