Home | History | Annotate | Download | only in shill
      1 //
      2 // Copyright (C) 2014 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "shill/device_claimer.h"
     18 
     19 #include "shill/control_interface.h"
     20 #include "shill/device_info.h"
     21 
     22 using std::string;
     23 
     24 namespace shill {
     25 
     26 DeviceClaimer::DeviceClaimer(
     27     const std::string& service_name,
     28     DeviceInfo* device_info,
     29     bool default_claimer)
     30     : service_name_(service_name),
     31       device_info_(device_info),
     32       default_claimer_(default_claimer) {}
     33 
     34 DeviceClaimer::~DeviceClaimer() {
     35   // Release claimed devices if there is any.
     36   if (DevicesClaimed()) {
     37     for (const auto& device : claimed_device_names_) {
     38       device_info_->RemoveDeviceFromBlackList(device);
     39     }
     40     // Clear claimed device list.
     41     claimed_device_names_.clear();
     42   }
     43 }
     44 
     45 bool DeviceClaimer::Claim(const string& device_name, Error* error) {
     46   // Check if device is claimed already.
     47   if (claimed_device_names_.find(device_name) != claimed_device_names_.end()) {
     48     Error::PopulateAndLog(FROM_HERE, error, Error::kInvalidArguments,
     49                           "Device " + device_name +
     50                           " had already been claimed");
     51     return false;
     52   }
     53 
     54   // Add device to the black list.
     55   device_info_->AddDeviceToBlackList(device_name);
     56 
     57   claimed_device_names_.insert(device_name);
     58   released_device_names_.erase(device_name);
     59   return true;
     60 }
     61 
     62 bool DeviceClaimer::Release(const std::string& device_name,
     63                             Error* error) {
     64   // Make sure this is a device that have been claimed.
     65   if (claimed_device_names_.find(device_name) == claimed_device_names_.end()) {
     66     Error::PopulateAndLog(FROM_HERE, error, Error::kInvalidArguments,
     67                           "Device " + device_name +
     68                           " have not been claimed");
     69     return false;
     70   }
     71 
     72   // Remove the device from the black list.
     73   device_info_->RemoveDeviceFromBlackList(device_name);
     74 
     75   claimed_device_names_.erase(device_name);
     76   released_device_names_.insert(device_name);
     77   return true;
     78 }
     79 
     80 bool DeviceClaimer::DevicesClaimed() {
     81   return !claimed_device_names_.empty();
     82 }
     83 
     84 bool DeviceClaimer::IsDeviceReleased(const string& device_name) {
     85   return released_device_names_.find(device_name) !=
     86       released_device_names_.end();
     87 }
     88 
     89 }  // namespace shill
     90