OLD | NEW |
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 867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 msg.SetType(STUN_BINDING_REQUEST); | 878 msg.SetType(STUN_BINDING_REQUEST); |
879 msg.SetTransactionID( | 879 msg.SetTransactionID( |
880 std::string(reinterpret_cast<const char*>(kTestTransactionId1), | 880 std::string(reinterpret_cast<const char*>(kTestTransactionId1), |
881 kStunTransactionIdLength)); | 881 kStunTransactionIdLength)); |
882 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 882 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |
883 | 883 |
884 StunAddressAttribute* addr = | 884 StunAddressAttribute* addr = |
885 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); | 885 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); |
886 rtc::SocketAddress test_addr(test_ip, kTestMessagePort2); | 886 rtc::SocketAddress test_addr(test_ip, kTestMessagePort2); |
887 addr->SetAddress(test_addr); | 887 addr->SetAddress(test_addr); |
888 EXPECT_TRUE(msg.AddAttribute(addr)); | 888 msg.AddAttribute(addr); |
889 | 889 |
890 CheckStunHeader(msg, STUN_BINDING_REQUEST, (size - 20)); | 890 CheckStunHeader(msg, STUN_BINDING_REQUEST, (size - 20)); |
891 | 891 |
892 rtc::ByteBufferWriter out; | 892 rtc::ByteBufferWriter out; |
893 EXPECT_TRUE(msg.Write(&out)); | 893 EXPECT_TRUE(msg.Write(&out)); |
894 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv6MappedAddress)); | 894 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv6MappedAddress)); |
895 int len1 = static_cast<int>(out.Length()); | 895 int len1 = static_cast<int>(out.Length()); |
896 rtc::ByteBufferReader read_buf(out); | 896 rtc::ByteBufferReader read_buf(out); |
897 std::string bytes; | 897 std::string bytes; |
898 read_buf.ReadString(&bytes, len1); | 898 read_buf.ReadString(&bytes, len1); |
899 ASSERT_EQ(0, memcmp(bytes.c_str(), kStunMessageWithIPv6MappedAddress, len1)); | 899 ASSERT_EQ(0, memcmp(bytes.c_str(), kStunMessageWithIPv6MappedAddress, len1)); |
900 } | 900 } |
901 | 901 |
902 TEST_F(StunTest, WriteMessageWithIPv4AddressAttribute) { | 902 TEST_F(StunTest, WriteMessageWithIPv4AddressAttribute) { |
903 StunMessage msg; | 903 StunMessage msg; |
904 size_t size = sizeof(kStunMessageWithIPv4MappedAddress); | 904 size_t size = sizeof(kStunMessageWithIPv4MappedAddress); |
905 | 905 |
906 rtc::IPAddress test_ip(kIPv4TestAddress1); | 906 rtc::IPAddress test_ip(kIPv4TestAddress1); |
907 | 907 |
908 msg.SetType(STUN_BINDING_RESPONSE); | 908 msg.SetType(STUN_BINDING_RESPONSE); |
909 msg.SetTransactionID( | 909 msg.SetTransactionID( |
910 std::string(reinterpret_cast<const char*>(kTestTransactionId1), | 910 std::string(reinterpret_cast<const char*>(kTestTransactionId1), |
911 kStunTransactionIdLength)); | 911 kStunTransactionIdLength)); |
912 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 912 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |
913 | 913 |
914 StunAddressAttribute* addr = | 914 StunAddressAttribute* addr = |
915 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); | 915 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); |
916 rtc::SocketAddress test_addr(test_ip, kTestMessagePort4); | 916 rtc::SocketAddress test_addr(test_ip, kTestMessagePort4); |
917 addr->SetAddress(test_addr); | 917 addr->SetAddress(test_addr); |
918 EXPECT_TRUE(msg.AddAttribute(addr)); | 918 msg.AddAttribute(addr); |
919 | 919 |
920 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); | 920 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); |
921 | 921 |
922 rtc::ByteBufferWriter out; | 922 rtc::ByteBufferWriter out; |
923 EXPECT_TRUE(msg.Write(&out)); | 923 EXPECT_TRUE(msg.Write(&out)); |
924 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv4MappedAddress)); | 924 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv4MappedAddress)); |
925 int len1 = static_cast<int>(out.Length()); | 925 int len1 = static_cast<int>(out.Length()); |
926 rtc::ByteBufferReader read_buf(out); | 926 rtc::ByteBufferReader read_buf(out); |
927 std::string bytes; | 927 std::string bytes; |
928 read_buf.ReadString(&bytes, len1); | 928 read_buf.ReadString(&bytes, len1); |
929 ASSERT_EQ(0, memcmp(bytes.c_str(), kStunMessageWithIPv4MappedAddress, len1)); | 929 ASSERT_EQ(0, memcmp(bytes.c_str(), kStunMessageWithIPv4MappedAddress, len1)); |
930 } | 930 } |
931 | 931 |
932 TEST_F(StunTest, WriteMessageWithIPv6XorAddressAttribute) { | 932 TEST_F(StunTest, WriteMessageWithIPv6XorAddressAttribute) { |
933 StunMessage msg; | 933 StunMessage msg; |
934 size_t size = sizeof(kStunMessageWithIPv6XorMappedAddress); | 934 size_t size = sizeof(kStunMessageWithIPv6XorMappedAddress); |
935 | 935 |
936 rtc::IPAddress test_ip(kIPv6TestAddress1); | 936 rtc::IPAddress test_ip(kIPv6TestAddress1); |
937 | 937 |
938 msg.SetType(STUN_BINDING_RESPONSE); | 938 msg.SetType(STUN_BINDING_RESPONSE); |
939 msg.SetTransactionID( | 939 msg.SetTransactionID( |
940 std::string(reinterpret_cast<const char*>(kTestTransactionId2), | 940 std::string(reinterpret_cast<const char*>(kTestTransactionId2), |
941 kStunTransactionIdLength)); | 941 kStunTransactionIdLength)); |
942 CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); | 942 CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); |
943 | 943 |
944 StunAddressAttribute* addr = | 944 StunAddressAttribute* addr = |
945 StunAttribute::CreateXorAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 945 StunAttribute::CreateXorAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |
946 rtc::SocketAddress test_addr(test_ip, kTestMessagePort1); | 946 rtc::SocketAddress test_addr(test_ip, kTestMessagePort1); |
947 addr->SetAddress(test_addr); | 947 addr->SetAddress(test_addr); |
948 EXPECT_TRUE(msg.AddAttribute(addr)); | 948 msg.AddAttribute(addr); |
949 | 949 |
950 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); | 950 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); |
951 | 951 |
952 rtc::ByteBufferWriter out; | 952 rtc::ByteBufferWriter out; |
953 EXPECT_TRUE(msg.Write(&out)); | 953 EXPECT_TRUE(msg.Write(&out)); |
954 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv6XorMappedAddress)); | 954 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv6XorMappedAddress)); |
955 int len1 = static_cast<int>(out.Length()); | 955 int len1 = static_cast<int>(out.Length()); |
956 rtc::ByteBufferReader read_buf(out); | 956 rtc::ByteBufferReader read_buf(out); |
957 std::string bytes; | 957 std::string bytes; |
958 read_buf.ReadString(&bytes, len1); | 958 read_buf.ReadString(&bytes, len1); |
(...skipping 10 matching lines...) Expand all Loading... |
969 msg.SetType(STUN_BINDING_RESPONSE); | 969 msg.SetType(STUN_BINDING_RESPONSE); |
970 msg.SetTransactionID( | 970 msg.SetTransactionID( |
971 std::string(reinterpret_cast<const char*>(kTestTransactionId1), | 971 std::string(reinterpret_cast<const char*>(kTestTransactionId1), |
972 kStunTransactionIdLength)); | 972 kStunTransactionIdLength)); |
973 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 973 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |
974 | 974 |
975 StunAddressAttribute* addr = | 975 StunAddressAttribute* addr = |
976 StunAttribute::CreateXorAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 976 StunAttribute::CreateXorAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |
977 rtc::SocketAddress test_addr(test_ip, kTestMessagePort3); | 977 rtc::SocketAddress test_addr(test_ip, kTestMessagePort3); |
978 addr->SetAddress(test_addr); | 978 addr->SetAddress(test_addr); |
979 EXPECT_TRUE(msg.AddAttribute(addr)); | 979 msg.AddAttribute(addr); |
980 | 980 |
981 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); | 981 CheckStunHeader(msg, STUN_BINDING_RESPONSE, (size - 20)); |
982 | 982 |
983 rtc::ByteBufferWriter out; | 983 rtc::ByteBufferWriter out; |
984 EXPECT_TRUE(msg.Write(&out)); | 984 EXPECT_TRUE(msg.Write(&out)); |
985 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv4XorMappedAddress)); | 985 ASSERT_EQ(out.Length(), sizeof(kStunMessageWithIPv4XorMappedAddress)); |
986 int len1 = static_cast<int>(out.Length()); | 986 int len1 = static_cast<int>(out.Length()); |
987 rtc::ByteBufferReader read_buf(out); | 987 rtc::ByteBufferReader read_buf(out); |
988 std::string bytes; | 988 std::string bytes; |
989 read_buf.ReadString(&bytes, len1); | 989 read_buf.ReadString(&bytes, len1); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 size_t size = sizeof(kStunMessageWithErrorAttribute); | 1069 size_t size = sizeof(kStunMessageWithErrorAttribute); |
1070 | 1070 |
1071 msg.SetType(STUN_BINDING_ERROR_RESPONSE); | 1071 msg.SetType(STUN_BINDING_ERROR_RESPONSE); |
1072 msg.SetTransactionID( | 1072 msg.SetTransactionID( |
1073 std::string(reinterpret_cast<const char*>(kTestTransactionId1), | 1073 std::string(reinterpret_cast<const char*>(kTestTransactionId1), |
1074 kStunTransactionIdLength)); | 1074 kStunTransactionIdLength)); |
1075 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 1075 CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |
1076 StunErrorCodeAttribute* errorcode = StunAttribute::CreateErrorCode(); | 1076 StunErrorCodeAttribute* errorcode = StunAttribute::CreateErrorCode(); |
1077 errorcode->SetCode(kTestErrorCode); | 1077 errorcode->SetCode(kTestErrorCode); |
1078 errorcode->SetReason(kTestErrorReason); | 1078 errorcode->SetReason(kTestErrorReason); |
1079 EXPECT_TRUE(msg.AddAttribute(errorcode)); | 1079 msg.AddAttribute(errorcode); |
1080 CheckStunHeader(msg, STUN_BINDING_ERROR_RESPONSE, (size - 20)); | 1080 CheckStunHeader(msg, STUN_BINDING_ERROR_RESPONSE, (size - 20)); |
1081 | 1081 |
1082 rtc::ByteBufferWriter out; | 1082 rtc::ByteBufferWriter out; |
1083 EXPECT_TRUE(msg.Write(&out)); | 1083 EXPECT_TRUE(msg.Write(&out)); |
1084 ASSERT_EQ(size, out.Length()); | 1084 ASSERT_EQ(size, out.Length()); |
1085 // No padding. | 1085 // No padding. |
1086 ASSERT_EQ(0, memcmp(out.Data(), kStunMessageWithErrorAttribute, size)); | 1086 ASSERT_EQ(0, memcmp(out.Data(), kStunMessageWithErrorAttribute, size)); |
1087 } | 1087 } |
1088 | 1088 |
1089 TEST_F(StunTest, WriteMessageWithAUInt16ListAttribute) { | 1089 TEST_F(StunTest, WriteMessageWithAUInt16ListAttribute) { |
1090 StunMessage msg; | 1090 StunMessage msg; |
1091 size_t size = sizeof(kStunMessageWithUInt16ListAttribute); | 1091 size_t size = sizeof(kStunMessageWithUInt16ListAttribute); |
1092 | 1092 |
1093 msg.SetType(STUN_BINDING_REQUEST); | 1093 msg.SetType(STUN_BINDING_REQUEST); |
1094 msg.SetTransactionID( | 1094 msg.SetTransactionID( |
1095 std::string(reinterpret_cast<const char*>(kTestTransactionId2), | 1095 std::string(reinterpret_cast<const char*>(kTestTransactionId2), |
1096 kStunTransactionIdLength)); | 1096 kStunTransactionIdLength)); |
1097 CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); | 1097 CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); |
1098 StunUInt16ListAttribute* list = StunAttribute::CreateUnknownAttributes(); | 1098 StunUInt16ListAttribute* list = StunAttribute::CreateUnknownAttributes(); |
1099 list->AddType(0x1U); | 1099 list->AddType(0x1U); |
1100 list->AddType(0x1000U); | 1100 list->AddType(0x1000U); |
1101 list->AddType(0xAB0CU); | 1101 list->AddType(0xAB0CU); |
1102 EXPECT_TRUE(msg.AddAttribute(list)); | 1102 msg.AddAttribute(list); |
1103 CheckStunHeader(msg, STUN_BINDING_REQUEST, (size - 20)); | 1103 CheckStunHeader(msg, STUN_BINDING_REQUEST, (size - 20)); |
1104 | 1104 |
1105 rtc::ByteBufferWriter out; | 1105 rtc::ByteBufferWriter out; |
1106 EXPECT_TRUE(msg.Write(&out)); | 1106 EXPECT_TRUE(msg.Write(&out)); |
1107 ASSERT_EQ(size, out.Length()); | 1107 ASSERT_EQ(size, out.Length()); |
1108 // Check everything up to the padding. | 1108 // Check everything up to the padding. |
1109 ASSERT_EQ(0, | 1109 ASSERT_EQ(0, |
1110 memcmp(out.Data(), kStunMessageWithUInt16ListAttribute, size - 2)); | 1110 memcmp(out.Data(), kStunMessageWithUInt16ListAttribute, size - 2)); |
1111 } | 1111 } |
1112 | 1112 |
1113 TEST_F(StunTest, WriteMessageWithOriginAttribute) { | 1113 TEST_F(StunTest, WriteMessageWithOriginAttribute) { |
1114 StunMessage msg; | 1114 StunMessage msg; |
1115 size_t size = sizeof(kStunMessageWithOriginAttribute); | 1115 size_t size = sizeof(kStunMessageWithOriginAttribute); |
1116 | 1116 |
1117 msg.SetType(STUN_BINDING_REQUEST); | 1117 msg.SetType(STUN_BINDING_REQUEST); |
1118 msg.SetTransactionID( | 1118 msg.SetTransactionID( |
1119 std::string(reinterpret_cast<const char*>(kTestTransactionId1), | 1119 std::string(reinterpret_cast<const char*>(kTestTransactionId1), |
1120 kStunTransactionIdLength)); | 1120 kStunTransactionIdLength)); |
1121 StunByteStringAttribute* origin = | 1121 StunByteStringAttribute* origin = |
1122 new StunByteStringAttribute(STUN_ATTR_ORIGIN, kTestOrigin); | 1122 new StunByteStringAttribute(STUN_ATTR_ORIGIN, kTestOrigin); |
1123 EXPECT_TRUE(msg.AddAttribute(origin)); | 1123 msg.AddAttribute(origin); |
1124 | 1124 |
1125 rtc::ByteBufferWriter out; | 1125 rtc::ByteBufferWriter out; |
1126 EXPECT_TRUE(msg.Write(&out)); | 1126 EXPECT_TRUE(msg.Write(&out)); |
1127 ASSERT_EQ(size, out.Length()); | 1127 ASSERT_EQ(size, out.Length()); |
1128 // Check everything up to the padding | 1128 // Check everything up to the padding |
1129 ASSERT_EQ(0, memcmp(out.Data(), kStunMessageWithOriginAttribute, size - 2)); | 1129 ASSERT_EQ(0, memcmp(out.Data(), kStunMessageWithOriginAttribute, size - 2)); |
1130 } | 1130 } |
1131 | 1131 |
1132 // Test that we fail to read messages with invalid lengths. | 1132 // Test that we fail to read messages with invalid lengths. |
1133 void CheckFailureToRead(const unsigned char* testcase, size_t length) { | 1133 void CheckFailureToRead(const unsigned char* testcase, size_t length) { |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1386 const StunAddressAttribute* addr = msg.GetAddress(STUN_ATTR_MAPPED_ADDRESS); | 1386 const StunAddressAttribute* addr = msg.GetAddress(STUN_ATTR_MAPPED_ADDRESS); |
1387 ASSERT_TRUE(addr != NULL); | 1387 ASSERT_TRUE(addr != NULL); |
1388 EXPECT_EQ(1, addr->family()); | 1388 EXPECT_EQ(1, addr->family()); |
1389 EXPECT_EQ(13, addr->port()); | 1389 EXPECT_EQ(13, addr->port()); |
1390 EXPECT_EQ(legacy_ip, addr->ipaddr()); | 1390 EXPECT_EQ(legacy_ip, addr->ipaddr()); |
1391 | 1391 |
1392 StunAddressAttribute* addr2 = | 1392 StunAddressAttribute* addr2 = |
1393 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); | 1393 StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); |
1394 addr2->SetPort(13); | 1394 addr2->SetPort(13); |
1395 addr2->SetIP(legacy_ip); | 1395 addr2->SetIP(legacy_ip); |
1396 EXPECT_TRUE(msg2.AddAttribute(addr2)); | 1396 msg2.AddAttribute(addr2); |
1397 | 1397 |
1398 const StunByteStringAttribute* bytes = msg.GetByteString(STUN_ATTR_USERNAME); | 1398 const StunByteStringAttribute* bytes = msg.GetByteString(STUN_ATTR_USERNAME); |
1399 ASSERT_TRUE(bytes != NULL); | 1399 ASSERT_TRUE(bytes != NULL); |
1400 EXPECT_EQ(12U, bytes->length()); | 1400 EXPECT_EQ(12U, bytes->length()); |
1401 EXPECT_EQ("abcdefghijkl", bytes->GetString()); | 1401 EXPECT_EQ("abcdefghijkl", bytes->GetString()); |
1402 | 1402 |
1403 StunByteStringAttribute* bytes2 = | 1403 StunByteStringAttribute* bytes2 = |
1404 StunAttribute::CreateByteString(STUN_ATTR_USERNAME); | 1404 StunAttribute::CreateByteString(STUN_ATTR_USERNAME); |
1405 bytes2->CopyBytes("abcdefghijkl"); | 1405 bytes2->CopyBytes("abcdefghijkl"); |
1406 EXPECT_TRUE(msg2.AddAttribute(bytes2)); | 1406 msg2.AddAttribute(bytes2); |
1407 | 1407 |
1408 const StunUInt32Attribute* uval = msg.GetUInt32(STUN_ATTR_LIFETIME); | 1408 const StunUInt32Attribute* uval = msg.GetUInt32(STUN_ATTR_LIFETIME); |
1409 ASSERT_TRUE(uval != NULL); | 1409 ASSERT_TRUE(uval != NULL); |
1410 EXPECT_EQ(11U, uval->value()); | 1410 EXPECT_EQ(11U, uval->value()); |
1411 | 1411 |
1412 StunUInt32Attribute* uval2 = StunAttribute::CreateUInt32(STUN_ATTR_LIFETIME); | 1412 StunUInt32Attribute* uval2 = StunAttribute::CreateUInt32(STUN_ATTR_LIFETIME); |
1413 uval2->SetValue(11); | 1413 uval2->SetValue(11); |
1414 EXPECT_TRUE(msg2.AddAttribute(uval2)); | 1414 msg2.AddAttribute(uval2); |
1415 | 1415 |
1416 bytes = msg.GetByteString(STUN_ATTR_MAGIC_COOKIE); | 1416 bytes = msg.GetByteString(STUN_ATTR_MAGIC_COOKIE); |
1417 ASSERT_TRUE(bytes != NULL); | 1417 ASSERT_TRUE(bytes != NULL); |
1418 EXPECT_EQ(4U, bytes->length()); | 1418 EXPECT_EQ(4U, bytes->length()); |
1419 EXPECT_EQ(0, | 1419 EXPECT_EQ(0, |
1420 memcmp(bytes->bytes(), | 1420 memcmp(bytes->bytes(), |
1421 TURN_MAGIC_COOKIE_VALUE, | 1421 TURN_MAGIC_COOKIE_VALUE, |
1422 sizeof(TURN_MAGIC_COOKIE_VALUE))); | 1422 sizeof(TURN_MAGIC_COOKIE_VALUE))); |
1423 | 1423 |
1424 bytes2 = StunAttribute::CreateByteString(STUN_ATTR_MAGIC_COOKIE); | 1424 bytes2 = StunAttribute::CreateByteString(STUN_ATTR_MAGIC_COOKIE); |
1425 bytes2->CopyBytes(reinterpret_cast<const char*>(TURN_MAGIC_COOKIE_VALUE), | 1425 bytes2->CopyBytes(reinterpret_cast<const char*>(TURN_MAGIC_COOKIE_VALUE), |
1426 sizeof(TURN_MAGIC_COOKIE_VALUE)); | 1426 sizeof(TURN_MAGIC_COOKIE_VALUE)); |
1427 EXPECT_TRUE(msg2.AddAttribute(bytes2)); | 1427 msg2.AddAttribute(bytes2); |
1428 | 1428 |
1429 uval = msg.GetUInt32(STUN_ATTR_BANDWIDTH); | 1429 uval = msg.GetUInt32(STUN_ATTR_BANDWIDTH); |
1430 ASSERT_TRUE(uval != NULL); | 1430 ASSERT_TRUE(uval != NULL); |
1431 EXPECT_EQ(6U, uval->value()); | 1431 EXPECT_EQ(6U, uval->value()); |
1432 | 1432 |
1433 uval2 = StunAttribute::CreateUInt32(STUN_ATTR_BANDWIDTH); | 1433 uval2 = StunAttribute::CreateUInt32(STUN_ATTR_BANDWIDTH); |
1434 uval2->SetValue(6); | 1434 uval2->SetValue(6); |
1435 EXPECT_TRUE(msg2.AddAttribute(uval2)); | 1435 msg2.AddAttribute(uval2); |
1436 | 1436 |
1437 addr = msg.GetAddress(STUN_ATTR_DESTINATION_ADDRESS); | 1437 addr = msg.GetAddress(STUN_ATTR_DESTINATION_ADDRESS); |
1438 ASSERT_TRUE(addr != NULL); | 1438 ASSERT_TRUE(addr != NULL); |
1439 EXPECT_EQ(1, addr->family()); | 1439 EXPECT_EQ(1, addr->family()); |
1440 EXPECT_EQ(13, addr->port()); | 1440 EXPECT_EQ(13, addr->port()); |
1441 EXPECT_EQ(legacy_ip, addr->ipaddr()); | 1441 EXPECT_EQ(legacy_ip, addr->ipaddr()); |
1442 | 1442 |
1443 addr2 = StunAttribute::CreateAddress(STUN_ATTR_DESTINATION_ADDRESS); | 1443 addr2 = StunAttribute::CreateAddress(STUN_ATTR_DESTINATION_ADDRESS); |
1444 addr2->SetPort(13); | 1444 addr2->SetPort(13); |
1445 addr2->SetIP(legacy_ip); | 1445 addr2->SetIP(legacy_ip); |
1446 EXPECT_TRUE(msg2.AddAttribute(addr2)); | 1446 msg2.AddAttribute(addr2); |
1447 | 1447 |
1448 addr = msg.GetAddress(STUN_ATTR_SOURCE_ADDRESS2); | 1448 addr = msg.GetAddress(STUN_ATTR_SOURCE_ADDRESS2); |
1449 ASSERT_TRUE(addr != NULL); | 1449 ASSERT_TRUE(addr != NULL); |
1450 EXPECT_EQ(1, addr->family()); | 1450 EXPECT_EQ(1, addr->family()); |
1451 EXPECT_EQ(13, addr->port()); | 1451 EXPECT_EQ(13, addr->port()); |
1452 EXPECT_EQ(legacy_ip, addr->ipaddr()); | 1452 EXPECT_EQ(legacy_ip, addr->ipaddr()); |
1453 | 1453 |
1454 addr2 = StunAttribute::CreateAddress(STUN_ATTR_SOURCE_ADDRESS2); | 1454 addr2 = StunAttribute::CreateAddress(STUN_ATTR_SOURCE_ADDRESS2); |
1455 addr2->SetPort(13); | 1455 addr2->SetPort(13); |
1456 addr2->SetIP(legacy_ip); | 1456 addr2->SetIP(legacy_ip); |
1457 EXPECT_TRUE(msg2.AddAttribute(addr2)); | 1457 msg2.AddAttribute(addr2); |
1458 | 1458 |
1459 bytes = msg.GetByteString(STUN_ATTR_DATA); | 1459 bytes = msg.GetByteString(STUN_ATTR_DATA); |
1460 ASSERT_TRUE(bytes != NULL); | 1460 ASSERT_TRUE(bytes != NULL); |
1461 EXPECT_EQ(7U, bytes->length()); | 1461 EXPECT_EQ(7U, bytes->length()); |
1462 EXPECT_EQ("abcdefg", bytes->GetString()); | 1462 EXPECT_EQ("abcdefg", bytes->GetString()); |
1463 | 1463 |
1464 bytes2 = StunAttribute::CreateByteString(STUN_ATTR_DATA); | 1464 bytes2 = StunAttribute::CreateByteString(STUN_ATTR_DATA); |
1465 bytes2->CopyBytes("abcdefg"); | 1465 bytes2->CopyBytes("abcdefg"); |
1466 EXPECT_TRUE(msg2.AddAttribute(bytes2)); | 1466 msg2.AddAttribute(bytes2); |
1467 | 1467 |
1468 rtc::ByteBufferWriter out; | 1468 rtc::ByteBufferWriter out; |
1469 EXPECT_TRUE(msg.Write(&out)); | 1469 EXPECT_TRUE(msg.Write(&out)); |
1470 EXPECT_EQ(size, out.Length()); | 1470 EXPECT_EQ(size, out.Length()); |
1471 size_t len1 = out.Length(); | 1471 size_t len1 = out.Length(); |
1472 rtc::ByteBufferReader read_buf(out); | 1472 rtc::ByteBufferReader read_buf(out); |
1473 std::string outstring; | 1473 std::string outstring; |
1474 read_buf.ReadString(&outstring, len1); | 1474 read_buf.ReadString(&outstring, len1); |
1475 EXPECT_EQ(0, memcmp(outstring.c_str(), input, len1)); | 1475 EXPECT_EQ(0, memcmp(outstring.c_str(), input, len1)); |
1476 | 1476 |
1477 rtc::ByteBufferWriter out2; | 1477 rtc::ByteBufferWriter out2; |
1478 EXPECT_TRUE(msg2.Write(&out2)); | 1478 EXPECT_TRUE(msg2.Write(&out2)); |
1479 EXPECT_EQ(size, out2.Length()); | 1479 EXPECT_EQ(size, out2.Length()); |
1480 size_t len2 = out2.Length(); | 1480 size_t len2 = out2.Length(); |
1481 rtc::ByteBufferReader read_buf2(out2); | 1481 rtc::ByteBufferReader read_buf2(out2); |
1482 std::string outstring2; | 1482 std::string outstring2; |
1483 read_buf2.ReadString(&outstring2, len2); | 1483 read_buf2.ReadString(&outstring2, len2); |
1484 EXPECT_EQ(0, memcmp(outstring2.c_str(), input, len2)); | 1484 EXPECT_EQ(0, memcmp(outstring2.c_str(), input, len2)); |
1485 } | 1485 } |
1486 | 1486 |
1487 } // namespace cricket | 1487 } // namespace cricket |
OLD | NEW |