// 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 #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( 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(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