chromium/ash/quick_pair/common/pair_failure.cc

// 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 "ash/quick_pair/common/pair_failure.h"

namespace ash {
namespace quick_pair {

std::ostream& operator<<(std::ostream& stream, PairFailure failure) {
  switch (failure) {
    case PairFailure::kCreateGattConnection:
      stream << "[Failed to create a GATT connection to the device]";
      break;
    case PairFailure::kGattServiceDiscovery:
      stream << "[Failed to find the expected GATT service]";
      break;
    case PairFailure::kGattServiceDiscoveryTimeout:
      stream << "[Timed out while starting discovery of GATT service]";
      break;
    case PairFailure::kDataEncryptorRetrieval:
      stream << "[Failed to retrieve the data encryptor]";
      break;
    case PairFailure::kKeyBasedPairingCharacteristicDiscovery:
      stream << "[Failed to find the Key-based pairing GATT characteristic]";
      break;
    case PairFailure::kPasskeyCharacteristicDiscovery:
      stream << "[Failed to find the Passkey GATT characteristic]";
      break;
    case PairFailure::kAccountKeyCharacteristicDiscovery:
      stream << "[Failed to find the Account Key GATT characteristic]";
      break;
    case PairFailure::kKeyBasedPairingCharacteristicNotifySession:
      stream << "[Failed to start a notify session on the Key-based pairing "
                "GATT characteristic]";
      break;
    case PairFailure::kPasskeyCharacteristicNotifySession:
      stream << "[Failed to start a notify session on the Passkey GATT "
                "characteristic]";
      break;
    case PairFailure::kKeyBasedPairingCharacteristicNotifySessionTimeout:
      stream << "[Timed out while starting a notify session on the Key-based "
                "pairing GATT characteristic]";
      break;
    case PairFailure::kPasskeyCharacteristicNotifySessionTimeout:
      stream << "[Timed out while starting a notify session on the Passkey "
                "GATT characteristic]";
      break;
    case PairFailure::kKeyBasedPairingCharacteristicWrite:
      stream
          << "[Failed to write to the Key-based pairing GATT characteristic]";
      break;
    case PairFailure::kPasskeyPairingCharacteristicWrite:
      stream << "[Failed to write to the Passkey GATT characteristic]";
      break;
    case PairFailure::kKeyBasedPairingResponseTimeout:
      stream << "[Timed out while waiting for the Key-based Pairing response]";
      break;
    case PairFailure::kPasskeyResponseTimeout:
      stream << "[Timed out while waiting for the Passkey response]";
      break;
    case PairFailure::kKeybasedPairingResponseDecryptFailure:
      stream << "[Failed to decrypt Key-based Pairing response]";
      break;
    case PairFailure::kIncorrectKeyBasedPairingResponseType:
      stream << "[Incorrect Key-based response message type]";
      break;
    case PairFailure::kPasskeyDecryptFailure:
      stream << "[Failed to decrypt Passkey response]";
      break;
    case PairFailure::kIncorrectPasskeyResponseType:
      stream << "[Incorrect Passkey response message type]";
      break;
    case PairFailure::kPasskeyMismatch:
      stream << "[Passkeys did not match]";
      break;
    case PairFailure::kPairingDeviceLost:
      stream << "[Potential pairing device lost during Passkey exchange]";
      break;
    case PairFailure::kPairingConnect:
      stream << "[Failed to bond to discovered device]";
      break;
    case PairFailure::kAddressConnect:
      stream << "[Failed to bond to device via public address]";
      break;
    case PairFailure::kBleDeviceLostMidPair:
      stream << "[[BLE device instance lost mid pair with classic device "
                "instance]]";
      break;
    case PairFailure::kCreateBondTimeout:
      stream << "[Timed out while attempting to create bond with device]";
      break;
    case PairFailure::kPairingDeviceLostBetweenGattConnectionAttempts:
      stream
          << "[Potential pairing device lost between GATT connection attempts]";
      break;
    case PairFailure::kConfirmPasskeyTimeout:
      stream << "[Timed out while waiting for confirm passkey event from "
                "Bluetooth adapter]";
      break;
    case PairFailure::kFailureToDisconnectGattBetweenRetries:
      stream << "[Failed to disconnect from GATT before retrying a failed GATT "
                "connection]";
      break;
    case PairFailure::kBluetoothDeviceFailureCreatingGattConnection:
      stream << "[Bluetooth platform layer has failed to create a GATT "
                "connection. This is not a complete failure, and Fast Pair may "
                "retry.]";
      break;
    case PairFailure::kDisconnectResponseTimeout:
      stream << "[Timed out while waiting for a response after attempt to "
                "disconnect]";
      break;
    case PairFailure::kFailedToConnectAfterPairing:
      stream << "[Failed to connect to discovered device after pairing when "
                "the device is known to the adapter.]";
      break;
    case PairFailure::kAdditionalDataCharacteristicWrite:
      stream << "[Failed to write to Additional Data GATT characteristic.]";
      break;
    case PairFailure::kAdditionalDataCharacteristicDiscovery:
      stream << "[Failed to find the Additional Data characteristic.]";
      break;
    case PairFailure::kAdditionalDataCharacteristicWriteTimeout:
      stream << "[Timed out while writing to Additional Data characteristic.]";
      break;
  }

  return stream;
}

}  // namespace quick_pair
}  // namespace ash