OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_address_mismatch.h" | 5 #include "net/quic/quic_address_mismatch.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "net/base/ip_endpoint.h" | 8 #include "net/base/ip_endpoint.h" |
9 | 9 |
10 namespace net { | 10 namespace net { |
11 | 11 |
12 int GetAddressMismatch(const IPEndPoint& first_address, | 12 int GetAddressMismatch(const IPEndPoint& first_address, |
13 const IPEndPoint& second_address) { | 13 const IPEndPoint& second_address) { |
14 if (first_address.address().empty() || second_address.address().empty()) { | 14 if (first_address.address().empty() || second_address.address().empty()) { |
15 return -1; | 15 return -1; |
16 } | 16 } |
| 17 IPAddressNumber first_ip_address = first_address.address(); |
| 18 if (IsIPv4Mapped(first_ip_address)) { |
| 19 first_ip_address = ConvertIPv4MappedToIPv4(first_ip_address); |
| 20 } |
| 21 IPAddressNumber second_ip_address = second_address.address(); |
| 22 if (IsIPv4Mapped(second_ip_address)) { |
| 23 second_ip_address = ConvertIPv4MappedToIPv4(second_ip_address); |
| 24 } |
17 | 25 |
18 int sample; | 26 int sample; |
19 if (first_address.address() != second_address.address()) { | 27 if (first_ip_address != second_ip_address) { |
20 sample = QUIC_ADDRESS_MISMATCH_BASE; | 28 sample = QUIC_ADDRESS_MISMATCH_BASE; |
21 } else if (first_address.port() != second_address.port()) { | 29 } else if (first_address.port() != second_address.port()) { |
22 sample = QUIC_PORT_MISMATCH_BASE; | 30 sample = QUIC_PORT_MISMATCH_BASE; |
23 } else { | 31 } else { |
24 sample = QUIC_ADDRESS_AND_PORT_MATCH_BASE; | 32 sample = QUIC_ADDRESS_AND_PORT_MATCH_BASE; |
25 } | 33 } |
26 | 34 |
27 // Add an offset to |sample|: | 35 // Add an offset to |sample|: |
28 // V4_V4: add 0 | 36 // V4_V4: add 0 |
29 // V6_V6: add 1 | 37 // V6_V6: add 1 |
30 // V4_V6: add 2 | 38 // V4_V6: add 2 |
31 // V6_V4: add 3 | 39 // V6_V4: add 3 |
32 bool first_ipv4 = (first_address.address().size() == kIPv4AddressSize); | 40 bool first_ipv4 = (first_ip_address.size() == kIPv4AddressSize); |
33 bool second_ipv4 = (second_address.address().size() == kIPv4AddressSize); | 41 bool second_ipv4 = (second_ip_address.size() == kIPv4AddressSize); |
34 if (first_ipv4 != second_ipv4) { | 42 if (first_ipv4 != second_ipv4) { |
35 CHECK_EQ(sample, QUIC_ADDRESS_MISMATCH_BASE); | 43 CHECK_EQ(sample, QUIC_ADDRESS_MISMATCH_BASE); |
36 sample += 2; | 44 sample += 2; |
37 } | 45 } |
38 if (!first_ipv4) { | 46 if (!first_ipv4) { |
39 sample += 1; | 47 sample += 1; |
40 } | 48 } |
41 return sample; | 49 return sample; |
42 } | 50 } |
43 | 51 |
44 } // namespace net | 52 } // namespace net |
OLD | NEW |