| 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 596 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   607 // Read the RFC5389 fields from the RFC5769 sample STUN request. |   607 // Read the RFC5389 fields from the RFC5769 sample STUN request. | 
|   608 TEST_F(StunTest, ReadRfc5769RequestMessage) { |   608 TEST_F(StunTest, ReadRfc5769RequestMessage) { | 
|   609   StunMessage msg; |   609   StunMessage msg; | 
|   610   size_t size = ReadStunMessage(&msg, kRfc5769SampleRequest); |   610   size_t size = ReadStunMessage(&msg, kRfc5769SampleRequest); | 
|   611   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |   611   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|   612   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, |   612   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, | 
|   613                          kStunTransactionIdLength); |   613                          kStunTransactionIdLength); | 
|   614  |   614  | 
|   615   const StunByteStringAttribute* software = |   615   const StunByteStringAttribute* software = | 
|   616       msg.GetByteString(STUN_ATTR_SOFTWARE); |   616       msg.GetByteString(STUN_ATTR_SOFTWARE); | 
|   617   ASSERT_TRUE(software != NULL); |   617   ASSERT_TRUE(software != nullptr); | 
|   618   EXPECT_EQ(kRfc5769SampleMsgClientSoftware, software->GetString()); |   618   EXPECT_EQ(kRfc5769SampleMsgClientSoftware, software->GetString()); | 
|   619  |   619  | 
|   620   const StunByteStringAttribute* username = |   620   const StunByteStringAttribute* username = | 
|   621       msg.GetByteString(STUN_ATTR_USERNAME); |   621       msg.GetByteString(STUN_ATTR_USERNAME); | 
|   622   ASSERT_TRUE(username != NULL); |   622   ASSERT_TRUE(username != nullptr); | 
|   623   EXPECT_EQ(kRfc5769SampleMsgUsername, username->GetString()); |   623   EXPECT_EQ(kRfc5769SampleMsgUsername, username->GetString()); | 
|   624  |   624  | 
|   625   // Actual M-I value checked in a later test. |   625   // Actual M-I value checked in a later test. | 
|   626   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != NULL); |   626   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != nullptr); | 
|   627  |   627  | 
|   628   // Fingerprint checked in a later test, but double-check the value here. |   628   // Fingerprint checked in a later test, but double-check the value here. | 
|   629   const StunUInt32Attribute* fingerprint = |   629   const StunUInt32Attribute* fingerprint = | 
|   630       msg.GetUInt32(STUN_ATTR_FINGERPRINT); |   630       msg.GetUInt32(STUN_ATTR_FINGERPRINT); | 
|   631   ASSERT_TRUE(fingerprint != NULL); |   631   ASSERT_TRUE(fingerprint != nullptr); | 
|   632   EXPECT_EQ(0xe57a3bcf, fingerprint->value()); |   632   EXPECT_EQ(0xe57a3bcf, fingerprint->value()); | 
|   633 } |   633 } | 
|   634  |   634  | 
|   635 // Read the RFC5389 fields from the RFC5769 sample STUN response. |   635 // Read the RFC5389 fields from the RFC5769 sample STUN response. | 
|   636 TEST_F(StunTest, ReadRfc5769ResponseMessage) { |   636 TEST_F(StunTest, ReadRfc5769ResponseMessage) { | 
|   637   StunMessage msg; |   637   StunMessage msg; | 
|   638   size_t size = ReadStunMessage(&msg, kRfc5769SampleResponse); |   638   size_t size = ReadStunMessage(&msg, kRfc5769SampleResponse); | 
|   639   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); |   639   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); | 
|   640   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, |   640   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, | 
|   641                          kStunTransactionIdLength); |   641                          kStunTransactionIdLength); | 
|   642  |   642  | 
|   643   const StunByteStringAttribute* software = |   643   const StunByteStringAttribute* software = | 
|   644       msg.GetByteString(STUN_ATTR_SOFTWARE); |   644       msg.GetByteString(STUN_ATTR_SOFTWARE); | 
|   645   ASSERT_TRUE(software != NULL); |   645   ASSERT_TRUE(software != nullptr); | 
|   646   EXPECT_EQ(kRfc5769SampleMsgServerSoftware, software->GetString()); |   646   EXPECT_EQ(kRfc5769SampleMsgServerSoftware, software->GetString()); | 
|   647  |   647  | 
|   648   const StunAddressAttribute* mapped_address = |   648   const StunAddressAttribute* mapped_address = | 
|   649       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |   649       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 
|   650   ASSERT_TRUE(mapped_address != NULL); |   650   ASSERT_TRUE(mapped_address != nullptr); | 
|   651   EXPECT_EQ(kRfc5769SampleMsgMappedAddress, mapped_address->GetAddress()); |   651   EXPECT_EQ(kRfc5769SampleMsgMappedAddress, mapped_address->GetAddress()); | 
|   652  |   652  | 
|   653   // Actual M-I and fingerprint checked in later tests. |   653   // Actual M-I and fingerprint checked in later tests. | 
|   654   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != NULL); |   654   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != nullptr); | 
|   655   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) != NULL); |   655   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) != nullptr); | 
|   656 } |   656 } | 
|   657  |   657  | 
|   658 // Read the RFC5389 fields from the RFC5769 sample STUN response for IPv6. |   658 // Read the RFC5389 fields from the RFC5769 sample STUN response for IPv6. | 
|   659 TEST_F(StunTest, ReadRfc5769ResponseMessageIPv6) { |   659 TEST_F(StunTest, ReadRfc5769ResponseMessageIPv6) { | 
|   660   StunMessage msg; |   660   StunMessage msg; | 
|   661   size_t size = ReadStunMessage(&msg, kRfc5769SampleResponseIPv6); |   661   size_t size = ReadStunMessage(&msg, kRfc5769SampleResponseIPv6); | 
|   662   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); |   662   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); | 
|   663   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, |   663   CheckStunTransactionID(msg, kRfc5769SampleMsgTransactionId, | 
|   664                          kStunTransactionIdLength); |   664                          kStunTransactionIdLength); | 
|   665  |   665  | 
|   666   const StunByteStringAttribute* software = |   666   const StunByteStringAttribute* software = | 
|   667       msg.GetByteString(STUN_ATTR_SOFTWARE); |   667       msg.GetByteString(STUN_ATTR_SOFTWARE); | 
|   668   ASSERT_TRUE(software != NULL); |   668   ASSERT_TRUE(software != nullptr); | 
|   669   EXPECT_EQ(kRfc5769SampleMsgServerSoftware, software->GetString()); |   669   EXPECT_EQ(kRfc5769SampleMsgServerSoftware, software->GetString()); | 
|   670  |   670  | 
|   671   const StunAddressAttribute* mapped_address = |   671   const StunAddressAttribute* mapped_address = | 
|   672       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |   672       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 
|   673   ASSERT_TRUE(mapped_address != NULL); |   673   ASSERT_TRUE(mapped_address != nullptr); | 
|   674   EXPECT_EQ(kRfc5769SampleMsgIPv6MappedAddress, mapped_address->GetAddress()); |   674   EXPECT_EQ(kRfc5769SampleMsgIPv6MappedAddress, mapped_address->GetAddress()); | 
|   675  |   675  | 
|   676   // Actual M-I and fingerprint checked in later tests. |   676   // Actual M-I and fingerprint checked in later tests. | 
|   677   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != NULL); |   677   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != nullptr); | 
|   678   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) != NULL); |   678   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) != nullptr); | 
|   679 } |   679 } | 
|   680  |   680  | 
|   681 // Read the RFC5389 fields from the RFC5769 sample STUN response with auth. |   681 // Read the RFC5389 fields from the RFC5769 sample STUN response with auth. | 
|   682 TEST_F(StunTest, ReadRfc5769RequestMessageLongTermAuth) { |   682 TEST_F(StunTest, ReadRfc5769RequestMessageLongTermAuth) { | 
|   683   StunMessage msg; |   683   StunMessage msg; | 
|   684   size_t size = ReadStunMessage(&msg, kRfc5769SampleRequestLongTermAuth); |   684   size_t size = ReadStunMessage(&msg, kRfc5769SampleRequestLongTermAuth); | 
|   685   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |   685   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|   686   CheckStunTransactionID(msg, kRfc5769SampleMsgWithAuthTransactionId, |   686   CheckStunTransactionID(msg, kRfc5769SampleMsgWithAuthTransactionId, | 
|   687                          kStunTransactionIdLength); |   687                          kStunTransactionIdLength); | 
|   688  |   688  | 
|   689   const StunByteStringAttribute* username = |   689   const StunByteStringAttribute* username = | 
|   690       msg.GetByteString(STUN_ATTR_USERNAME); |   690       msg.GetByteString(STUN_ATTR_USERNAME); | 
|   691   ASSERT_TRUE(username != NULL); |   691   ASSERT_TRUE(username != nullptr); | 
|   692   EXPECT_EQ(kRfc5769SampleMsgWithAuthUsername, username->GetString()); |   692   EXPECT_EQ(kRfc5769SampleMsgWithAuthUsername, username->GetString()); | 
|   693  |   693  | 
|   694   const StunByteStringAttribute* nonce = |   694   const StunByteStringAttribute* nonce = | 
|   695       msg.GetByteString(STUN_ATTR_NONCE); |   695       msg.GetByteString(STUN_ATTR_NONCE); | 
|   696   ASSERT_TRUE(nonce != NULL); |   696   ASSERT_TRUE(nonce != nullptr); | 
|   697   EXPECT_EQ(kRfc5769SampleMsgWithAuthNonce, nonce->GetString()); |   697   EXPECT_EQ(kRfc5769SampleMsgWithAuthNonce, nonce->GetString()); | 
|   698  |   698  | 
|   699   const StunByteStringAttribute* realm = |   699   const StunByteStringAttribute* realm = | 
|   700       msg.GetByteString(STUN_ATTR_REALM); |   700       msg.GetByteString(STUN_ATTR_REALM); | 
|   701   ASSERT_TRUE(realm != NULL); |   701   ASSERT_TRUE(realm != nullptr); | 
|   702   EXPECT_EQ(kRfc5769SampleMsgWithAuthRealm, realm->GetString()); |   702   EXPECT_EQ(kRfc5769SampleMsgWithAuthRealm, realm->GetString()); | 
|   703  |   703  | 
|   704   // No fingerprint, actual M-I checked in later tests. |   704   // No fingerprint, actual M-I checked in later tests. | 
|   705   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != NULL); |   705   ASSERT_TRUE(msg.GetByteString(STUN_ATTR_MESSAGE_INTEGRITY) != nullptr); | 
|   706   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) == NULL); |   706   ASSERT_TRUE(msg.GetUInt32(STUN_ATTR_FINGERPRINT) == nullptr); | 
|   707 } |   707 } | 
|   708  |   708  | 
|   709 // The RFC3489 packet in this test is the same as |   709 // The RFC3489 packet in this test is the same as | 
|   710 // kStunMessageWithIPv4MappedAddress, but with a different value where the |   710 // kStunMessageWithIPv4MappedAddress, but with a different value where the | 
|   711 // magic cookie was. |   711 // magic cookie was. | 
|   712 TEST_F(StunTest, ReadLegacyMessage) { |   712 TEST_F(StunTest, ReadLegacyMessage) { | 
|   713   unsigned char rfc3489_packet[sizeof(kStunMessageWithIPv4MappedAddress)]; |   713   unsigned char rfc3489_packet[sizeof(kStunMessageWithIPv4MappedAddress)]; | 
|   714   memcpy(rfc3489_packet, kStunMessageWithIPv4MappedAddress, |   714   memcpy(rfc3489_packet, kStunMessageWithIPv4MappedAddress, | 
|   715       sizeof(kStunMessageWithIPv4MappedAddress)); |   715       sizeof(kStunMessageWithIPv4MappedAddress)); | 
|   716   // Overwrite the magic cookie here. |   716   // Overwrite the magic cookie here. | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
|   737   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); |   737   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); | 
|   738   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); |   738   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); | 
|   739  |   739  | 
|   740   const StunAddressAttribute* addr = |   740   const StunAddressAttribute* addr = | 
|   741       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |   741       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 
|   742   CheckStunAddressAttribute(addr, STUN_ADDRESS_IPV6, |   742   CheckStunAddressAttribute(addr, STUN_ADDRESS_IPV6, | 
|   743                             kTestMessagePort1, test_address); |   743                             kTestMessagePort1, test_address); | 
|   744  |   744  | 
|   745   // Owner with a different transaction ID. |   745   // Owner with a different transaction ID. | 
|   746   msg2.SetTransactionID("ABCDABCDABCD"); |   746   msg2.SetTransactionID("ABCDABCDABCD"); | 
|   747   StunXorAddressAttribute addr2(STUN_ATTR_XOR_MAPPED_ADDRESS, 20, NULL); |   747   StunXorAddressAttribute addr2(STUN_ATTR_XOR_MAPPED_ADDRESS, 20, nullptr); | 
|   748   addr2.SetIP(addr->ipaddr()); |   748   addr2.SetIP(addr->ipaddr()); | 
|   749   addr2.SetPort(addr->port()); |   749   addr2.SetPort(addr->port()); | 
|   750   addr2.SetOwner(&msg2); |   750   addr2.SetOwner(&msg2); | 
|   751   // The internal IP address shouldn't change. |   751   // The internal IP address shouldn't change. | 
|   752   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); |   752   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); | 
|   753  |   753  | 
|   754   rtc::ByteBufferWriter correct_buf; |   754   rtc::ByteBufferWriter correct_buf; | 
|   755   rtc::ByteBufferWriter wrong_buf; |   755   rtc::ByteBufferWriter wrong_buf; | 
|   756   EXPECT_TRUE(addr->Write(&correct_buf)); |   756   EXPECT_TRUE(addr->Write(&correct_buf)); | 
|   757   EXPECT_TRUE(addr2.Write(&wrong_buf)); |   757   EXPECT_TRUE(addr2.Write(&wrong_buf)); | 
|   758   // But when written out, the buffers should look different. |   758   // But when written out, the buffers should look different. | 
|   759   ASSERT_NE(0, |   759   ASSERT_NE(0, | 
|   760             memcmp(correct_buf.Data(), wrong_buf.Data(), wrong_buf.Length())); |   760             memcmp(correct_buf.Data(), wrong_buf.Data(), wrong_buf.Length())); | 
|   761   // And when reading a known good value, the address should be wrong. |   761   // And when reading a known good value, the address should be wrong. | 
|   762   rtc::ByteBufferReader read_buf(correct_buf); |   762   rtc::ByteBufferReader read_buf(correct_buf); | 
|   763   addr2.Read(&read_buf); |   763   addr2.Read(&read_buf); | 
|   764   ASSERT_NE(addr->ipaddr(), addr2.ipaddr()); |   764   ASSERT_NE(addr->ipaddr(), addr2.ipaddr()); | 
|   765   addr2.SetIP(addr->ipaddr()); |   765   addr2.SetIP(addr->ipaddr()); | 
|   766   addr2.SetPort(addr->port()); |   766   addr2.SetPort(addr->port()); | 
|   767   // Try writing with no owner at all, should fail and write nothing. |   767   // Try writing with no owner at all, should fail and write nothing. | 
|   768   addr2.SetOwner(NULL); |   768   addr2.SetOwner(nullptr); | 
|   769   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); |   769   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); | 
|   770   wrong_buf.Clear(); |   770   wrong_buf.Clear(); | 
|   771   EXPECT_FALSE(addr2.Write(&wrong_buf)); |   771   EXPECT_FALSE(addr2.Write(&wrong_buf)); | 
|   772   ASSERT_EQ(0U, wrong_buf.Length()); |   772   ASSERT_EQ(0U, wrong_buf.Length()); | 
|   773 } |   773 } | 
|   774  |   774  | 
|   775 TEST_F(StunTest, SetIPv4XorAddressAttributeOwner) { |   775 TEST_F(StunTest, SetIPv4XorAddressAttributeOwner) { | 
|   776   // Unlike the IPv6XorAddressAttributeOwner test, IPv4 XOR address attributes |   776   // Unlike the IPv6XorAddressAttributeOwner test, IPv4 XOR address attributes | 
|   777   // should _not_ be affected by a change in owner. IPv4 XOR address uses the |   777   // should _not_ be affected by a change in owner. IPv4 XOR address uses the | 
|   778   // magic cookie value which is fixed. |   778   // magic cookie value which is fixed. | 
|   779   StunMessage msg; |   779   StunMessage msg; | 
|   780   StunMessage msg2; |   780   StunMessage msg2; | 
|   781   size_t size = ReadStunMessage(&msg, kStunMessageWithIPv4XorMappedAddress); |   781   size_t size = ReadStunMessage(&msg, kStunMessageWithIPv4XorMappedAddress); | 
|   782  |   782  | 
|   783   rtc::IPAddress test_address(kIPv4TestAddress1); |   783   rtc::IPAddress test_address(kIPv4TestAddress1); | 
|   784  |   784  | 
|   785   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); |   785   CheckStunHeader(msg, STUN_BINDING_RESPONSE, size); | 
|   786   CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |   786   CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 
|   787  |   787  | 
|   788   const StunAddressAttribute* addr = |   788   const StunAddressAttribute* addr = | 
|   789       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); |   789       msg.GetAddress(STUN_ATTR_XOR_MAPPED_ADDRESS); | 
|   790   CheckStunAddressAttribute(addr, STUN_ADDRESS_IPV4, |   790   CheckStunAddressAttribute(addr, STUN_ADDRESS_IPV4, | 
|   791                             kTestMessagePort3, test_address); |   791                             kTestMessagePort3, test_address); | 
|   792  |   792  | 
|   793   // Owner with a different transaction ID. |   793   // Owner with a different transaction ID. | 
|   794   msg2.SetTransactionID("ABCDABCDABCD"); |   794   msg2.SetTransactionID("ABCDABCDABCD"); | 
|   795   StunXorAddressAttribute addr2(STUN_ATTR_XOR_MAPPED_ADDRESS, 20, NULL); |   795   StunXorAddressAttribute addr2(STUN_ATTR_XOR_MAPPED_ADDRESS, 20, nullptr); | 
|   796   addr2.SetIP(addr->ipaddr()); |   796   addr2.SetIP(addr->ipaddr()); | 
|   797   addr2.SetPort(addr->port()); |   797   addr2.SetPort(addr->port()); | 
|   798   addr2.SetOwner(&msg2); |   798   addr2.SetOwner(&msg2); | 
|   799   // The internal IP address shouldn't change. |   799   // The internal IP address shouldn't change. | 
|   800   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); |   800   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); | 
|   801  |   801  | 
|   802   rtc::ByteBufferWriter correct_buf; |   802   rtc::ByteBufferWriter correct_buf; | 
|   803   rtc::ByteBufferWriter wrong_buf; |   803   rtc::ByteBufferWriter wrong_buf; | 
|   804   EXPECT_TRUE(addr->Write(&correct_buf)); |   804   EXPECT_TRUE(addr->Write(&correct_buf)); | 
|   805   EXPECT_TRUE(addr2.Write(&wrong_buf)); |   805   EXPECT_TRUE(addr2.Write(&wrong_buf)); | 
|   806   // The same address data should be written. |   806   // The same address data should be written. | 
|   807   ASSERT_EQ(0, |   807   ASSERT_EQ(0, | 
|   808             memcmp(correct_buf.Data(), wrong_buf.Data(), wrong_buf.Length())); |   808             memcmp(correct_buf.Data(), wrong_buf.Data(), wrong_buf.Length())); | 
|   809   // And an attribute should be able to un-XOR an address belonging to a message |   809   // And an attribute should be able to un-XOR an address belonging to a message | 
|   810   // with a different transaction ID. |   810   // with a different transaction ID. | 
|   811   rtc::ByteBufferReader read_buf(correct_buf); |   811   rtc::ByteBufferReader read_buf(correct_buf); | 
|   812   EXPECT_TRUE(addr2.Read(&read_buf)); |   812   EXPECT_TRUE(addr2.Read(&read_buf)); | 
|   813   ASSERT_EQ(addr->ipaddr(), addr2.ipaddr()); |   813   ASSERT_EQ(addr->ipaddr(), addr2.ipaddr()); | 
|   814  |   814  | 
|   815   // However, no owner is still an error, should fail and write nothing. |   815   // However, no owner is still an error, should fail and write nothing. | 
|   816   addr2.SetOwner(NULL); |   816   addr2.SetOwner(nullptr); | 
|   817   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); |   817   ASSERT_EQ(addr2.ipaddr(), addr->ipaddr()); | 
|   818   wrong_buf.Clear(); |   818   wrong_buf.Clear(); | 
|   819   EXPECT_FALSE(addr2.Write(&wrong_buf)); |   819   EXPECT_FALSE(addr2.Write(&wrong_buf)); | 
|   820 } |   820 } | 
|   821  |   821  | 
|   822 TEST_F(StunTest, CreateIPv6AddressAttribute) { |   822 TEST_F(StunTest, CreateIPv6AddressAttribute) { | 
|   823   rtc::IPAddress test_ip(kIPv6TestAddress2); |   823   rtc::IPAddress test_ip(kIPv6TestAddress2); | 
|   824  |   824  | 
|   825   StunAddressAttribute* addr = |   825   StunAddressAttribute* addr = | 
|   826       StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); |   826       StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS); | 
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   992 } |   992 } | 
|   993  |   993  | 
|   994 TEST_F(StunTest, ReadByteStringAttribute) { |   994 TEST_F(StunTest, ReadByteStringAttribute) { | 
|   995   StunMessage msg; |   995   StunMessage msg; | 
|   996   size_t size = ReadStunMessage(&msg, kStunMessageWithByteStringAttribute); |   996   size_t size = ReadStunMessage(&msg, kStunMessageWithByteStringAttribute); | 
|   997  |   997  | 
|   998   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |   998   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|   999   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); |   999   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); | 
|  1000   const StunByteStringAttribute* username = |  1000   const StunByteStringAttribute* username = | 
|  1001       msg.GetByteString(STUN_ATTR_USERNAME); |  1001       msg.GetByteString(STUN_ATTR_USERNAME); | 
|  1002   ASSERT_TRUE(username != NULL); |  1002   ASSERT_TRUE(username != nullptr); | 
|  1003   EXPECT_EQ(kTestUserName1, username->GetString()); |  1003   EXPECT_EQ(kTestUserName1, username->GetString()); | 
|  1004 } |  1004 } | 
|  1005  |  1005  | 
|  1006 TEST_F(StunTest, ReadPaddedByteStringAttribute) { |  1006 TEST_F(StunTest, ReadPaddedByteStringAttribute) { | 
|  1007   StunMessage msg; |  1007   StunMessage msg; | 
|  1008   size_t size = ReadStunMessage(&msg, |  1008   size_t size = ReadStunMessage(&msg, | 
|  1009                                 kStunMessageWithPaddedByteStringAttribute); |  1009                                 kStunMessageWithPaddedByteStringAttribute); | 
|  1010   ASSERT_NE(0U, size); |  1010   ASSERT_NE(0U, size); | 
|  1011   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |  1011   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|  1012   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); |  1012   CheckStunTransactionID(msg, kTestTransactionId2, kStunTransactionIdLength); | 
|  1013   const StunByteStringAttribute* username = |  1013   const StunByteStringAttribute* username = | 
|  1014       msg.GetByteString(STUN_ATTR_USERNAME); |  1014       msg.GetByteString(STUN_ATTR_USERNAME); | 
|  1015   ASSERT_TRUE(username != NULL); |  1015   ASSERT_TRUE(username != nullptr); | 
|  1016   EXPECT_EQ(kTestUserName2, username->GetString()); |  1016   EXPECT_EQ(kTestUserName2, username->GetString()); | 
|  1017 } |  1017 } | 
|  1018  |  1018  | 
|  1019 TEST_F(StunTest, ReadErrorCodeAttribute) { |  1019 TEST_F(StunTest, ReadErrorCodeAttribute) { | 
|  1020   StunMessage msg; |  1020   StunMessage msg; | 
|  1021   size_t size = ReadStunMessage(&msg, kStunMessageWithErrorAttribute); |  1021   size_t size = ReadStunMessage(&msg, kStunMessageWithErrorAttribute); | 
|  1022  |  1022  | 
|  1023   CheckStunHeader(msg, STUN_BINDING_ERROR_RESPONSE, size); |  1023   CheckStunHeader(msg, STUN_BINDING_ERROR_RESPONSE, size); | 
|  1024   CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); |  1024   CheckStunTransactionID(msg, kTestTransactionId1, kStunTransactionIdLength); | 
|  1025   const StunErrorCodeAttribute* errorcode = msg.GetErrorCode(); |  1025   const StunErrorCodeAttribute* errorcode = msg.GetErrorCode(); | 
|  1026   ASSERT_TRUE(errorcode != NULL); |  1026   ASSERT_TRUE(errorcode != nullptr); | 
|  1027   EXPECT_EQ(kTestErrorClass, errorcode->eclass()); |  1027   EXPECT_EQ(kTestErrorClass, errorcode->eclass()); | 
|  1028   EXPECT_EQ(kTestErrorNumber, errorcode->number()); |  1028   EXPECT_EQ(kTestErrorNumber, errorcode->number()); | 
|  1029   EXPECT_EQ(kTestErrorReason, errorcode->reason()); |  1029   EXPECT_EQ(kTestErrorReason, errorcode->reason()); | 
|  1030   EXPECT_EQ(kTestErrorCode, errorcode->code()); |  1030   EXPECT_EQ(kTestErrorCode, errorcode->code()); | 
|  1031 } |  1031 } | 
|  1032  |  1032  | 
|  1033 TEST_F(StunTest, ReadMessageWithAUInt16ListAttribute) { |  1033 TEST_F(StunTest, ReadMessageWithAUInt16ListAttribute) { | 
|  1034   StunMessage msg; |  1034   StunMessage msg; | 
|  1035   size_t size = ReadStunMessage(&msg, kStunMessageWithUInt16ListAttribute); |  1035   size_t size = ReadStunMessage(&msg, kStunMessageWithUInt16ListAttribute); | 
|  1036   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |  1036   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|  1037   const StunUInt16ListAttribute* types = msg.GetUnknownAttributes(); |  1037   const StunUInt16ListAttribute* types = msg.GetUnknownAttributes(); | 
|  1038   ASSERT_TRUE(types != NULL); |  1038   ASSERT_TRUE(types != nullptr); | 
|  1039   EXPECT_EQ(3U, types->Size()); |  1039   EXPECT_EQ(3U, types->Size()); | 
|  1040   EXPECT_EQ(0x1U, types->GetType(0)); |  1040   EXPECT_EQ(0x1U, types->GetType(0)); | 
|  1041   EXPECT_EQ(0x1000U, types->GetType(1)); |  1041   EXPECT_EQ(0x1000U, types->GetType(1)); | 
|  1042   EXPECT_EQ(0xAB0CU, types->GetType(2)); |  1042   EXPECT_EQ(0xAB0CU, types->GetType(2)); | 
|  1043 } |  1043 } | 
|  1044  |  1044  | 
|  1045 TEST_F(StunTest, ReadMessageWithAnUnknownAttribute) { |  1045 TEST_F(StunTest, ReadMessageWithAnUnknownAttribute) { | 
|  1046   StunMessage msg; |  1046   StunMessage msg; | 
|  1047   size_t size = ReadStunMessage(&msg, kStunMessageWithUnknownAttribute); |  1047   size_t size = ReadStunMessage(&msg, kStunMessageWithUnknownAttribute); | 
|  1048   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |  1048   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|  1049  |  1049  | 
|  1050   // Parsing should have succeeded and there should be a USERNAME attribute |  1050   // Parsing should have succeeded and there should be a USERNAME attribute | 
|  1051   const StunByteStringAttribute* username = |  1051   const StunByteStringAttribute* username = | 
|  1052       msg.GetByteString(STUN_ATTR_USERNAME); |  1052       msg.GetByteString(STUN_ATTR_USERNAME); | 
|  1053   ASSERT_TRUE(username != NULL); |  1053   ASSERT_TRUE(username != nullptr); | 
|  1054   EXPECT_EQ(kTestUserName2, username->GetString()); |  1054   EXPECT_EQ(kTestUserName2, username->GetString()); | 
|  1055 } |  1055 } | 
|  1056  |  1056  | 
|  1057 TEST_F(StunTest, ReadMessageWithOriginAttribute) { |  1057 TEST_F(StunTest, ReadMessageWithOriginAttribute) { | 
|  1058   StunMessage msg; |  1058   StunMessage msg; | 
|  1059   size_t size = ReadStunMessage(&msg, kStunMessageWithOriginAttribute); |  1059   size_t size = ReadStunMessage(&msg, kStunMessageWithOriginAttribute); | 
|  1060   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); |  1060   CheckStunHeader(msg, STUN_BINDING_REQUEST, size); | 
|  1061   const StunByteStringAttribute* origin = |  1061   const StunByteStringAttribute* origin = | 
|  1062       msg.GetByteString(STUN_ATTR_ORIGIN); |  1062       msg.GetByteString(STUN_ATTR_ORIGIN); | 
|  1063   ASSERT_TRUE(origin != NULL); |  1063   ASSERT_TRUE(origin != nullptr); | 
|  1064   EXPECT_EQ(kTestOrigin, origin->GetString()); |  1064   EXPECT_EQ(kTestOrigin, origin->GetString()); | 
|  1065 } |  1065 } | 
|  1066  |  1066  | 
|  1067 TEST_F(StunTest, WriteMessageWithAnErrorCodeAttribute) { |  1067 TEST_F(StunTest, WriteMessageWithAnErrorCodeAttribute) { | 
|  1068   StunMessage msg; |  1068   StunMessage msg; | 
|  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), | 
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1377   EXPECT_EQ("0123456789ab", msg.transaction_id()); |  1377   EXPECT_EQ("0123456789ab", msg.transaction_id()); | 
|  1378  |  1378  | 
|  1379   msg2.SetType(STUN_BINDING_REQUEST); |  1379   msg2.SetType(STUN_BINDING_REQUEST); | 
|  1380   msg2.SetTransactionID("0123456789ab"); |  1380   msg2.SetTransactionID("0123456789ab"); | 
|  1381  |  1381  | 
|  1382   in_addr legacy_in_addr; |  1382   in_addr legacy_in_addr; | 
|  1383   legacy_in_addr.s_addr = htonl(17U); |  1383   legacy_in_addr.s_addr = htonl(17U); | 
|  1384   rtc::IPAddress legacy_ip(legacy_in_addr); |  1384   rtc::IPAddress legacy_ip(legacy_in_addr); | 
|  1385  |  1385  | 
|  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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 != nullptr); | 
|  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   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 |