Changeset 1615 for pjproject/trunk/pjmedia/src/pjmedia/session.c
- Timestamp:
- Dec 3, 2007 2:38:25 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/session.c
r1448 r1615 53 53 static const pj_str_t ID_IN = { "IN", 2 }; 54 54 static const pj_str_t ID_IP4 = { "IP4", 3}; 55 static const pj_str_t ID_RTP_AVP = { "RTP/AVP", 7 }; 56 static const pj_str_t ID_SDP_NAME = { "pjmedia", 7 }; 55 static const pj_str_t ID_IP6 = { "IP6", 3}; 56 /*static const pj_str_t ID_RTP_AVP = { "RTP/AVP", 7 };*/ 57 /*static const pj_str_t ID_SDP_NAME = { "pjmedia", 7 };*/ 57 58 static const pj_str_t ID_RTPMAP = { "rtpmap", 6 }; 58 59 static const pj_str_t ID_TELEPHONE_EVENT = { "telephone-event", 15 }; … … 130 131 const pjmedia_sdp_conn *local_conn; 131 132 const pjmedia_sdp_conn *rem_conn; 133 int rem_af, local_af; 134 pj_sockaddr local_addr; 132 135 pjmedia_sdp_rtpmap *rtpmap; 133 136 int local_fmtp_mode = 0, rem_fmtp_mode = 0; … … 186 189 } 187 190 191 /* Check address family in remote SDP */ 192 rem_af = pj_AF_UNSPEC(); 193 if (pj_stricmp(&rem_conn->net_type, &ID_IN)==0) { 194 if (pj_stricmp(&rem_conn->addr_type, &ID_IP4)==0) { 195 rem_af = pj_AF_INET(); 196 } else if (pj_stricmp(&rem_conn->addr_type, &ID_IP6)==0) { 197 rem_af = pj_AF_UNSPEC(); 198 } 199 } 200 201 if (rem_af==pj_AF_UNSPEC()) { 202 /* Unsupported address family */ 203 return PJ_EAFNOTSUP; 204 } 205 206 /* Set remote address: */ 207 status = pj_sockaddr_init(rem_af, &si->rem_addr, &rem_conn->addr, 208 rem_m->desc.port); 209 if (status != PJ_SUCCESS) { 210 /* Invalid IP address. */ 211 return PJMEDIA_EINVALIDIP; 212 } 213 214 /* Check address family of local info */ 215 local_af = pj_AF_UNSPEC(); 216 if (pj_stricmp(&local_conn->net_type, &ID_IN)==0) { 217 if (pj_stricmp(&local_conn->addr_type, &ID_IP4)==0) { 218 local_af = pj_AF_INET(); 219 } else if (pj_stricmp(&local_conn->addr_type, &ID_IP6)==0) { 220 local_af = pj_AF_UNSPEC(); 221 } 222 } 223 224 if (local_af==pj_AF_UNSPEC()) { 225 /* Unsupported address family */ 226 return PJ_EAFNOTSUP; 227 } 228 229 /* Set remote address: */ 230 status = pj_sockaddr_init(local_af, &local_addr, &local_conn->addr, 231 local_m->desc.port); 232 if (status != PJ_SUCCESS) { 233 /* Invalid IP address. */ 234 return PJMEDIA_EINVALIDIP; 235 } 236 237 /* Local and remote address family must match */ 238 if (local_af != rem_af) 239 return PJ_EAFNOTSUP; 240 188 241 /* Media direction: */ 189 242 190 243 if (local_m->desc.port == 0 || 191 pj_ inet_addr(&local_conn->addr).s_addr==0||192 pj_ inet_addr(&rem_conn->addr).s_addr==0||244 pj_sockaddr_has_addr(&local_addr)==PJ_FALSE || 245 pj_sockaddr_has_addr(&si->rem_addr)==PJ_FALSE || 193 246 pjmedia_sdp_media_find_attr(local_m, &STR_INACTIVE, NULL)!=NULL) 194 247 { … … 215 268 si->dir = PJMEDIA_DIR_ENCODING_DECODING; 216 269 217 }218 219 220 /* Set remote address: */221 status = pj_sockaddr_in_init(&si->rem_addr, &rem_conn->addr,222 rem_m->desc.port);223 if (status != PJ_SUCCESS) {224 /* Invalid IP address. */225 return PJMEDIA_EINVALIDIP;226 270 } 227 271 … … 236 280 if (status == PJ_SUCCESS) { 237 281 if (rtcp.addr.slen) { 238 status = pj_sockaddr_in _init(&si->rem_rtcp, &rtcp.addr,239 282 status = pj_sockaddr_init(rem_af, &si->rem_rtcp, &rtcp.addr, 283 (pj_uint16_t)rtcp.port); 240 284 } else { 241 pj_sockaddr_in_init(&si->rem_rtcp, NULL, 242 (pj_uint16_t)rtcp.port); 243 si->rem_rtcp.sin_addr.s_addr = si->rem_addr.sin_addr.s_addr; 285 pj_sockaddr_init(rem_af, &si->rem_rtcp, NULL, 286 (pj_uint16_t)rtcp.port); 287 pj_memcpy(pj_sockaddr_get_addr(&si->rem_rtcp), 288 pj_sockaddr_get_addr(&si->rem_addr), 289 pj_sockaddr_get_addr_len(&si->rem_addr)); 244 290 } 245 291 } 246 292 } 247 293 248 if ( si->rem_rtcp.sin_addr.s_addr== 0) {294 if (!pj_sockaddr_has_addr(&si->rem_rtcp) == 0) { 249 295 int rtcp_port; 250 296 251 pj_memcpy(&si->rem_rtcp, &si->rem_addr, sizeof(pj_sockaddr _in));252 rtcp_port = pj_ ntohs(si->rem_addr.sin_port) + 1;253 si->rem_rtcp.sin_port = pj_htons((pj_uint16_t)rtcp_port);297 pj_memcpy(&si->rem_rtcp, &si->rem_addr, sizeof(pj_sockaddr)); 298 rtcp_port = pj_sockaddr_get_port(&si->rem_addr) + 1; 299 pj_sockaddr_set_port(&si->rem_rtcp, (pj_uint16_t)rtcp_port); 254 300 } 255 301
Note: See TracChangeset
for help on using the changeset viewer.