blob: 731b871f1fc114e2a4610d9ca3c9cfccfdc60f43 [file] [log] [blame]
// Copyright 2018 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 "chromeos/services/secure_channel/connection_attempt_details.h"
#include "base/logging.h"
#include "chromeos/components/multidevice/remote_device_ref.h"
namespace chromeos {
namespace secure_channel {
ConnectionAttemptDetails::ConnectionAttemptDetails(
const DeviceIdPair& device_id_pair,
ConnectionMedium connection_medium,
ConnectionRole connection_role)
: device_id_pair_(device_id_pair),
connection_medium_(connection_medium),
connection_role_(connection_role) {}
ConnectionAttemptDetails::ConnectionAttemptDetails(
const std::string& remote_device_id,
const std::string& local_device_id,
ConnectionMedium connection_medium,
ConnectionRole connection_role)
: ConnectionAttemptDetails(DeviceIdPair(remote_device_id, local_device_id),
connection_medium,
connection_role) {}
ConnectionAttemptDetails::~ConnectionAttemptDetails() = default;
ConnectionDetails ConnectionAttemptDetails::GetAssociatedConnectionDetails()
const {
return ConnectionDetails(remote_device_id(), connection_medium());
}
bool ConnectionAttemptDetails::CorrespondsToConnectionDetails(
const ConnectionDetails& connection_details) const {
return connection_details == GetAssociatedConnectionDetails();
}
bool ConnectionAttemptDetails::operator==(
const ConnectionAttemptDetails& other) const {
return device_id_pair() == other.device_id_pair() &&
connection_medium() == other.connection_medium() &&
connection_role() == other.connection_role();
}
bool ConnectionAttemptDetails::operator!=(
const ConnectionAttemptDetails& other) const {
return !(*this == other);
}
bool ConnectionAttemptDetails::operator<(
const ConnectionAttemptDetails& other) const {
if (device_id_pair() != other.device_id_pair())
return device_id_pair() < other.device_id_pair();
// Arbitrarily choose the listener role as less than the initiator role.
if (connection_role() != other.connection_role())
return connection_role() == ConnectionRole::kListenerRole;
// Currently, there is only one ConnectionMedium type.
DCHECK(connection_medium() == other.connection_medium());
return false;
}
std::ostream& operator<<(std::ostream& stream,
const ConnectionAttemptDetails& details) {
stream << "{remote_device_id: \""
<< multidevice::RemoteDeviceRef::TruncateDeviceIdForLogs(
details.remote_device_id())
<< "\", local_device_id: \""
<< multidevice::RemoteDeviceRef::TruncateDeviceIdForLogs(
details.local_device_id())
<< "\", connection_role: \"" << details.connection_role() << "\", "
<< "connection_medium: \"" << details.connection_medium() << "\"}";
return stream;
}
} // namespace secure_channel
} // namespace chromeos