1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "device/fido/fido_transport_protocol.h"
6 
7 #include "base/notreached.h"
8 
9 namespace device {
10 
11 const char kUsbHumanInterfaceDevice[] = "usb";
12 const char kNearFieldCommunication[] = "nfc";
13 const char kBluetoothLowEnergy[] = "ble";
14 const char kCloudAssistedBluetoothLowEnergy[] = "cable";
15 const char kInternal[] = "internal";
16 
ConvertToFidoTransportProtocol(base::StringPiece protocol)17 base::Optional<FidoTransportProtocol> ConvertToFidoTransportProtocol(
18     base::StringPiece protocol) {
19   if (protocol == kUsbHumanInterfaceDevice)
20     return FidoTransportProtocol::kUsbHumanInterfaceDevice;
21   else if (protocol == kNearFieldCommunication)
22     return FidoTransportProtocol::kNearFieldCommunication;
23   else if (protocol == kBluetoothLowEnergy)
24     return FidoTransportProtocol::kBluetoothLowEnergy;
25   else if (protocol == kCloudAssistedBluetoothLowEnergy)
26     return FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy;
27   else if (protocol == kInternal)
28     return FidoTransportProtocol::kInternal;
29   else
30     return base::nullopt;
31 }
32 
COMPONENT_EXPORT(DEVICE_FIDO)33 COMPONENT_EXPORT(DEVICE_FIDO)
34 std::string ToString(FidoTransportProtocol protocol) {
35   switch (protocol) {
36     case FidoTransportProtocol::kUsbHumanInterfaceDevice:
37       return kUsbHumanInterfaceDevice;
38     case FidoTransportProtocol::kNearFieldCommunication:
39       return kNearFieldCommunication;
40     case FidoTransportProtocol::kBluetoothLowEnergy:
41       return kBluetoothLowEnergy;
42     case FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy:
43       return kCloudAssistedBluetoothLowEnergy;
44     case FidoTransportProtocol::kInternal:
45       return kInternal;
46     case FidoTransportProtocol::kAndroidAccessory:
47       // The Android accessory transport is not exposed to the outside world and
48       // is considered a flavour of caBLE.
49       return kCloudAssistedBluetoothLowEnergy;
50   }
51   NOTREACHED();
52   return "";
53 }
54 
55 }  // namespace device
56