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// 1672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 1772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu#include "shill/dbus/chromeos_dbus_control.h" 1872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 19646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <brillo/dbus/async_event_sequencer.h> 20646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 21646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#if defined(__ANDROID__) 22646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <dbus/service_constants.h> 23646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#else 24646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <chromeos/dbus/service_constants.h> 25646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#endif // __ANDROID__ 26646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 2772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu#include "shill/dbus/chromeos_device_dbus_adaptor.h" 28484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_ipconfig_dbus_adaptor.h" 29484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_manager_dbus_adaptor.h" 30484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_profile_dbus_adaptor.h" 31484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_rpc_task_dbus_adaptor.h" 32484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_service_dbus_adaptor.h" 33484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_third_party_vpn_dbus_adaptor.h" 3472e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 35c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dhcpcd_listener.h" 36c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dhcpcd_proxy.h" 37fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#if defined(__ANDROID__) 38fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#include "shill/dbus/chromeos_firewalld_proxy.h" 39ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#include "shill/power_manager_proxy_stub.h" 404eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#include "shill/upstart/upstart_proxy_stub.h" 41fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#else 42c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_permission_broker_proxy.h" 43c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_power_manager_proxy.h" 44c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_upstart_proxy.h" 454eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#endif // __ANDROID__ 46c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dbus_service_watcher.h" 47c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu 48da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#if !defined(DISABLE_CELLULAR) 49da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#include "shill/dbus/chromeos_dbus_objectmanager_proxy.h" 50da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#include "shill/dbus/chromeos_dbus_properties_proxy.h" 5128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_modem3gpp_proxy.h" 5228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_modemcdma_proxy.h" 5328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_proxy.h" 5428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_simple_proxy.h" 5528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_sim_proxy.h" 56f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_cdma_proxy.h" 57f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gobi_proxy.h" 58f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gsm_card_proxy.h" 59f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gsm_network_proxy.h" 60f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_manager_proxy.h" 61f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_proxy.h" 62f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_simple_proxy.h" 63da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#endif // DISABLE_CELLULAR 64da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu 65c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#if !defined(DISABLE_WIFI) 66c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_bss_proxy.h" 67c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#endif // DISABLE_WIFI 68c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu 69c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X) 70c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_interface_proxy.h" 71c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_network_proxy.h" 72c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_process_proxy.h" 73c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#endif // DISABLE_WIFI || DISABLE_WIRED_8021X 74c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu 75c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#if !defined(DISABLE_WIMAX) 76c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_device_proxy.h" 77c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_manager_proxy.h" 78c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_network_proxy.h" 79c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#endif // DISABLE_WIMAX 80c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu 81646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include "shill/manager.h" 82646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 83646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanusing brillo::dbus_utils::AsyncEventSequencer; 840d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiuusing std::string; 8572e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 8672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiunamespace shill { 8772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 88c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu// static. 89c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiuconst char ChromeosDBusControl::kNullPath[] = "/"; 90c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu 91646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel TanChromeosDBusControl::ChromeosDBusControl(EventDispatcher* dispatcher) 92646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan : dispatcher_(dispatcher), 93526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu null_identifier_(kNullPath) { 94526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu dbus::Bus::Options options; 95526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu options.bus_type = dbus::Bus::SYSTEM; 9672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 97646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan adaptor_bus_ = new dbus::Bus(options); 98526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_ = new dbus::Bus(options); 99646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan CHECK(adaptor_bus_->Connect()); 100526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu CHECK(proxy_bus_->Connect()); 101526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu} 102526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu 103526ed5f13bac449210b290ca027be8599bc5ea83Peter QiuChromeosDBusControl::~ChromeosDBusControl() { 104646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan if (adaptor_bus_) { 105646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan adaptor_bus_->ShutdownAndBlock(); 106646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan } 107526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu if (proxy_bus_) { 108526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_->ShutdownAndBlock(); 109526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu } 110526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu} 11172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 112c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiuconst string& ChromeosDBusControl::NullRPCIdentifier() { 113c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu return null_identifier_; 114c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu} 115c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu 116646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::RegisterManagerObject( 117646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan Manager* manager, const base::Closure& registration_done_callback) { 118646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan registration_done_callback_ = registration_done_callback; 119646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan scoped_refptr<AsyncEventSequencer> sequencer(new AsyncEventSequencer()); 120646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan manager->RegisterAsync( 121646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan base::Bind( 122646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan &ChromeosDBusControl::OnDBusServiceRegistered, 123646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan base::Unretained(this), 124646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan sequencer->GetHandler("Manager.RegisterAsync() failed.", true))); 125646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan sequencer->OnAllTasksCompletedCall({ 126646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan base::Bind(&ChromeosDBusControl::TakeServiceOwnership, 127646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan base::Unretained(this)) 128646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan }); 129646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan} 130646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 13172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiutemplate <typename Object, typename AdaptorInterface, typename Adaptor> 13272e7e252c0594c2d58d2d8d64e4eede24608240ePeter QiuAdaptorInterface* ChromeosDBusControl::CreateAdaptor(Object* object) { 133526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new Adaptor(adaptor_bus_, object); 13472e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu} 13572e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 136646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::OnDBusServiceRegistered( 137646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan const base::Callback<void(bool)>& completion_action, bool success) { 138646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // The DBus control interface will take over the ownership of the DBus service 139646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // in this callback. The daemon will crash if registration failed. 140646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan completion_action.Run(success); 141646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 142646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // We can start the manager now that we have ownership of the D-Bus service. 143646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // Doing so earlier would allow the manager to emit signals before service 144646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // ownership was acquired. 145646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan registration_done_callback_.Run(); 146646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan} 147646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 148646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::TakeServiceOwnership(bool success) { 149646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan // Success should always be true since we've said that failures are fatal. 150646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan CHECK(success) << "Init of one or more objects has failed."; 151646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan CHECK(adaptor_bus_->RequestOwnershipAndBlock(kFlimflamServiceName, 152646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan dbus::Bus::REQUIRE_PRIMARY)) 153646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan << "Unable to take ownership of " << kFlimflamServiceName; 154646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan} 155646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan 15672e7e252c0594c2d58d2d8d64e4eede24608240ePeter QiuDeviceAdaptorInterface* ChromeosDBusControl::CreateDeviceAdaptor( 15772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu Device* device) { 15872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu return 15972e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu CreateAdaptor<Device, DeviceAdaptorInterface, ChromeosDeviceDBusAdaptor>( 16072e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu device); 16172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu} 16272e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu 16324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuIPConfigAdaptorInterface* ChromeosDBusControl::CreateIPConfigAdaptor( 16424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu IPConfig* config) { 165484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu return 166484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu CreateAdaptor<IPConfig, IPConfigAdaptorInterface, 167484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu ChromeosIPConfigDBusAdaptor>(config); 16824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 16924b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 17024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuManagerAdaptorInterface* ChromeosDBusControl::CreateManagerAdaptor( 17124b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu Manager* manager) { 1728a3f68edbcf7fe59380609588787baa54cbd9bddSamuel Tan return new ChromeosManagerDBusAdaptor(adaptor_bus_, proxy_bus_, manager); 17324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 17424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 17524b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuProfileAdaptorInterface* ChromeosDBusControl::CreateProfileAdaptor( 17624b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu Profile* profile) { 177484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu return 178484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu CreateAdaptor<Profile, ProfileAdaptorInterface, 179484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu ChromeosProfileDBusAdaptor>(profile); 18024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 18124b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 18224b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuRPCTaskAdaptorInterface* ChromeosDBusControl::CreateRPCTaskAdaptor( 18324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu RPCTask* task) { 184484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu return 185484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu CreateAdaptor<RPCTask, RPCTaskAdaptorInterface, 186484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu ChromeosRPCTaskDBusAdaptor>(task); 18724b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 18824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 18924b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuServiceAdaptorInterface* ChromeosDBusControl::CreateServiceAdaptor( 19024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu Service* service) { 191484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu return 192484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu CreateAdaptor<Service, ServiceAdaptorInterface, 193484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu ChromeosServiceDBusAdaptor>(service); 19424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 19524b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 19624b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu#ifndef DISABLE_VPN 19724b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuThirdPartyVpnAdaptorInterface* ChromeosDBusControl::CreateThirdPartyVpnAdaptor( 19824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu ThirdPartyVpnDriver* driver) { 199484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu return 200484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu CreateAdaptor<ThirdPartyVpnDriver, ThirdPartyVpnAdaptorInterface, 201484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu ChromeosThirdPartyVpnDBusAdaptor>(driver); 20224b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu} 20324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu#endif 20424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu 2050d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuPowerManagerProxyInterface* ChromeosDBusControl::CreatePowerManagerProxy( 206c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu PowerManagerProxyDelegate* delegate, 207c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_appeared_callback, 208c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_vanished_callback) { 209ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#if defined(__ANDROID__) 210ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan return new PowerManagerProxyStub(); 211ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#else 212c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu return new ChromeosPowerManagerProxy(dispatcher_, 213526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, 214c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu delegate, 215c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu service_appeared_callback, 216c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu service_vanished_callback); 217ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#endif // __ANDROID__ 2180d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2190d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2200d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X) 2210d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantProcessProxyInterface* 2220d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateSupplicantProcessProxy( 223c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_appeared_callback, 224c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_vanished_callback) { 225526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosSupplicantProcessProxy(dispatcher_, 226526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, 227526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu service_appeared_callback, 228526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu service_vanished_callback); 2290d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2300d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2310d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantInterfaceProxyInterface* 2320d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateSupplicantInterfaceProxy( 2330d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu SupplicantEventDelegateInterface* delegate, 234c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const string& object_path) { 235526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosSupplicantInterfaceProxy( 236526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, object_path, delegate); 2370d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2380d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2390d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantNetworkProxyInterface* 2400d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateSupplicantNetworkProxy( 241c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const string& object_path) { 242526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosSupplicantNetworkProxy(proxy_bus_, object_path); 2430d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2440d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif // DISABLE_WIFI || DISABLE_WIRED_8021X 2450d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2460d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIFI) 2470d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantBSSProxyInterface* ChromeosDBusControl::CreateSupplicantBSSProxy( 2480d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu WiFiEndpoint* wifi_endpoint, 249c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const string& object_path) { 250526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosSupplicantBSSProxy(proxy_bus_, object_path, wifi_endpoint); 2510d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2520d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif // DISABLE_WIFI 2530d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 254820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter QiuDHCPCDListenerInterface* ChromeosDBusControl::CreateDHCPCDListener( 255820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu DHCPProvider* provider) { 256526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosDHCPCDListener(proxy_bus_, dispatcher_, provider); 257820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu} 258820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu 2590d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuDHCPProxyInterface* ChromeosDBusControl::CreateDHCPProxy( 2600d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 261526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosDHCPCDProxy(proxy_bus_, service); 2620d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2630d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2640d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuUpstartProxyInterface* ChromeosDBusControl::CreateUpstartProxy() { 2654eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#if defined(__ANDROID__) 2664eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan return new UpstartProxyStub(); 2674eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#else 268526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosUpstartProxy(proxy_bus_); 2694eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#endif // __ANDROID__ 2700d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2710d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 272a330ecd23b1ce4112fd7a28f4b2a062b8df10735Peter QiuFirewallProxyInterface* ChromeosDBusControl::CreateFirewallProxy() { 273fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#if defined(__ANDROID__) 274fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan return new ChromeosFirewalldProxy(proxy_bus_); 275fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#else 276526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosPermissionBrokerProxy(proxy_bus_); 277fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#endif // __ANDROID__ 2780d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 2790d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 2800d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_CELLULAR) 281607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter QiuDBusPropertiesProxyInterface* ChromeosDBusControl::CreateDBusPropertiesProxy( 282607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu const string& path, 283607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu const string& service) { 284607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu return new ChromeosDBusPropertiesProxy(proxy_bus_, path, service); 285607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu} 286607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu 2870d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuDBusObjectManagerProxyInterface* 2880d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateDBusObjectManagerProxy( 2890d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 29005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu const string& service, 29105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu const base::Closure& service_appeared_callback, 29205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu const base::Closure& service_vanished_callback) { 293da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu return new ChromeosDBusObjectManagerProxy(dispatcher_, 294526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, 295da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu path, 296da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu service, 297da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu service_appeared_callback, 298da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu service_vanished_callback); 2990d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3000d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3010d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemManagerProxyInterface* 3020d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateModemManagerProxy( 3030d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ModemManagerClassic* manager, 3040d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 30505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu const string& service, 306f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const base::Closure& service_appeared_callback, 307f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const base::Closure& service_vanished_callback) { 308f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu return new ChromeosModemManagerProxy(dispatcher_, 309526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, 310f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu manager, 311f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu path, 312f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu service, 313f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu service_appeared_callback, 314f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu service_vanished_callback); 3150d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3160d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3170d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemProxyInterface* ChromeosDBusControl::CreateModemProxy( 3180d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3190d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 320526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemProxy(proxy_bus_, path, service); 3210d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3220d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3230d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemSimpleProxyInterface* ChromeosDBusControl::CreateModemSimpleProxy( 3240d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3250d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 326526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemSimpleProxy(proxy_bus_, path, service); 3270d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3280d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3290d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemCDMAProxyInterface* ChromeosDBusControl::CreateModemCDMAProxy( 3300d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3310d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 332526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemCDMAProxy(proxy_bus_, path, service); 3330d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3340d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3350d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGSMCardProxyInterface* ChromeosDBusControl::CreateModemGSMCardProxy( 3360d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3370d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 338526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemGSMCardProxy(proxy_bus_, path, service); 3390d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3400d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3410d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGSMNetworkProxyInterface* ChromeosDBusControl::CreateModemGSMNetworkProxy( 3420d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3430d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 344526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemGSMNetworkProxy(proxy_bus_, path, service); 3450d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3460d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3470d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGobiProxyInterface* ChromeosDBusControl::CreateModemGobiProxy( 3480d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3490d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 350526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosModemGobiProxy(proxy_bus_, path, service); 3510d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3520d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3530d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu// Proxies for ModemManager1 interfaces 3540d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemModem3gppProxyInterface* 3550d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateMM1ModemModem3gppProxy( 3560d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3570d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 358526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new mm1::ChromeosModemModem3gppProxy(proxy_bus_, path, service); 3590d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3600d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3610d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemModemCdmaProxyInterface* 3620d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu ChromeosDBusControl::CreateMM1ModemModemCdmaProxy( 3630d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3640d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 365526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new mm1::ChromeosModemModemCdmaProxy(proxy_bus_, path, service); 3660d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3670d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3680d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemProxyInterface* ChromeosDBusControl::CreateMM1ModemProxy( 3690d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3700d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 371526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new mm1::ChromeosModemProxy(proxy_bus_, path, service); 3720d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3730d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3740d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemSimpleProxyInterface* ChromeosDBusControl::CreateMM1ModemSimpleProxy( 3750d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3760d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 377526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new mm1::ChromeosModemSimpleProxy(proxy_bus_, path, service); 3780d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3790d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3800d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::SimProxyInterface* ChromeosDBusControl::CreateSimProxy( 3810d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path, 3820d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& service) { 383526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new mm1::ChromeosSimProxy(proxy_bus_, path, service); 3840d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3850d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif // DISABLE_CELLULAR 3860d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 3870d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIMAX) 3880d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuWiMaxDeviceProxyInterface* ChromeosDBusControl::CreateWiMaxDeviceProxy( 3890d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path) { 390526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosWiMaxDeviceProxy(proxy_bus_, path); 3910d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 3920d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 393c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter QiuWiMaxManagerProxyInterface* ChromeosDBusControl::CreateWiMaxManagerProxy( 394c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_appeared_callback, 395c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu const base::Closure& service_vanished_callback) { 396c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu return new ChromeosWiMaxManagerProxy(dispatcher_, 397526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu proxy_bus_, 398c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu service_appeared_callback, 399c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu service_vanished_callback); 4000d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 4010d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 4020d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuWiMaxNetworkProxyInterface* ChromeosDBusControl::CreateWiMaxNetworkProxy( 4030d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu const string& path) { 404526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu return new ChromeosWiMaxNetworkProxy(proxy_bus_, path); 4050d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu} 4060d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif // DISABLE_WIMAX 4070d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu 40872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu} // namespace shill 409