11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2013 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/fake_bluetooth_profile_manager_client.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <map>
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string>
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/fake_bluetooth_profile_service_provider.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "dbus/bus.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "dbus/message.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "dbus/object_path.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "dbus/object_proxy.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/cros_system_api/dbus/service_constants.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromeos {
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char FakeBluetoothProfileManagerClient::kL2capUuid[] =
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    "4d995052-33cc-4fdf-b446-75f32942a076";
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char FakeBluetoothProfileManagerClient::kRfcommUuid[] =
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    "3f6d6dbf-a6ad-45fc-9653-47dc912ef70e";
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFakeBluetoothProfileManagerClient::FakeBluetoothProfileManagerClient() {
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFakeBluetoothProfileManagerClient::~FakeBluetoothProfileManagerClient() {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeBluetoothProfileManagerClient::Init(dbus::Bus* bus) {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeBluetoothProfileManagerClient::RegisterProfile(
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const dbus::ObjectPath& profile_path,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& uuid,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const Options& options,
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::Closure& callback,
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ErrorCallback& error_callback) {
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VLOG(1) << "RegisterProfile: " << profile_path.value() << ": " << uuid;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // check options for channel & psm
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path);
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (iter == service_provider_map_.end()) {
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments,
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       "No profile created");
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else {
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ProfileMap::iterator piter = profile_map_.find(uuid);
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (piter != profile_map_.end()) {
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      error_callback.Run(bluetooth_profile_manager::kErrorAlreadyExists,
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         "Profile already registered");
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    } else {
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      profile_map_[uuid] = profile_path;
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      callback.Run();
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeBluetoothProfileManagerClient::UnregisterProfile(
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const dbus::ObjectPath& profile_path,
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::Closure& callback,
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ErrorCallback& error_callback) {
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VLOG(1) << "UnregisterProfile: " << profile_path.value();
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path);
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (iter == service_provider_map_.end()) {
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments,
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       "Profile not registered");
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else {
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for (ProfileMap::iterator piter = profile_map_.begin();
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         piter != profile_map_.end(); ++piter) {
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (piter->second == profile_path) {
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        profile_map_.erase(piter);
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      }
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    callback.Run();
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeBluetoothProfileManagerClient::RegisterProfileServiceProvider(
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    FakeBluetoothProfileServiceProvider* service_provider) {
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  service_provider_map_[service_provider->object_path_] = service_provider;
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeBluetoothProfileManagerClient::UnregisterProfileServiceProvider(
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    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
97FakeBluetoothProfileServiceProvider*
98FakeBluetoothProfileManagerClient::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