Changeset 483 for pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c
- Timestamp:
- Jun 1, 2006 11:37:30 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c
r479 r483 37 37 38 38 pj_pool_t *pool; /**< Memory pool */ 39 39 unsigned options; /**< Transport options. */ 40 40 pjmedia_stream *stream; /**< Stream user (may be NULL) */ 41 41 pj_sockaddr_in rem_rtp_addr; /**< Remote RTP address */ … … 109 109 const char *name, 110 110 int port, 111 unsigned options, 111 112 pjmedia_transport **p_tp) 112 113 { … … 153 154 154 155 /* Create UDP transport by attaching socket info */ 155 return pjmedia_transport_udp_attach( endpt, name, &si, p_tp);156 return pjmedia_transport_udp_attach( endpt, name, &si, options, p_tp); 156 157 157 158 … … 171 172 const char *name, 172 173 const pjmedia_sock_info *si, 174 unsigned options, 173 175 pjmedia_transport **p_tp) 174 176 { … … 199 201 tp = pj_pool_zalloc(pool, sizeof(struct transport_udp)); 200 202 tp->pool = pool; 203 tp->options = options; 201 204 pj_ansi_strcpy(tp->base.name, name); 202 205 tp->base.op = &transport_udp_op; … … 320 323 321 324 /* See if source address of RTP packet is different than the 322 * configured address. 325 * configured address, and switch RTP remote address to 326 * source packet address after several consecutive packets 327 * have been received. 323 328 */ 324 if ((udp->rem_rtp_addr.sin_addr.s_addr != 325 udp->rtp_src_addr.sin_addr.s_addr) || 326 (udp->rem_rtp_addr.sin_port != 327 udp->rtp_src_addr.sin_port)) 328 { 329 udp->rtp_src_cnt++; 330 331 if (udp->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) { 332 333 udp->rem_rtp_addr = udp->rtp_src_addr; 334 udp->rtp_src_cnt = 0; 335 336 PJ_LOG(4,(udp->base.name, 337 "Remote RTP address switched to %s:%d", 338 pj_inet_ntoa(udp->rtp_src_addr.sin_addr), 339 pj_ntohs(udp->rtp_src_addr.sin_port))); 329 if ((udp->options & PJMEDIA_UDP_NO_SRC_ADDR_CHECKING)==0) { 330 if ((udp->rem_rtp_addr.sin_addr.s_addr != 331 udp->rtp_src_addr.sin_addr.s_addr) || 332 (udp->rem_rtp_addr.sin_port != 333 udp->rtp_src_addr.sin_port)) 334 { 335 udp->rtp_src_cnt++; 336 337 if (udp->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) { 338 339 pj_uint16_t port; 340 341 /* Set remote RTP address to source address */ 342 udp->rem_rtp_addr = udp->rtp_src_addr; 343 344 /* Also update remote RTCP address */ 345 pj_memcpy(&udp->rem_rtcp_addr, &udp->rem_rtp_addr, 346 sizeof(pj_sockaddr_in)); 347 port = (pj_uint16_t) 348 (pj_ntohs(udp->rem_rtp_addr.sin_port)+1); 349 udp->rem_rtcp_addr.sin_port = pj_htons(port); 350 351 /* Reset counter */ 352 udp->rtp_src_cnt = 0; 353 354 PJ_LOG(4,(udp->base.name, 355 "Remote RTP address switched to %s:%d", 356 pj_inet_ntoa(udp->rtp_src_addr.sin_addr), 357 pj_ntohs(udp->rtp_src_addr.sin_port))); 358 } 340 359 } 341 360 }
Note: See TracChangeset
for help on using the changeset viewer.