| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromecast/metrics/metrics_util.h" |
| |
| #include "base/logging.h" |
| |
| namespace chromecast { |
| |
| uint32_t GetIPAddressFragmentForLogging(const net::IPAddressBytes& sender_ip) { |
| // Check if address is valid IPv4 or IPv6 byte array. If not then fill in |
| // with zeros as a default value. |
| if (sender_ip.size() != net::IPAddress::kIPv4AddressSize && |
| sender_ip.size() != net::IPAddress::kIPv6AddressSize) { |
| DVLOG(1) << "Sender IP is not IPv4 or IPv6; zeroing out sender fragment."; |
| return 0; |
| } |
| // Grab the last 2 bytes of sender IP address in network order and store as |
| // packed 16-bit integer. The unused bits in the final packed value should |
| // be empty. |
| uint32_t packed_address = 0; |
| if (sender_ip.size() >= 2) { |
| int i = sender_ip.size() - 1; |
| packed_address |= (sender_ip[i--]); |
| packed_address |= (sender_ip[i--] << 8); |
| } |
| |
| return packed_address; |
| } |
| |
| } // namespace chromecast |