| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/nqe/network_id.h" |
| |
| #include <tuple> |
| |
| #include "base/base64.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "net/nqe/proto/network_id_proto.pb.h" |
| |
| namespace net { |
| namespace nqe { |
| namespace internal { |
| |
| // static |
| NetworkID NetworkID::FromString(const std::string& network_id) { |
| std::string base64_decoded; |
| if (!base::Base64Decode(network_id, &base64_decoded)) { |
| return NetworkID(NetworkChangeNotifier::CONNECTION_UNKNOWN, std::string(), |
| INT32_MIN); |
| } |
| |
| NetworkIDProto network_id_proto; |
| if (!network_id_proto.ParseFromString(base64_decoded)) { |
| return NetworkID(NetworkChangeNotifier::CONNECTION_UNKNOWN, std::string(), |
| INT32_MIN); |
| } |
| |
| return NetworkID(static_cast<NetworkChangeNotifier::ConnectionType>( |
| network_id_proto.connection_type()), |
| network_id_proto.id(), network_id_proto.signal_strength()); |
| } |
| |
| NetworkID::NetworkID(NetworkChangeNotifier::ConnectionType type, |
| const std::string& id, |
| int32_t signal_strength) |
| : type(type), id(id), signal_strength(signal_strength) { |
| // A valid value of |signal_strength| must be between 0 and 4 (both |
| // inclusive). |
| DCHECK((0 <= signal_strength && 4 >= signal_strength) || |
| (INT32_MIN == signal_strength)); |
| } |
| |
| NetworkID::NetworkID(const NetworkID& other) = default; |
| |
| NetworkID::~NetworkID() = default; |
| |
| bool NetworkID::operator==(const NetworkID& other) const { |
| return type == other.type && id == other.id && |
| signal_strength == other.signal_strength; |
| } |
| |
| bool NetworkID::operator!=(const NetworkID& other) const { |
| return !operator==(other); |
| } |
| |
| NetworkID& NetworkID::operator=(const NetworkID& other) = default; |
| |
| // Overloaded to support ordered collections. |
| bool NetworkID::operator<(const NetworkID& other) const { |
| return std::tie(type, id, signal_strength) < |
| std::tie(other.type, other.id, other.signal_strength); |
| } |
| |
| std::string NetworkID::ToString() const { |
| NetworkIDProto network_id_proto; |
| network_id_proto.set_connection_type(static_cast<int>(type)); |
| network_id_proto.set_id(id); |
| network_id_proto.set_signal_strength(signal_strength); |
| |
| std::string serialized_network_id; |
| if (!network_id_proto.SerializeToString(&serialized_network_id)) |
| return ""; |
| |
| std::string base64_encoded; |
| base::Base64Encode(serialized_network_id, &base64_encoded); |
| |
| return base64_encoded; |
| } |
| |
| } // namespace internal |
| } // namespace nqe |
| } // namespace net |