Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: webrtc/p2p/base/port_unittest.cc

Issue 1800753003: Port::GetStunMessage: Write to scoped_ptr instead of raw pointer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Let caller worry about clearing the output argument Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/p2p/base/port.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 1757 matching lines...) Expand 10 before | Expand all | Expand 10 after
1768 rtc::SocketAddress addr(kLocalAddr1); 1768 rtc::SocketAddress addr(kLocalAddr1);
1769 std::string username; 1769 std::string username;
1770 1770
1771 // BINDING-REQUEST from local to remote with valid ICE username, 1771 // BINDING-REQUEST from local to remote with valid ICE username,
1772 // MESSAGE-INTEGRITY, and FINGERPRINT. 1772 // MESSAGE-INTEGRITY, and FINGERPRINT.
1773 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1773 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1774 "rfrag:lfrag")); 1774 "rfrag:lfrag"));
1775 in_msg->AddMessageIntegrity("rpass"); 1775 in_msg->AddMessageIntegrity("rpass");
1776 in_msg->AddFingerprint(); 1776 in_msg->AddFingerprint();
1777 WriteStunMessage(in_msg.get(), buf.get()); 1777 WriteStunMessage(in_msg.get(), buf.get());
1778 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1778 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1779 out_msg.accept(), &username)); 1779 &username));
1780 EXPECT_TRUE(out_msg.get() != NULL); 1780 EXPECT_TRUE(out_msg.get() != NULL);
1781 EXPECT_EQ("lfrag", username); 1781 EXPECT_EQ("lfrag", username);
1782 1782
1783 // BINDING-RESPONSE without username, with MESSAGE-INTEGRITY and FINGERPRINT. 1783 // BINDING-RESPONSE without username, with MESSAGE-INTEGRITY and FINGERPRINT.
1784 in_msg.reset(CreateStunMessage(STUN_BINDING_RESPONSE)); 1784 in_msg.reset(CreateStunMessage(STUN_BINDING_RESPONSE));
1785 in_msg->AddAttribute( 1785 in_msg->AddAttribute(
1786 new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, kLocalAddr2)); 1786 new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, kLocalAddr2));
1787 in_msg->AddMessageIntegrity("rpass"); 1787 in_msg->AddMessageIntegrity("rpass");
1788 in_msg->AddFingerprint(); 1788 in_msg->AddFingerprint();
1789 WriteStunMessage(in_msg.get(), buf.get()); 1789 WriteStunMessage(in_msg.get(), buf.get());
1790 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1790 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1791 out_msg.accept(), &username)); 1791 &username));
1792 EXPECT_TRUE(out_msg.get() != NULL); 1792 EXPECT_TRUE(out_msg.get() != NULL);
1793 EXPECT_EQ("", username); 1793 EXPECT_EQ("", username);
1794 1794
1795 // BINDING-ERROR-RESPONSE without username, with error, M-I, and FINGERPRINT. 1795 // BINDING-ERROR-RESPONSE without username, with error, M-I, and FINGERPRINT.
1796 in_msg.reset(CreateStunMessage(STUN_BINDING_ERROR_RESPONSE)); 1796 in_msg.reset(CreateStunMessage(STUN_BINDING_ERROR_RESPONSE));
1797 in_msg->AddAttribute(new StunErrorCodeAttribute(STUN_ATTR_ERROR_CODE, 1797 in_msg->AddAttribute(new StunErrorCodeAttribute(STUN_ATTR_ERROR_CODE,
1798 STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR)); 1798 STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR));
1799 in_msg->AddFingerprint(); 1799 in_msg->AddFingerprint();
1800 WriteStunMessage(in_msg.get(), buf.get()); 1800 WriteStunMessage(in_msg.get(), buf.get());
1801 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1801 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1802 out_msg.accept(), &username)); 1802 &username));
1803 EXPECT_TRUE(out_msg.get() != NULL); 1803 EXPECT_TRUE(out_msg.get() != NULL);
1804 EXPECT_EQ("", username); 1804 EXPECT_EQ("", username);
1805 ASSERT_TRUE(out_msg->GetErrorCode() != NULL); 1805 ASSERT_TRUE(out_msg->GetErrorCode() != NULL);
1806 EXPECT_EQ(STUN_ERROR_SERVER_ERROR, out_msg->GetErrorCode()->code()); 1806 EXPECT_EQ(STUN_ERROR_SERVER_ERROR, out_msg->GetErrorCode()->code());
1807 EXPECT_EQ(std::string(STUN_ERROR_REASON_SERVER_ERROR), 1807 EXPECT_EQ(std::string(STUN_ERROR_REASON_SERVER_ERROR),
1808 out_msg->GetErrorCode()->reason()); 1808 out_msg->GetErrorCode()->reason());
1809 } 1809 }
1810 1810
1811 // Tests handling of ICE binding requests with missing or incorrect usernames. 1811 // Tests handling of ICE binding requests with missing or incorrect usernames.
1812 TEST_F(PortTest, TestHandleStunMessageBadUsername) { 1812 TEST_F(PortTest, TestHandleStunMessageBadUsername) {
1813 rtc::scoped_ptr<TestPort> port( 1813 rtc::scoped_ptr<TestPort> port(
1814 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); 1814 CreateTestPort(kLocalAddr2, "rfrag", "rpass"));
1815 1815
1816 rtc::scoped_ptr<IceMessage> in_msg, out_msg; 1816 rtc::scoped_ptr<IceMessage> in_msg, out_msg;
1817 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer()); 1817 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer());
1818 rtc::SocketAddress addr(kLocalAddr1); 1818 rtc::SocketAddress addr(kLocalAddr1);
1819 std::string username; 1819 std::string username;
1820 1820
1821 // BINDING-REQUEST with no username. 1821 // BINDING-REQUEST with no username.
1822 in_msg.reset(CreateStunMessage(STUN_BINDING_REQUEST)); 1822 in_msg.reset(CreateStunMessage(STUN_BINDING_REQUEST));
1823 in_msg->AddMessageIntegrity("rpass"); 1823 in_msg->AddMessageIntegrity("rpass");
1824 in_msg->AddFingerprint(); 1824 in_msg->AddFingerprint();
1825 WriteStunMessage(in_msg.get(), buf.get()); 1825 WriteStunMessage(in_msg.get(), buf.get());
1826 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1826 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1827 out_msg.accept(), &username)); 1827 &username));
1828 EXPECT_TRUE(out_msg.get() == NULL); 1828 EXPECT_TRUE(out_msg.get() == NULL);
1829 EXPECT_EQ("", username); 1829 EXPECT_EQ("", username);
1830 EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code()); 1830 EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code());
1831 1831
1832 // BINDING-REQUEST with empty username. 1832 // BINDING-REQUEST with empty username.
1833 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, "")); 1833 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, ""));
1834 in_msg->AddMessageIntegrity("rpass"); 1834 in_msg->AddMessageIntegrity("rpass");
1835 in_msg->AddFingerprint(); 1835 in_msg->AddFingerprint();
1836 WriteStunMessage(in_msg.get(), buf.get()); 1836 WriteStunMessage(in_msg.get(), buf.get());
1837 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1837 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1838 out_msg.accept(), &username)); 1838 &username));
1839 EXPECT_TRUE(out_msg.get() == NULL); 1839 EXPECT_TRUE(out_msg.get() == NULL);
1840 EXPECT_EQ("", username); 1840 EXPECT_EQ("", username);
1841 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code()); 1841 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
1842 1842
1843 // BINDING-REQUEST with too-short username. 1843 // BINDING-REQUEST with too-short username.
1844 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, "rfra")); 1844 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, "rfra"));
1845 in_msg->AddMessageIntegrity("rpass"); 1845 in_msg->AddMessageIntegrity("rpass");
1846 in_msg->AddFingerprint(); 1846 in_msg->AddFingerprint();
1847 WriteStunMessage(in_msg.get(), buf.get()); 1847 WriteStunMessage(in_msg.get(), buf.get());
1848 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1848 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1849 out_msg.accept(), &username)); 1849 &username));
1850 EXPECT_TRUE(out_msg.get() == NULL); 1850 EXPECT_TRUE(out_msg.get() == NULL);
1851 EXPECT_EQ("", username); 1851 EXPECT_EQ("", username);
1852 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code()); 1852 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
1853 1853
1854 // BINDING-REQUEST with reversed username. 1854 // BINDING-REQUEST with reversed username.
1855 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1855 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1856 "lfrag:rfrag")); 1856 "lfrag:rfrag"));
1857 in_msg->AddMessageIntegrity("rpass"); 1857 in_msg->AddMessageIntegrity("rpass");
1858 in_msg->AddFingerprint(); 1858 in_msg->AddFingerprint();
1859 WriteStunMessage(in_msg.get(), buf.get()); 1859 WriteStunMessage(in_msg.get(), buf.get());
1860 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1860 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1861 out_msg.accept(), &username)); 1861 &username));
1862 EXPECT_TRUE(out_msg.get() == NULL); 1862 EXPECT_TRUE(out_msg.get() == NULL);
1863 EXPECT_EQ("", username); 1863 EXPECT_EQ("", username);
1864 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code()); 1864 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
1865 1865
1866 // BINDING-REQUEST with garbage username. 1866 // BINDING-REQUEST with garbage username.
1867 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1867 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1868 "abcd:efgh")); 1868 "abcd:efgh"));
1869 in_msg->AddMessageIntegrity("rpass"); 1869 in_msg->AddMessageIntegrity("rpass");
1870 in_msg->AddFingerprint(); 1870 in_msg->AddFingerprint();
1871 WriteStunMessage(in_msg.get(), buf.get()); 1871 WriteStunMessage(in_msg.get(), buf.get());
1872 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1872 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1873 out_msg.accept(), &username)); 1873 &username));
1874 EXPECT_TRUE(out_msg.get() == NULL); 1874 EXPECT_TRUE(out_msg.get() == NULL);
1875 EXPECT_EQ("", username); 1875 EXPECT_EQ("", username);
1876 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code()); 1876 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
1877 } 1877 }
1878 1878
1879 // Test handling STUN messages with missing or malformed M-I. 1879 // Test handling STUN messages with missing or malformed M-I.
1880 TEST_F(PortTest, TestHandleStunMessageBadMessageIntegrity) { 1880 TEST_F(PortTest, TestHandleStunMessageBadMessageIntegrity) {
1881 // Our port will act as the "remote" port. 1881 // Our port will act as the "remote" port.
1882 rtc::scoped_ptr<TestPort> port( 1882 rtc::scoped_ptr<TestPort> port(
1883 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); 1883 CreateTestPort(kLocalAddr2, "rfrag", "rpass"));
1884 1884
1885 rtc::scoped_ptr<IceMessage> in_msg, out_msg; 1885 rtc::scoped_ptr<IceMessage> in_msg, out_msg;
1886 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer()); 1886 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer());
1887 rtc::SocketAddress addr(kLocalAddr1); 1887 rtc::SocketAddress addr(kLocalAddr1);
1888 std::string username; 1888 std::string username;
1889 1889
1890 // BINDING-REQUEST from local to remote with valid ICE username and 1890 // BINDING-REQUEST from local to remote with valid ICE username and
1891 // FINGERPRINT, but no MESSAGE-INTEGRITY. 1891 // FINGERPRINT, but no MESSAGE-INTEGRITY.
1892 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1892 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1893 "rfrag:lfrag")); 1893 "rfrag:lfrag"));
1894 in_msg->AddFingerprint(); 1894 in_msg->AddFingerprint();
1895 WriteStunMessage(in_msg.get(), buf.get()); 1895 WriteStunMessage(in_msg.get(), buf.get());
1896 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1896 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1897 out_msg.accept(), &username)); 1897 &username));
1898 EXPECT_TRUE(out_msg.get() == NULL); 1898 EXPECT_TRUE(out_msg.get() == NULL);
1899 EXPECT_EQ("", username); 1899 EXPECT_EQ("", username);
1900 EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code()); 1900 EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code());
1901 1901
1902 // BINDING-REQUEST from local to remote with valid ICE username and 1902 // BINDING-REQUEST from local to remote with valid ICE username and
1903 // FINGERPRINT, but invalid MESSAGE-INTEGRITY. 1903 // FINGERPRINT, but invalid MESSAGE-INTEGRITY.
1904 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1904 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1905 "rfrag:lfrag")); 1905 "rfrag:lfrag"));
1906 in_msg->AddMessageIntegrity("invalid"); 1906 in_msg->AddMessageIntegrity("invalid");
1907 in_msg->AddFingerprint(); 1907 in_msg->AddFingerprint();
1908 WriteStunMessage(in_msg.get(), buf.get()); 1908 WriteStunMessage(in_msg.get(), buf.get());
1909 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1909 EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1910 out_msg.accept(), &username)); 1910 &username));
1911 EXPECT_TRUE(out_msg.get() == NULL); 1911 EXPECT_TRUE(out_msg.get() == NULL);
1912 EXPECT_EQ("", username); 1912 EXPECT_EQ("", username);
1913 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code()); 1913 EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
1914 1914
1915 // TODO: BINDING-RESPONSES and BINDING-ERROR-RESPONSES are checked 1915 // TODO: BINDING-RESPONSES and BINDING-ERROR-RESPONSES are checked
1916 // by the Connection, not the Port, since they require the remote username. 1916 // by the Connection, not the Port, since they require the remote username.
1917 // Change this test to pass in data via Connection::OnReadPacket instead. 1917 // Change this test to pass in data via Connection::OnReadPacket instead.
1918 } 1918 }
1919 1919
1920 // Test handling STUN messages with missing or malformed FINGERPRINT. 1920 // Test handling STUN messages with missing or malformed FINGERPRINT.
1921 TEST_F(PortTest, TestHandleStunMessageBadFingerprint) { 1921 TEST_F(PortTest, TestHandleStunMessageBadFingerprint) {
1922 // Our port will act as the "remote" port. 1922 // Our port will act as the "remote" port.
1923 rtc::scoped_ptr<TestPort> port( 1923 rtc::scoped_ptr<TestPort> port(
1924 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); 1924 CreateTestPort(kLocalAddr2, "rfrag", "rpass"));
1925 1925
1926 rtc::scoped_ptr<IceMessage> in_msg, out_msg; 1926 rtc::scoped_ptr<IceMessage> in_msg, out_msg;
1927 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer()); 1927 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer());
1928 rtc::SocketAddress addr(kLocalAddr1); 1928 rtc::SocketAddress addr(kLocalAddr1);
1929 std::string username; 1929 std::string username;
1930 1930
1931 // BINDING-REQUEST from local to remote with valid ICE username and 1931 // BINDING-REQUEST from local to remote with valid ICE username and
1932 // MESSAGE-INTEGRITY, but no FINGERPRINT; GetStunMessage should fail. 1932 // MESSAGE-INTEGRITY, but no FINGERPRINT; GetStunMessage should fail.
1933 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST, 1933 in_msg.reset(CreateStunMessageWithUsername(STUN_BINDING_REQUEST,
1934 "rfrag:lfrag")); 1934 "rfrag:lfrag"));
1935 in_msg->AddMessageIntegrity("rpass"); 1935 in_msg->AddMessageIntegrity("rpass");
1936 WriteStunMessage(in_msg.get(), buf.get()); 1936 WriteStunMessage(in_msg.get(), buf.get());
1937 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1937 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1938 out_msg.accept(), &username)); 1938 &username));
1939 EXPECT_EQ(0, port->last_stun_error_code()); 1939 EXPECT_EQ(0, port->last_stun_error_code());
1940 1940
1941 // Now, add a fingerprint, but munge the message so it's not valid. 1941 // Now, add a fingerprint, but munge the message so it's not valid.
1942 in_msg->AddFingerprint(); 1942 in_msg->AddFingerprint();
1943 in_msg->SetTransactionID("TESTTESTBADD"); 1943 in_msg->SetTransactionID("TESTTESTBADD");
1944 WriteStunMessage(in_msg.get(), buf.get()); 1944 WriteStunMessage(in_msg.get(), buf.get());
1945 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1945 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1946 out_msg.accept(), &username)); 1946 &username));
1947 EXPECT_EQ(0, port->last_stun_error_code()); 1947 EXPECT_EQ(0, port->last_stun_error_code());
1948 1948
1949 // Valid BINDING-RESPONSE, except no FINGERPRINT. 1949 // Valid BINDING-RESPONSE, except no FINGERPRINT.
1950 in_msg.reset(CreateStunMessage(STUN_BINDING_RESPONSE)); 1950 in_msg.reset(CreateStunMessage(STUN_BINDING_RESPONSE));
1951 in_msg->AddAttribute( 1951 in_msg->AddAttribute(
1952 new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, kLocalAddr2)); 1952 new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, kLocalAddr2));
1953 in_msg->AddMessageIntegrity("rpass"); 1953 in_msg->AddMessageIntegrity("rpass");
1954 WriteStunMessage(in_msg.get(), buf.get()); 1954 WriteStunMessage(in_msg.get(), buf.get());
1955 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1955 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1956 out_msg.accept(), &username)); 1956 &username));
1957 EXPECT_EQ(0, port->last_stun_error_code()); 1957 EXPECT_EQ(0, port->last_stun_error_code());
1958 1958
1959 // Now, add a fingerprint, but munge the message so it's not valid. 1959 // Now, add a fingerprint, but munge the message so it's not valid.
1960 in_msg->AddFingerprint(); 1960 in_msg->AddFingerprint();
1961 in_msg->SetTransactionID("TESTTESTBADD"); 1961 in_msg->SetTransactionID("TESTTESTBADD");
1962 WriteStunMessage(in_msg.get(), buf.get()); 1962 WriteStunMessage(in_msg.get(), buf.get());
1963 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1963 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1964 out_msg.accept(), &username)); 1964 &username));
1965 EXPECT_EQ(0, port->last_stun_error_code()); 1965 EXPECT_EQ(0, port->last_stun_error_code());
1966 1966
1967 // Valid BINDING-ERROR-RESPONSE, except no FINGERPRINT. 1967 // Valid BINDING-ERROR-RESPONSE, except no FINGERPRINT.
1968 in_msg.reset(CreateStunMessage(STUN_BINDING_ERROR_RESPONSE)); 1968 in_msg.reset(CreateStunMessage(STUN_BINDING_ERROR_RESPONSE));
1969 in_msg->AddAttribute(new StunErrorCodeAttribute(STUN_ATTR_ERROR_CODE, 1969 in_msg->AddAttribute(new StunErrorCodeAttribute(STUN_ATTR_ERROR_CODE,
1970 STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR)); 1970 STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR));
1971 in_msg->AddMessageIntegrity("rpass"); 1971 in_msg->AddMessageIntegrity("rpass");
1972 WriteStunMessage(in_msg.get(), buf.get()); 1972 WriteStunMessage(in_msg.get(), buf.get());
1973 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1973 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1974 out_msg.accept(), &username)); 1974 &username));
1975 EXPECT_EQ(0, port->last_stun_error_code()); 1975 EXPECT_EQ(0, port->last_stun_error_code());
1976 1976
1977 // Now, add a fingerprint, but munge the message so it's not valid. 1977 // Now, add a fingerprint, but munge the message so it's not valid.
1978 in_msg->AddFingerprint(); 1978 in_msg->AddFingerprint();
1979 in_msg->SetTransactionID("TESTTESTBADD"); 1979 in_msg->SetTransactionID("TESTTESTBADD");
1980 WriteStunMessage(in_msg.get(), buf.get()); 1980 WriteStunMessage(in_msg.get(), buf.get());
1981 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, 1981 EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
1982 out_msg.accept(), &username)); 1982 &username));
1983 EXPECT_EQ(0, port->last_stun_error_code()); 1983 EXPECT_EQ(0, port->last_stun_error_code());
1984 } 1984 }
1985 1985
1986 // Test handling of STUN binding indication messages . STUN binding 1986 // Test handling of STUN binding indication messages . STUN binding
1987 // indications are allowed only to the connection which is in read mode. 1987 // indications are allowed only to the connection which is in read mode.
1988 TEST_F(PortTest, TestHandleStunBindingIndication) { 1988 TEST_F(PortTest, TestHandleStunBindingIndication) {
1989 rtc::scoped_ptr<TestPort> lport( 1989 rtc::scoped_ptr<TestPort> lport(
1990 CreateTestPort(kLocalAddr2, "lfrag", "lpass")); 1990 CreateTestPort(kLocalAddr2, "lfrag", "lpass"));
1991 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); 1991 lport->SetIceRole(cricket::ICEROLE_CONTROLLING);
1992 lport->SetIceTiebreaker(kTiebreaker1); 1992 lport->SetIceTiebreaker(kTiebreaker1);
1993 1993
1994 // Verifying encoding and decoding STUN indication message. 1994 // Verifying encoding and decoding STUN indication message.
1995 rtc::scoped_ptr<IceMessage> in_msg, out_msg; 1995 rtc::scoped_ptr<IceMessage> in_msg, out_msg;
1996 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer()); 1996 rtc::scoped_ptr<ByteBuffer> buf(new ByteBuffer());
1997 rtc::SocketAddress addr(kLocalAddr1); 1997 rtc::SocketAddress addr(kLocalAddr1);
1998 std::string username; 1998 std::string username;
1999 1999
2000 in_msg.reset(CreateStunMessage(STUN_BINDING_INDICATION)); 2000 in_msg.reset(CreateStunMessage(STUN_BINDING_INDICATION));
2001 in_msg->AddFingerprint(); 2001 in_msg->AddFingerprint();
2002 WriteStunMessage(in_msg.get(), buf.get()); 2002 WriteStunMessage(in_msg.get(), buf.get());
2003 EXPECT_TRUE(lport->GetStunMessage(buf->Data(), buf->Length(), addr, 2003 EXPECT_TRUE(lport->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
2004 out_msg.accept(), &username)); 2004 &username));
2005 EXPECT_TRUE(out_msg.get() != NULL); 2005 EXPECT_TRUE(out_msg.get() != NULL);
2006 EXPECT_EQ(out_msg->type(), STUN_BINDING_INDICATION); 2006 EXPECT_EQ(out_msg->type(), STUN_BINDING_INDICATION);
2007 EXPECT_EQ("", username); 2007 EXPECT_EQ("", username);
2008 2008
2009 // Verify connection can handle STUN indication and updates 2009 // Verify connection can handle STUN indication and updates
2010 // last_ping_received. 2010 // last_ping_received.
2011 rtc::scoped_ptr<TestPort> rport( 2011 rtc::scoped_ptr<TestPort> rport(
2012 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); 2012 CreateTestPort(kLocalAddr2, "rfrag", "rpass"));
2013 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); 2013 rport->SetIceRole(cricket::ICEROLE_CONTROLLED);
2014 rport->SetIceTiebreaker(kTiebreaker2); 2014 rport->SetIceTiebreaker(kTiebreaker2);
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
2536 rtc::scoped_ptr<Port> tcp_port(CreateTcpPort(kLocalAddr1)); 2536 rtc::scoped_ptr<Port> tcp_port(CreateTcpPort(kLocalAddr1));
2537 EXPECT_TRUE(tcp_port->SupportsProtocol(TCP_PROTOCOL_NAME)); 2537 EXPECT_TRUE(tcp_port->SupportsProtocol(TCP_PROTOCOL_NAME));
2538 EXPECT_TRUE(tcp_port->SupportsProtocol(SSLTCP_PROTOCOL_NAME)); 2538 EXPECT_TRUE(tcp_port->SupportsProtocol(SSLTCP_PROTOCOL_NAME));
2539 EXPECT_FALSE(tcp_port->SupportsProtocol(UDP_PROTOCOL_NAME)); 2539 EXPECT_FALSE(tcp_port->SupportsProtocol(UDP_PROTOCOL_NAME));
2540 2540
2541 rtc::scoped_ptr<Port> turn_port( 2541 rtc::scoped_ptr<Port> turn_port(
2542 CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP)); 2542 CreateTurnPort(kLocalAddr1, nat_socket_factory1(), PROTO_UDP, PROTO_UDP));
2543 EXPECT_TRUE(turn_port->SupportsProtocol(UDP_PROTOCOL_NAME)); 2543 EXPECT_TRUE(turn_port->SupportsProtocol(UDP_PROTOCOL_NAME));
2544 EXPECT_FALSE(turn_port->SupportsProtocol(TCP_PROTOCOL_NAME)); 2544 EXPECT_FALSE(turn_port->SupportsProtocol(TCP_PROTOCOL_NAME));
2545 } 2545 }
OLDNEW
« no previous file with comments | « webrtc/p2p/base/port.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698