Changeset 3841 for pjproject/trunk/pjmedia/src/pjmedia/transport_ice.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_ice.c
r3664 r3841 73 73 pj_sockaddr rtcp_src_addr; /**< Actual source RTCP address. */ 74 74 unsigned rtp_src_cnt; /**< How many pkt from this addr. */ 75 unsigned rtcp_src_cnt; /**< How many pkt from this addr. */ 75 76 76 77 unsigned tx_drop_pct; /**< Percent of tx pkts to drop. */ … … 1517 1518 if (tp_ice->use_ice || tp_ice->rtp_src_cnt) { 1518 1519 info->src_rtp_name = tp_ice->rtp_src_addr; 1520 } 1521 if (tp_ice->use_ice || tp_ice->rtcp_src_cnt) { 1519 1522 info->src_rtcp_name = tp_ice->rtcp_src_addr; 1520 1523 } … … 1582 1585 tp_ice->rtcp_src_addr = tp_ice->remote_rtcp; 1583 1586 tp_ice->rtp_src_cnt = 0; 1587 tp_ice->rtcp_src_cnt = 0; 1584 1588 1585 1589 return PJ_SUCCESS; … … 1657 1661 { 1658 1662 struct transport_ice *tp_ice; 1663 pj_bool_t discard = PJ_FALSE; 1659 1664 1660 1665 tp_ice = (struct transport_ice*) pj_ice_strans_get_user_data(ice_st); … … 1672 1677 } 1673 1678 1674 (*tp_ice->rtp_cb)(tp_ice->stream, pkt, size);1675 1676 1679 /* See if source address of RTP packet is different than the 1677 1680 * configured address, and switch RTP remote address to … … 1680 1683 */ 1681 1684 if (!tp_ice->use_ice) { 1682 1683 /* Increment counter and avoid zero */ 1684 if (++tp_ice->rtp_src_cnt == 0) 1685 tp_ice->rtp_src_cnt = 1; 1686 1687 if (pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0) { 1685 pj_bool_t enable_switch = 1686 ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0); 1687 1688 if (!enable_switch || 1689 pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) == 0) 1690 { 1691 /* Don't switch while we're receiving from remote_rtp */ 1692 tp_ice->rtp_src_cnt = 0; 1693 } else { 1694 1695 ++tp_ice->rtp_src_cnt; 1688 1696 1689 1697 /* Check if the source address is recognized. */ … … 1693 1701 /* Reset counter */ 1694 1702 tp_ice->rtp_src_cnt = 0; 1703 discard = PJ_TRUE; 1695 1704 } 1696 1705 1697 if ( (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0 &&1698 tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT)1699 {1706 if (tp_ice->rtp_src_cnt < PJMEDIA_RTP_NAT_PROBATION_CNT) { 1707 discard = PJ_TRUE; 1708 } else { 1700 1709 char addr_text[80]; 1701 1710 … … 1726 1735 1727 1736 PJ_LOG(4,(tp_ice->base.name, 1728 "Remote RTCP address switched to %s", 1737 "Remote RTCP address switched to predicted " 1738 "address %s", 1729 1739 pj_sockaddr_print(&tp_ice->remote_rtcp, 1730 1740 addr_text, … … 1734 1744 } 1735 1745 } 1746 1747 if (!discard) 1748 (*tp_ice->rtp_cb)(tp_ice->stream, pkt, size); 1749 1736 1750 } else if (comp_id==2 && tp_ice->rtcp_cb) { 1737 (*tp_ice->rtcp_cb)(tp_ice->stream, pkt, size);1738 1751 1739 1752 /* Check if RTCP source address is the same as the configured … … 1742 1755 */ 1743 1756 if (!tp_ice->use_ice && 1744 pj_sockaddr_cmp(&tp_ice->remote_rtcp, src_addr) !=0)1757 (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0) 1745 1758 { 1746 pj_sockaddr_cp(&tp_ice->rtcp_src_addr, src_addr);1747 1748 if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0){1759 if (pj_sockaddr_cmp(&tp_ice->remote_rtcp, src_addr) == 0) { 1760 tp_ice->rtcp_src_cnt = 0; 1761 } else { 1749 1762 char addr_text[80]; 1750 1763 1751 pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr); 1752 1753 pj_assert(tp_ice->addr_len == pj_sockaddr_get_len(src_addr)); 1754 1755 PJ_LOG(4,(tp_ice->base.name, 1756 "Remote RTCP address switched to %s", 1757 pj_sockaddr_print(&tp_ice->remote_rtcp, addr_text, 1758 sizeof(addr_text), 3))); 1764 ++tp_ice->rtcp_src_cnt; 1765 if (tp_ice->rtcp_src_cnt < PJMEDIA_RTCP_NAT_PROBATION_CNT) { 1766 discard = PJ_TRUE; 1767 } else { 1768 tp_ice->rtcp_src_cnt = 0; 1769 pj_sockaddr_cp(&tp_ice->rtcp_src_addr, src_addr); 1770 pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr); 1771 1772 pj_assert(tp_ice->addr_len==pj_sockaddr_get_len(src_addr)); 1773 1774 PJ_LOG(4,(tp_ice->base.name, 1775 "Remote RTCP address switched to %s", 1776 pj_sockaddr_print(&tp_ice->remote_rtcp, 1777 addr_text, sizeof(addr_text), 1778 3))); 1779 } 1759 1780 } 1760 1781 } 1782 1783 if (!discard) 1784 (*tp_ice->rtcp_cb)(tp_ice->stream, pkt, size); 1761 1785 } 1762 1786
Note: See TracChangeset
for help on using the changeset viewer.