summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/transport_ice.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia/transport_ice.c')
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c39
1 files 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;