1 // Copyright (c) 2013 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 "chromeos/dbus/fake_bluetooth_profile_manager_client.h" 6 7 #include <map> 8 #include <string> 9 10 #include "base/bind.h" 11 #include "base/logging.h" 12 #include "chromeos/dbus/fake_bluetooth_profile_service_provider.h" 13 #include "dbus/bus.h" 14 #include "dbus/message.h" 15 #include "dbus/object_path.h" 16 #include "dbus/object_proxy.h" 17 #include "third_party/cros_system_api/dbus/service_constants.h" 18 19 namespace chromeos { 20 21 const char FakeBluetoothProfileManagerClient::kL2capUuid[] = 22 "4d995052-33cc-4fdf-b446-75f32942a076"; 23 const char FakeBluetoothProfileManagerClient::kRfcommUuid[] = 24 "3f6d6dbf-a6ad-45fc-9653-47dc912ef70e"; 25 26 FakeBluetoothProfileManagerClient::FakeBluetoothProfileManagerClient() { 27 } 28 29 FakeBluetoothProfileManagerClient::~FakeBluetoothProfileManagerClient() { 30 } 31 32 void FakeBluetoothProfileManagerClient::Init(dbus::Bus* bus) { 33 } 34 35 void FakeBluetoothProfileManagerClient::RegisterProfile( 36 const dbus::ObjectPath& profile_path, 37 const std::string& uuid, 38 const Options& options, 39 const base::Closure& callback, 40 const ErrorCallback& error_callback) { 41 VLOG(1) << "RegisterProfile: " << profile_path.value() << ": " << uuid; 42 43 // check options for channel & psm 44 45 ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path); 46 if (iter == service_provider_map_.end()) { 47 error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments, 48 "No profile created"); 49 } else { 50 ProfileMap::iterator piter = profile_map_.find(uuid); 51 if (piter != profile_map_.end()) { 52 error_callback.Run(bluetooth_profile_manager::kErrorAlreadyExists, 53 "Profile already registered"); 54 } else { 55 profile_map_[uuid] = profile_path; 56 callback.Run(); 57 } 58 } 59 } 60 61 void FakeBluetoothProfileManagerClient::UnregisterProfile( 62 const dbus::ObjectPath& profile_path, 63 const base::Closure& callback, 64 const ErrorCallback& error_callback) { 65 VLOG(1) << "UnregisterProfile: " << profile_path.value(); 66 67 ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path); 68 if (iter != service_provider_map_.end()) { 69 error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments, 70 "Profile still registered"); 71 } else { 72 for (ProfileMap::iterator piter = profile_map_.begin(); 73 piter != profile_map_.end(); ++piter) { 74 if (piter->second == profile_path) { 75 profile_map_.erase(piter); 76 break; 77 } 78 } 79 80 callback.Run(); 81 } 82 } 83 84 void FakeBluetoothProfileManagerClient::RegisterProfileServiceProvider( 85 FakeBluetoothProfileServiceProvider* service_provider) { 86 service_provider_map_[service_provider->object_path_] = service_provider; 87 } 88 89 void FakeBluetoothProfileManagerClient::UnregisterProfileServiceProvider( 90 FakeBluetoothProfileServiceProvider* service_provider) { 91 ServiceProviderMap::iterator iter = 92 service_provider_map_.find(service_provider->object_path_); 93 if (iter != service_provider_map_.end() && iter->second == service_provider) 94 service_provider_map_.erase(iter); 95 } 96 97 FakeBluetoothProfileServiceProvider* 98 FakeBluetoothProfileManagerClient::GetProfileServiceProvider( 99 const std::string& uuid) { 100 ProfileMap::iterator iter = profile_map_.find(uuid); 101 if (iter == profile_map_.end()) 102 return NULL; 103 return service_provider_map_[iter->second]; 104 } 105 106 } // namespace chromeos 107