| // |
| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #include "shill/device_claimer.h" |
| |
| #include "shill/control_interface.h" |
| #include "shill/device_info.h" |
| |
| using std::string; |
| |
| namespace shill { |
| |
| DeviceClaimer::DeviceClaimer( |
| const std::string& service_name, |
| DeviceInfo* device_info, |
| bool default_claimer) |
| : service_name_(service_name), |
| device_info_(device_info), |
| default_claimer_(default_claimer) {} |
| |
| DeviceClaimer::~DeviceClaimer() { |
| // Release claimed devices if there is any. |
| if (DevicesClaimed()) { |
| for (const auto& device : claimed_device_names_) { |
| device_info_->RemoveDeviceFromBlackList(device); |
| } |
| // Clear claimed device list. |
| claimed_device_names_.clear(); |
| } |
| } |
| |
| bool DeviceClaimer::Claim(const string& device_name, Error* error) { |
| // Check if device is claimed already. |
| if (claimed_device_names_.find(device_name) != claimed_device_names_.end()) { |
| Error::PopulateAndLog(FROM_HERE, error, Error::kInvalidArguments, |
| "Device " + device_name + |
| " had already been claimed"); |
| return false; |
| } |
| |
| // Add device to the black list. |
| device_info_->AddDeviceToBlackList(device_name); |
| |
| claimed_device_names_.insert(device_name); |
| released_device_names_.erase(device_name); |
| return true; |
| } |
| |
| bool DeviceClaimer::Release(const std::string& device_name, |
| Error* error) { |
| // Make sure this is a device that have been claimed. |
| if (claimed_device_names_.find(device_name) == claimed_device_names_.end()) { |
| Error::PopulateAndLog(FROM_HERE, error, Error::kInvalidArguments, |
| "Device " + device_name + |
| " have not been claimed"); |
| return false; |
| } |
| |
| // Remove the device from the black list. |
| device_info_->RemoveDeviceFromBlackList(device_name); |
| |
| claimed_device_names_.erase(device_name); |
| released_device_names_.insert(device_name); |
| return true; |
| } |
| |
| bool DeviceClaimer::DevicesClaimed() { |
| return !claimed_device_names_.empty(); |
| } |
| |
| bool DeviceClaimer::IsDeviceReleased(const string& device_name) { |
| return released_device_names_.find(device_name) != |
| released_device_names_.end(); |
| } |
| |
| } // namespace shill |