1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2015 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// 1655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 1755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include "shill/dbus/chromeos_supplicant_interface_proxy.h" 1855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 1955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include <string> 2055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 2155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include <base/bind.h> 2255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 2355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include "shill/logging.h" 2455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include "shill/supplicant/supplicant_event_delegate_interface.h" 2555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu#include "shill/supplicant/wpa_supplicant.h" 2655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 2755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuusing std::string; 2855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 2955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiunamespace shill { 3055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 3155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiunamespace Logging { 3255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiustatic auto kModuleLogScope = ScopeLogger::kDBus; 3355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiustatic string ObjectID(const dbus::ObjectPath* p) { return p->value(); } 3455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 3555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 36d0f54b608798f230eee2e79fd2130cae2f8e70cfPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kInterfaceName[] = 37d0f54b608798f230eee2e79fd2130cae2f8e70cfPeter Qiu "fi.w1.wpa_supplicant1.Interface"; 3855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertyDisableHighBitrates[] = 3955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu "DisableHighBitrates"; 4055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertyFastReauth[] = 4155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu "FastReauth"; 4255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertyRoamThreshold[] = 4355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu "RoamThreshold"; 4455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertyScan[] = "Scan"; 4555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertyScanInterval[] = 4655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu "ScanInterval"; 4755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuconst char ChromeosSupplicantInterfaceProxy::kPropertySchedScan[] = "SchedScan"; 4855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 4955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter QiuChromeosSupplicantInterfaceProxy::PropertySet::PropertySet( 5055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu dbus::ObjectProxy* object_proxy, 5155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const std::string& interface_name, 5255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const PropertyChangedCallback& callback) 5355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu : dbus::PropertySet(object_proxy, interface_name, callback) { 5455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertyDisableHighBitrates, &disable_high_bitrates); 5555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertyFastReauth, &fast_reauth); 5655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertyRoamThreshold, &roam_threshold); 5755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertyScan, &scan); 5855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertyScanInterval, &scan_interval); 5955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu RegisterProperty(kPropertySchedScan, &sched_scan); 6055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 6155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 6255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter QiuChromeosSupplicantInterfaceProxy::ChromeosSupplicantInterfaceProxy( 6355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const scoped_refptr<dbus::Bus>& bus, 6455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const std::string& object_path, 6555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SupplicantEventDelegateInterface* delegate) 6655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu : interface_proxy_( 6755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu new fi::w1::wpa_supplicant1::InterfaceProxy( 6855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu bus, 6955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu WPASupplicant::kDBusAddr, 7055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu dbus::ObjectPath(object_path))), 7155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_(delegate) { 72c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu // Register properites. 73c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu properties_.reset( 74c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu new PropertySet( 75c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu interface_proxy_->GetObjectProxy(), 76d0f54b608798f230eee2e79fd2130cae2f8e70cfPeter Qiu kInterfaceName, 77c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::OnPropertyChanged, 78c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu weak_factory_.GetWeakPtr()))); 79c34da84ef49b32c27c879c3d37831c7970a8538bPeter Qiu 8055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // Register signal handlers. 8155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu dbus::ObjectProxy::OnConnectedCallback on_connected_callback = 8255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::OnSignalConnected, 8355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()); 8455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterScanDoneSignalHandler( 8555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::ScanDone, 8655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 8755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 8855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterBSSAddedSignalHandler( 8955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::BSSAdded, 9055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 9155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 9255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterBSSRemovedSignalHandler( 9355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::BSSRemoved, 9455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 9555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 9655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterBlobAddedSignalHandler( 9755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::BlobAdded, 9855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 9955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 10055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterBlobRemovedSignalHandler( 10155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::BlobRemoved, 10255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 10355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 10455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterCertificationSignalHandler( 10555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::Certification, 10655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 10755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 10855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterEAPSignalHandler( 10955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::EAP, 11055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 11155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 11255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterNetworkAddedSignalHandler( 11355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::NetworkAdded, 11455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 11555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 11655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterNetworkRemovedSignalHandler( 11755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::NetworkRemoved, 11855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 11955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 12055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterNetworkSelectedSignalHandler( 12155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::NetworkSelected, 12255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 12355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 12455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterPropertiesChangedSignalHandler( 12555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::PropertiesChanged, 12655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 12755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 12855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu interface_proxy_->RegisterTDLSDiscoverResponseSignalHandler( 12955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu base::Bind(&ChromeosSupplicantInterfaceProxy::TDLSDiscoverResponse, 13055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu weak_factory_.GetWeakPtr()), 13155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu on_connected_callback); 13255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 13355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // Connect property signals and initialize cached values. Based on 13455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // recommendations from src/dbus/property.h. 13555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu properties_->ConnectSignals(); 13655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu properties_->GetAll(); 13755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 13855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 139a252f5be9870291e800ce2ffa1d6f6b4bbb32258Peter QiuChromeosSupplicantInterfaceProxy::~ChromeosSupplicantInterfaceProxy() { 140a252f5be9870291e800ce2ffa1d6f6b4bbb32258Peter Qiu interface_proxy_->ReleaseObjectProxy(base::Bind(&base::DoNothing)); 141a252f5be9870291e800ce2ffa1d6f6b4bbb32258Peter Qiu} 14255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 14355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::AddNetwork(const KeyValueStore& args, 14455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu string* network) { 14555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 14603e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::VariantDictionary dict; 14755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore::ConvertToVariantDictionary(args, &dict); 14855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu dbus::ObjectPath path; 14903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 15055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->AddNetwork(dict, &path, &error)) { 15155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to add network: " 15255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 15355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 15455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 1553b86eb2bd80b06ccf240368375e78718d94a3a7fPeter Qiu *network = path.value(); 15655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 15755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 15855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 15955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::EnableHighBitrates() { 16055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 16182847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 16203e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 16355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->EnableHighBitrates(&error)) { 16455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to enable high bitrates: " 16555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 16655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 16755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 16882847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 16955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 17055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 17155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 17255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::EAPLogoff() { 17355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 17403e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 17555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->EAPLogoff(&error)) { 17655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to EPA logoff " 17755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 17855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 17955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 18055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 18155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 18255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 18355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::EAPLogon() { 18455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 18503e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 18655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->EAPLogon(&error)) { 18755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to EAP logon: " 18855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 18955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 19055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 19155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 19255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 19355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 19455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::Disconnect() { 19555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 19603e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 19755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->Disconnect(&error)) { 19855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to disconnect: " 19955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 20055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 20155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 20255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 20355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 20455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 20555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::FlushBSS(const uint32_t& age) { 20655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 20703e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 20855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->FlushBSS(age, &error)) { 20955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to flush BSS: " 21055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 21155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 21255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 21355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 21455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 21555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 21655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::NetworkReply(const string& network, 21755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const string& field, 21855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const string& value) { 21955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ 22055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << " network: " << network << " field: " << field << " value: " << value; 22103e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 22255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->NetworkReply(dbus::ObjectPath(network), 22355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu field, 22455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu value, 22555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu &error)) { 22655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to network reply: " 22755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 22855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 229d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang } 230d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang return true; 231d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang} 232d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang 233d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wangbool ChromeosSupplicantInterfaceProxy::Roam(const string& addr) { 234d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 23582847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 23603e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 237d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang if (!interface_proxy_->Roam(addr, &error)) { 238d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang LOG(ERROR) << "Failed to Roam: " 239d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang << error->GetCode() << " " << error->GetMessage(); 240d945aeaa7e5343049502e2e9a707b55008e78a11Ningyuan Wang return false; 24155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 24282847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 24355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 24455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 24555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 24655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::Reassociate() { 24755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 24803e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 24955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->Reassociate(&error)) { 25055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to reassociate: " 25155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 25255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 25355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 25455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 25555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 25655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 25755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::Reattach() { 25855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 25903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 26055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->Reattach(&error)) { 26155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to reattach: " 26255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 26355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 26455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 26555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 26655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 26755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 26855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::RemoveAllNetworks() { 26955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 27003e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 27155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->RemoveAllNetworks(&error)) { 27255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to remove all networks: " 27355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 27455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 27555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 27655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 27755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 27855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 27955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::RemoveNetwork(const string& network) { 28055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << network; 28103e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 28255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->RemoveNetwork(dbus::ObjectPath(network), 28355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu &error)) { 28455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to remove network: " 28555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 28655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // RemoveNetwork can fail with three different errors. 28755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // 28855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // If RemoveNetwork fails with a NetworkUnknown error, supplicant has 28955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // already removed the network object, so return true as if 29055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // RemoveNetwork removes the network object successfully. 29155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // 29255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // As shill always passes a valid network object path, RemoveNetwork 29355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // should not fail with an InvalidArgs error. Return false in such case 29455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // as something weird may have happened. Similarly, return false in case 29555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // of an UnknownError. 29655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (error->GetCode() != WPASupplicant::kErrorNetworkUnknown) { 29755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 29855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 29955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 30055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 30155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 30255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 30355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::Scan(const KeyValueStore& args) { 30455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 30503e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::VariantDictionary dict; 30655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore::ConvertToVariantDictionary(args, &dict); 30703e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 30855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->Scan(dict, &error)) { 30955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to scan: " 31055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 31155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 31255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 31355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 31455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 31555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 31655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SelectNetwork(const string& network) { 31755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << network; 31803e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 31955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->SelectNetwork(dbus::ObjectPath(network), &error)) { 32055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to select network: " 32155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 32255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 32355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 32455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 32555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 32655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 32755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetHT40Enable(const string& network, 32855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu bool enable) { 32955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ 33055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << " network: " << network << " enable: " << enable; 33182847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if defined(__ANDROID__) 33203e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 33355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->SetHT40Enable(dbus::ObjectPath(network), 33455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu enable, 33555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu &error)) { 33655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to set HT40 enable: " 33755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 33855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 33955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 34082847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 34155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 34255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 34355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 34455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::TDLSDiscover(const string& peer) { 34555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << peer; 34603e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 34755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->TDLSDiscover(peer, &error)) { 34855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to perform TDLS discover: " 34955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 35055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 35155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 35255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 35355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 35455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 35555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::TDLSSetup(const string& peer) { 35655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << peer; 35703e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 35855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->TDLSSetup(peer, &error)) { 35955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to perform TDLS setup: " 36055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 36155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 36255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 36355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 36455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 36555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 36655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::TDLSStatus(const string& peer, 36755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu string* status) { 36855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << peer; 36903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 37055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->TDLSStatus(peer, status, &error)) { 37155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to retrieve TDLS status: " 37255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 37355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 37455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 37555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 37655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 37755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 37855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::TDLSTeardown(const string& peer) { 37955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << peer; 38003e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::ErrorPtr error; 38155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!interface_proxy_->TDLSTeardown(peer, &error)) { 38255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to perform TDLS teardown: " 38355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << error->GetCode() << " " << error->GetMessage(); 38455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return false; 38555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 38655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 38755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 38855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 38955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetFastReauth(bool enabled) { 39055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << enabled; 39182847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 39210a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->fast_reauth.SetAndBlock(enabled)) { 39310a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << enabled; 39410a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 39510a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 39682847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 39755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 39855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 39955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 40055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetRoamThreshold(uint16_t threshold) { 40155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << threshold; 40282847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 40310a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->roam_threshold.SetAndBlock(threshold)) { 40410a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << threshold; 40510a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 40610a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 40782847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 40855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 40955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 41055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 41155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetScanInterval(int32_t scan_interval) { 41255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " 41355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << scan_interval; 41482847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 41510a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->scan_interval.SetAndBlock(scan_interval)) { 41610a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << scan_interval; 41710a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 41810a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 41982847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 42055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 42155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 42255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 42355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetDisableHighBitrates( 42455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu bool disable_high_bitrates) { 42555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " 42655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << disable_high_bitrates; 42782847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 42810a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->disable_high_bitrates.SetAndBlock(disable_high_bitrates)) { 42910a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << disable_high_bitrates; 43010a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 43110a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 43282847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 43355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 43455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 43555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 43655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetSchedScan(bool enable) { 43755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << enable; 43882847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 43910a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->sched_scan.SetAndBlock(enable)) { 44010a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << enable; 44110a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 44210a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 44382847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 44455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 44555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 44655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 44755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiubool ChromeosSupplicantInterfaceProxy::SetScan(bool enable) { 44855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << enable; 44982847e0a551dc67e61e737c541704d734860e51dSamuel Tan#if !defined(__ANDROID__) 45010a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu if (!properties_->scan.SetAndBlock(enable)) { 45110a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu LOG(ERROR) << __func__ << " failed: " << enable; 45210a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu return false; 45310a17728a02d4f2178b1cb66dd4144604ad4668bPeter Qiu } 45482847e0a551dc67e61e737c541704d734860e51dSamuel Tan#endif // __ANDROID__ 45555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu return true; 45655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 45755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 45855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::BlobAdded(const string& /*blobname*/) { 45955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 46055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // XXX 46155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 46255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 46355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::BlobRemoved(const string& /*blobname*/) { 46455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 46555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // XXX 46655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 46755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 46855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::BSSAdded( 46955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const dbus::ObjectPath& BSS, 47003e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& properties) { 47155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 47255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore store; 47355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore::ConvertFromVariantDictionary(properties, &store); 47455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->BSSAdded(BSS.value(), store); 47555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 47655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 47755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::Certification( 47803e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& properties) { 47955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 48055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore store; 48155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore::ConvertFromVariantDictionary(properties, &store); 48255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->Certification(store); 48355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 48455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 48555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::EAP( 48655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const string& status, const string& parameter) { 48755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": status " 48855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << status << ", parameter " << parameter; 48955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->EAPEvent(status, parameter); 49055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 49155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 49255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::BSSRemoved(const dbus::ObjectPath& BSS) { 49355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 49455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->BSSRemoved(BSS.value()); 49555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 49655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 49755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::NetworkAdded( 49855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const dbus::ObjectPath& /*network*/, 49903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& /*properties*/) { 50055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 50155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // XXX 50255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 50355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 50455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::NetworkRemoved( 50555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const dbus::ObjectPath& /*network*/) { 50655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 50755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // TODO(quiche): Pass this up to the delegate, so that it can clean its 50855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // rpcid_by_service_ map. crbug.com/207648 50955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 51055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 51155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::NetworkSelected( 51255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const dbus::ObjectPath& /*network*/) { 51355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 51455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu // XXX 51555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 51655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 51755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::PropertiesChanged( 51803e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& properties) { 51955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__; 52055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore store; 52155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu KeyValueStore::ConvertFromVariantDictionary(properties, &store); 52255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->PropertiesChanged(store); 52355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 52455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 52555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::ScanDone(bool success) { 52655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " << success; 52755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->ScanDone(success); 52855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 52955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 53055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::TDLSDiscoverResponse( 53155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const std::string& peer_address) { 53255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " 53355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << peer_address; 53455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu delegate_->TDLSDiscoverResponse(peer_address); 53555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 53655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 53755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::OnPropertyChanged( 53855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const std::string& property_name) { 53955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ << ": " 54055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << property_name; 54155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 54255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 54355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiuvoid ChromeosSupplicantInterfaceProxy::OnSignalConnected( 54455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu const string& interface_name, const string& signal_name, bool success) { 54555ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu SLOG(&interface_proxy_->GetObjectPath(), 2) << __func__ 54655ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << "interface: " << interface_name << " signal: " << signal_name 54755ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << "success: " << success; 54855ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu if (!success) { 54955ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu LOG(ERROR) << "Failed to connect signal " << signal_name 55055ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu << " to interface " << interface_name; 55155ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu } 55255ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} 55355ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu 55455ce0b668c0096a2a0ae2c6dfe154635e80b169cPeter Qiu} // namespace shill 555