summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2008-10-21 17:38:42 +0000
committerNanang Izzuddin <nanang@teluu.com>2008-10-21 17:38:42 +0000
commit60d3d9c798c7b645cbb7d94a2a679c20d0ea06b5 (patch)
tree541d8882f06382754bf67ea271462f54bbe27ede /pjmedia
parente95c38b410546ffd8e6139d961aa1ccaab38ac1e (diff)
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
Diffstat (limited to 'pjmedia')
-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;