1a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// 2a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Copyright (C) 2016 The Android Open Source Project 3a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// 4a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Licensed under the Apache License, Version 2.0 (the "License"); 5a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// you may not use this file except in compliance with the License. 6a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// You may obtain a copy of the License at 7a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// 8a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// http://www.apache.org/licenses/LICENSE-2.0 9a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// 10a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Unless required by applicable law or agreed to in writing, software 11a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// distributed under the License is distributed on an "AS IS" BASIS, 12a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// See the License for the specific language governing permissions and 14a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// limitations under the License. 15a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// 16a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 17a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#ifndef SHILL_BINDER_BINDER_CONTROL_H_ 18a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#define SHILL_BINDER_BINDER_CONTROL_H_ 19a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 20a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <map> 21a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <string> 22a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 23a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <binder/IBinder.h> 24a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <utils/StrongPointer.h> 25a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 26a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/control_interface.h" 27a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 28a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace shill { 29a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 30a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass EventDispatcher; 31a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass Manager; 32a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 33a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass BinderControl : public ControlInterface { 34a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan public: 35a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan BinderControl(EventDispatcher* dispatcher); 36a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan ~BinderControl() override; 37a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 38a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan void RegisterManagerObject( 39a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan Manager* manager, 40a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const base::Closure& registration_done_callback) override; 41a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan DeviceAdaptorInterface* CreateDeviceAdaptor(Device* device) override; 42a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan IPConfigAdaptorInterface* CreateIPConfigAdaptor(IPConfig* ipconfig) override; 43a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan ManagerAdaptorInterface* CreateManagerAdaptor(Manager* manager) override; 44a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan ProfileAdaptorInterface* CreateProfileAdaptor(Profile* profile) override; 45a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan RPCTaskAdaptorInterface* CreateRPCTaskAdaptor(RPCTask* task) override; 46a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan ServiceAdaptorInterface* CreateServiceAdaptor(Service* service) override; 47a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 48a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const std::string& NullRPCIdentifier() override; 49a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 50a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // The caller retains ownership of 'delegate'. It must not be deleted before 51a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // the proxy. 52a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan PowerManagerProxyInterface* CreatePowerManagerProxy( 53a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan PowerManagerProxyDelegate* delegate, 54a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const base::Closure& service_appeared_callback, 55a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const base::Closure& service_vanished_callback) override; 56a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 57a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X) 58a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan SupplicantProcessProxyInterface* CreateSupplicantProcessProxy( 59a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const base::Closure& service_appeared_callback, 60a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const base::Closure& service_vanished_callback) override; 61a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 62a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan SupplicantInterfaceProxyInterface* CreateSupplicantInterfaceProxy( 63a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan SupplicantEventDelegateInterface* delegate, 64a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const std::string& object_path) override; 65a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 66a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan SupplicantNetworkProxyInterface* CreateSupplicantNetworkProxy( 67a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan const std::string& object_path) override; 68a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#endif // DISABLE_WIFI || DISABLE_WIRED_8021X 69a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 70a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#if !defined(DISABLE_WIFI) 71a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // See comment in supplicant_bss_proxy.h, about bare pointer. 72a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan SupplicantBSSProxyInterface* CreateSupplicantBSSProxy( 73a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan WiFiEndpoint* wifi_endpoint, const std::string& object_path) override; 74a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#endif // DISABLE_WIFI 75a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 76a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan UpstartProxyInterface* CreateUpstartProxy() override; 77a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 78a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan DHCPCDListenerInterface* CreateDHCPCDListener( 79a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan DHCPProvider* provider) override; 80a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 81a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan DHCPProxyInterface* CreateDHCPProxy(const std::string& service) override; 82a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 83a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan FirewallProxyInterface* CreateFirewallProxy() override; 84a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 85a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan private: 86a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan static const char kNullRpcIdentifier[]; 87a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 88a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan template <typename Object, typename AdaptorInterface, typename Adaptor> 89a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan AdaptorInterface* CreateAdaptor(Object* object); 90a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 91a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // This counter is used to assign unique IDs to binder adaptors. The string 92a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // representation of this integer will assigned to as a unique ID to the next 93a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // binder adaptor created. This unique ID will then be used as the Binder 94a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // adaptor's RPC identifier. 95a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan uint32_t next_unique_binder_adaptor_id_; 96a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan std::map<std::string, android::sp<android::IBinder>> rpc_id_to_binder_map_; 97a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan EventDispatcher* dispatcher_; 98a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan std::string null_identifier_; 99a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 100a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan // TODO(samueltan): remove when shill is no longer dependent on DBus proxies. 101a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan scoped_refptr<dbus::Bus> proxy_bus_; 102a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}; 103a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 104a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan} // namespace shill 105a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan 106a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#endif // SHILL_BINDER_BINDER_CONTROL_H_ 107