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

Close #2126: Initial implementation of RTCP Feedback.

File:
1 edited

Legend:

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

    r5755 r5820  
    274274{ 
    275275    struct transport_srtp *srtp = (struct transport_srtp*)tp->user_data; 
     276    pj_uint32_t rem_proto = 0; 
    276277 
    277278    PJ_UNUSED_ARG(options); 
     
    281282    if (!srtp->offerer_side) { 
    282283        pjmedia_sdp_media *m = sdp_remote->media[media_index]; 
    283         if (pj_stricmp(&m->desc.transport, &ID_RTP_AVP)  != 0 && 
    284             pj_stricmp(&m->desc.transport, &ID_RTP_SAVP) != 0) 
     284 
     285        /* Get transport protocol and drop any RTCP-FB flag */ 
     286        rem_proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); 
     287        PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 
     288        if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && 
     289            rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 
    285290        { 
    286291            return PJMEDIA_SRTP_ESDPINTRANSPORT; 
     
    292297        /* As offerer: do nothing. */ 
    293298    } else { 
    294         pjmedia_sdp_media *m_rem = sdp_remote->media[media_index]; 
    295  
    296299        /* Validate remote media transport based on SRTP usage option. */ 
    297300        switch (srtp->setting.use) { 
    298301            case PJMEDIA_SRTP_DISABLED: 
    299                 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0) 
     302                if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 
    300303                    return PJMEDIA_SRTP_ESDPINTRANSPORT; 
    301304                break; 
     
    303306                break; 
    304307            case PJMEDIA_SRTP_MANDATORY: 
    305                 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0) 
     308                if (rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 
    306309                    return PJMEDIA_SRTP_ESDPINTRANSPORT; 
    307310                break; 
     
    334337    { 
    335338        pjmedia_sdp_media *m = sdp_remote? m_rem : m_loc; 
    336         if (pj_stricmp(&m->desc.transport, &ID_RTP_AVP)  != 0 && 
    337             pj_stricmp(&m->desc.transport, &ID_RTP_SAVP) != 0) 
     339        pj_uint32_t proto = 0; 
     340 
     341        /* Get transport protocol and drop any RTCP-FB flag */ 
     342        proto = pjmedia_sdp_transport_get_proto(&m->desc.transport); 
     343        PJMEDIA_TP_PROTO_TRIM_FLAG(proto, PJMEDIA_TP_PROFILE_RTCP_FB); 
     344        if (proto != PJMEDIA_TP_PROTO_RTP_AVP && 
     345            proto != PJMEDIA_TP_PROTO_RTP_SAVP) 
    338346        { 
    339347            return PJMEDIA_SRTP_ESDPINTRANSPORT; 
     
    409417    } else { 
    410418        /* Answerer side */ 
     419        pj_uint32_t rem_proto = 0; 
    411420 
    412421        pj_assert(sdp_remote && m_rem); 
     422 
     423        /* Get transport protocol and drop any RTCP-FB flag */ 
     424        rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); 
     425        PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 
    413426 
    414427        /* Generate transport */ 
     
    416429            case PJMEDIA_SRTP_DISABLED: 
    417430                /* Should never reach here */ 
    418                 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0) 
     431                if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 
    419432                    return PJMEDIA_SRTP_ESDPINTRANSPORT; 
    420433                return PJ_SUCCESS; 
     
    422435                break; 
    423436            case PJMEDIA_SRTP_MANDATORY: 
    424                 if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0) 
     437                if (rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 
    425438                    return PJMEDIA_SRTP_ESDPINTRANSPORT; 
    426439                break; 
     
    496509                     */ 
    497510                    if ((!has_crypto_attr || matched_idx == -1) && 
    498                         pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP) == 0) 
     511                        rem_proto == PJMEDIA_TP_PROTO_RTP_AVP) 
    499512                    { 
    500513                        return PJ_SUCCESS; 
     
    610623 
    611624    /* Verify media transport, it has to be RTP/AVP or RTP/SAVP */ 
    612     if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_AVP)  != 0 && 
    613         pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) != 0) 
    614625    { 
    615         return PJMEDIA_SRTP_ESDPINTRANSPORT; 
    616     } 
    617  
    618     if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP) == 0) 
    619         srtp->peer_use = PJMEDIA_SRTP_MANDATORY; 
    620     else 
    621         srtp->peer_use = PJMEDIA_SRTP_OPTIONAL; 
     626        pj_uint32_t rem_proto; 
     627 
     628        /* Get transport protocol and drop any RTCP-FB flag */ 
     629        rem_proto = pjmedia_sdp_transport_get_proto(&m_rem->desc.transport); 
     630        PJMEDIA_TP_PROTO_TRIM_FLAG(rem_proto, PJMEDIA_TP_PROFILE_RTCP_FB); 
     631        if (rem_proto != PJMEDIA_TP_PROTO_RTP_AVP && 
     632            rem_proto != PJMEDIA_TP_PROTO_RTP_SAVP) 
     633        { 
     634            return PJMEDIA_SRTP_ESDPINTRANSPORT; 
     635        } 
     636 
     637        /* Also check if peer signal SRTP as mandatory */ 
     638        if (rem_proto == PJMEDIA_TP_PROTO_RTP_SAVP) 
     639            srtp->peer_use = PJMEDIA_SRTP_MANDATORY; 
     640        else 
     641            srtp->peer_use = PJMEDIA_SRTP_OPTIONAL; 
     642    } 
    622643 
    623644    /* For answerer side, this function will just have to start SRTP as 
     
    647668        fill_local_crypto(srtp->pool, m_loc, loc_crypto, &loc_cryto_cnt); 
    648669    } else if (srtp->setting.use == PJMEDIA_SRTP_MANDATORY) { 
    649         if (pj_stricmp(&m_rem->desc.transport, &ID_RTP_SAVP)) { 
     670        if (srtp->peer_use != PJMEDIA_SRTP_MANDATORY) { 
    650671            DEACTIVATE_MEDIA(pool, m_loc); 
    651672            return PJMEDIA_SDP_EINPROTO; 
Note: See TracChangeset for help on using the changeset viewer.