1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2014 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 167e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 177e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#ifndef SHILL_DEVICE_CLAIMER_H_ 187e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#define SHILL_DEVICE_CLAIMER_H_ 197e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 207e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#include <set> 217e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#include <string> 227e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 23f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu#include <base/callback.h> 24f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu 257e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#include "shill/error.h" 26f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu#include "shill/rpc_service_watcher_interface.h" 277e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 287e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiunamespace shill { 297e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 30f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiuclass ControlInterface; 317e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiuclass DeviceInfo; 327e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 331d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu// Provide an abstraction for remote service to claim/release devices 348a3f68edbcf7fe59380609588787baa54cbd9bddSamuel Tan// from/to shill. 357e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiuclass DeviceClaimer { 367e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu public: 37f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu DeviceClaimer(const std::string& service_name, 38f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu DeviceInfo* device_info, 39f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu bool default_claimer); 407e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu virtual ~DeviceClaimer(); 417e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 42a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart virtual bool Claim(const std::string& device_name, Error* error); 43a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart virtual bool Release(const std::string& device_name, Error* error); 447e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 451d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // Return true if there are devices claimed by this claimer, false 467e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu // otherwise. 477e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu virtual bool DevicesClaimed(); 487e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 491d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // Return true if the specified device is released by this claimer, false 501d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // otherwise. 51a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart virtual bool IsDeviceReleased(const std::string& device_name); 521d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu 53f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu const std::string& name() const { return service_name_; } 547e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 551d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu virtual bool default_claimer() const { return default_claimer_; } 561d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu 57a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart const std::set<std::string>& claimed_device_names() const { 58babfe5a5e1f7b11a70fdf616b8479166416810c9Garret Kelly return claimed_device_names_; 59babfe5a5e1f7b11a70fdf616b8479166416810c9Garret Kelly } 60babfe5a5e1f7b11a70fdf616b8479166416810c9Garret Kelly 617e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu private: 62f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu // Watcher for monitoring the remote RPC service of the claimer. 63f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu std::unique_ptr<RPCServiceWatcherInterface> service_watcher_; 647e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu // The name of devices that have been claimed by this claimer. 657e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu std::set<std::string> claimed_device_names_; 661d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // The name of devices that have been released by this claimer. 671d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu std::set<std::string> released_device_names_; 68f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu // Service name of the claimer. 69f75ac09391ad80aa6b6db0c2b92a99732233e096Peter Qiu std::string service_name_; 707e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 71a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart DeviceInfo* device_info_; 727e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 731d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // Flag indicating if this is the default claimer. When set to true, this 741d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu // claimer will only be deleted when shill terminates. 751d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu bool default_claimer_; 761d499ed2d5eede24f55c7f6b8aaba06136ef4f22Peter Qiu 777e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu DISALLOW_COPY_AND_ASSIGN(DeviceClaimer); 787e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu}; 797e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 807e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu} // namespace shill 817e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu 827e8b8ee34816575b9059dd041ef29f91fe1d15c8Peter Qiu#endif // SHILL_DEVICE_CLAIMER_H_ 83