Ignore:
Timestamp:
Jun 29, 2006 2:45:17 PM (18 years ago)
Author:
bennylp
Message:

Improvements in PJMEDIA to support RFC 3605 (RTCP attribute in SDP) and other changes to improve RTCP communication behind NAT. Also fixed bug related to RTCP reporting changes in revision 565

File:
1 edited

Legend:

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

    r452 r568  
    7979    pj_status_t status; 
    8080 
    81  
    8281     
    8382    /* Validate arguments: */ 
     
    156155 
    157156    /* Set remote address: */ 
    158  
    159     si->rem_addr.sin_family = PJ_AF_INET; 
    160     si->rem_addr.sin_port = pj_htons(rem_m->desc.port); 
    161     if (pj_inet_aton(&rem_conn->addr, &si->rem_addr.sin_addr) == 0) { 
    162  
     157    status = pj_sockaddr_in_init(&si->rem_addr, &rem_conn->addr,  
     158                                 rem_m->desc.port); 
     159    if (status != PJ_SUCCESS) { 
    163160        /* Invalid IP address. */ 
    164161        return PJMEDIA_EINVALIDIP; 
    165162    } 
     163 
     164    /* If "rtcp" attribute is present in the SDP, set the RTCP address 
     165     * from that attribute. Otherwise, calculate from RTP address. 
     166     */ 
     167    attr = pjmedia_sdp_attr_find2(rem_m->attr_count, rem_m->attr, 
     168                                  "rtcp", NULL); 
     169    if (attr) { 
     170        pjmedia_sdp_rtcp_attr rtcp; 
     171        status = pjmedia_sdp_attr_get_rtcp(attr, &rtcp); 
     172        if (status == PJ_SUCCESS) { 
     173            if (rtcp.addr.slen) { 
     174                status = pj_sockaddr_in_init(&si->rem_rtcp, &rtcp.addr, 
     175                                             (pj_uint16_t)rtcp.port); 
     176            } else { 
     177                pj_sockaddr_in_init(&si->rem_rtcp, NULL,  
     178                                    (pj_uint16_t)rtcp.port); 
     179                si->rem_rtcp.sin_addr.s_addr = si->rem_addr.sin_addr.s_addr; 
     180            } 
     181        } 
     182    } 
     183     
     184    if (si->rem_rtcp.sin_addr.s_addr == 0) { 
     185        int rtcp_port; 
     186 
     187        pj_memcpy(&si->rem_rtcp, &si->rem_addr, sizeof(pj_sockaddr_in)); 
     188        rtcp_port = pj_ntohs(si->rem_addr.sin_port) + 1; 
     189        si->rem_rtcp.sin_port = pj_htons((pj_uint16_t)rtcp_port); 
     190    } 
     191 
    166192 
    167193    /* And codec must be numeric! */ 
Note: See TracChangeset for help on using the changeset viewer.