From 60d3d9c798c7b645cbb7d94a2a679c20d0ea06b5 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Tue, 21 Oct 2008 17:38:42 +0000 Subject: Ticket #662: Updated pjmedia transport ICE to handle missing IP address part in SDP a=rtcp attribute. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2355 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/transport_ice.c | 39 ++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c index 1e61fd39..907259dd 100644 --- a/pjmedia/src/pjmedia/transport_ice.c +++ b/pjmedia/src/pjmedia/transport_ice.c @@ -805,21 +805,32 @@ static pj_status_t verify_ice_sdp(struct transport_ice *tp_ice, return status; } - /* Verify address family matches */ - if ((tp_ice->af==pj_AF_INET() && - pj_strcmp(&rtcp_attr.addr_type, &STR_IP4)!=0) || - (tp_ice->af==pj_AF_INET6() && - pj_strcmp(&rtcp_attr.addr_type, &STR_IP6)!=0)) - { - return PJMEDIA_SDP_ETPORTNOTEQUAL; - } + if (rtcp_attr.addr.slen) { + /* Verify address family matches */ + if ((tp_ice->af==pj_AF_INET() && + pj_strcmp(&rtcp_attr.addr_type, &STR_IP4)!=0) || + (tp_ice->af==pj_AF_INET6() && + pj_strcmp(&rtcp_attr.addr_type, &STR_IP6)!=0)) + { + return PJMEDIA_SDP_ETPORTNOTEQUAL; + } - /* Assign RTCP address */ - status = pj_sockaddr_init(tp_ice->af, &rtcp_addr, - &rtcp_attr.addr, - (pj_uint16_t)rtcp_attr.port); - if (status != PJ_SUCCESS) { - return PJMEDIA_SDP_EINRTCP; + /* Assign RTCP address */ + status = pj_sockaddr_init(tp_ice->af, &rtcp_addr, + &rtcp_attr.addr, + (pj_uint16_t)rtcp_attr.port); + if (status != PJ_SUCCESS) { + return PJMEDIA_SDP_EINRTCP; + } + } else { + /* Assign RTCP address */ + status = pj_sockaddr_init(tp_ice->af, &rtcp_addr, + NULL, + (pj_uint16_t)rtcp_attr.port); + if (status != PJ_SUCCESS) { + return PJMEDIA_SDP_EINRTCP; + } + pj_sockaddr_copy_addr(&rtcp_addr, &rem_conn_addr); } sdp_state->match_comp_cnt = 2; -- cgit v1.2.3