Changeset 3841 for pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c
- Timestamp:
- Oct 24, 2011 9:28:13 AM (13 years ago)
- Location:
- pjproject/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk
- Property svn:mergeinfo changed
-
pjproject/trunk/pjmedia/src/pjmedia/transport_udp.c
r3553 r3841 84 84 pj_sockaddr rtcp_addr_name; /**< Published RTCP address. */ 85 85 pj_sockaddr rtcp_src_addr; /**< Actual source RTCP address. */ 86 unsigned rtcp_src_cnt; /**< How many pkt from this addr. */ 86 87 int rtcp_addr_len; /**< Length of RTCP src address. */ 87 88 pj_ioqueue_key_t *rtcp_key; /**< RTCP socket key in ioqueue */ … … 453 454 void (*cb)(void*,void*,pj_ssize_t); 454 455 void *user_data; 456 pj_bool_t discard = PJ_FALSE; 455 457 456 458 cb = udp->rtp_cb; … … 463 465 "RX RTP packet dropped because of pkt lost " 464 466 "simulation")); 465 goto read_next_packet;467 discard = PJ_TRUE; 466 468 } 467 469 } 468 469 470 if (udp->attached && cb)471 (*cb)(user_data, udp->rtp_pkt, bytes_read);472 470 473 471 /* See if source address of RTP packet is different than the … … 479 477 (udp->options & PJMEDIA_UDP_NO_SRC_ADDR_CHECKING)==0) 480 478 { 481 if (pj_sockaddr_cmp(&udp->rem_rtp_addr, &udp->rtp_src_addr) != 0) { 482 479 if (pj_sockaddr_cmp(&udp->rem_rtp_addr, &udp->rtp_src_addr) == 0) { 480 /* We're still receiving from rem_rtp_addr. Don't switch. */ 481 udp->rtp_src_cnt = 0; 482 } else { 483 483 udp->rtp_src_cnt++; 484 484 485 if (udp->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) { 485 if (udp->rtp_src_cnt < PJMEDIA_RTP_NAT_PROBATION_CNT) { 486 discard = PJ_TRUE; 487 } else { 486 488 487 489 char addr_text[80]; … … 517 519 518 520 PJ_LOG(4,(udp->base.name, 519 "Remote RTCP address switched to %s", 521 "Remote RTCP address switched to predicted" 522 " address %s", 520 523 pj_sockaddr_print(&udp->rtcp_src_addr, 521 524 addr_text, … … 527 530 } 528 531 529 read_next_packet: 532 if (!discard && udp->attached && cb) 533 (*cb)(user_data, udp->rtp_pkt, bytes_read); 534 530 535 bytes_read = sizeof(udp->rtp_pkt); 531 536 udp->rtp_addrlen = sizeof(udp->rtp_src_addr); … … 569 574 */ 570 575 if (bytes_read>0 && 571 (udp->options & PJMEDIA_UDP_NO_SRC_ADDR_CHECKING)==0 && 572 pj_sockaddr_cmp(&udp->rem_rtcp_addr, &udp->rtcp_src_addr) != 0) 576 (udp->options & PJMEDIA_UDP_NO_SRC_ADDR_CHECKING)==0) 573 577 { 574 char addr_text[80]; 575 576 pj_memcpy(&udp->rem_rtcp_addr, &udp->rtcp_src_addr, 577 sizeof(pj_sockaddr)); 578 579 PJ_LOG(4,(udp->base.name, 580 "Remote RTCP address switched to %s", 581 pj_sockaddr_print(&udp->rtcp_src_addr, addr_text, 582 sizeof(addr_text), 3))); 578 if (pj_sockaddr_cmp(&udp->rem_rtcp_addr, &udp->rtcp_src_addr) == 0) { 579 /* Still receiving from rem_rtcp_addr, don't switch */ 580 udp->rtcp_src_cnt = 0; 581 } else { 582 ++udp->rtcp_src_cnt; 583 584 if (udp->rtcp_src_cnt >= PJMEDIA_RTCP_NAT_PROBATION_CNT ) { 585 char addr_text[80]; 586 587 udp->rtcp_src_cnt = 0; 588 pj_memcpy(&udp->rem_rtcp_addr, &udp->rtcp_src_addr, 589 sizeof(pj_sockaddr)); 590 591 PJ_LOG(4,(udp->base.name, 592 "Remote RTCP address switched to %s", 593 pj_sockaddr_print(&udp->rtcp_src_addr, addr_text, 594 sizeof(addr_text), 3))); 595 } 596 } 583 597 } 584 598 … … 678 692 pj_bzero(&udp->rtcp_src_addr, sizeof(udp->rtcp_src_addr)); 679 693 udp->rtp_src_cnt = 0; 694 udp->rtcp_src_cnt = 0; 680 695 681 696 /* Unlock keys */
Note: See TracChangeset
for help on using the changeset viewer.