diff options
Diffstat (limited to 'manager.h')
-rw-r--r-- | manager.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/manager.h b/manager.h new file mode 100644 index 0000000..9c5fb93 --- /dev/null +++ b/manager.h @@ -0,0 +1,111 @@ +// Copyright 2014 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef APMANAGER_MANAGER_H_ +#define APMANAGER_MANAGER_H_ + +#include <map> +#include <string> +#include <vector> + +#include <base/macros.h> +#include <chromeos/dbus/dbus_service_watcher.h> + +#include "apmanager/dbus_adaptors/org.chromium.apmanager.Manager.h" + +#include "apmanager/device_info.h" +#include "apmanager/firewall_manager.h" +#include "apmanager/service.h" +#include "apmanager/shill_proxy.h" + +namespace apmanager { + +class Manager : public org::chromium::apmanager::ManagerAdaptor, + public org::chromium::apmanager::ManagerInterface { + public: + template<typename T> + using DBusMethodResponse = chromeos::dbus_utils::DBusMethodResponse<T>; + + Manager(); + virtual ~Manager(); + + // Implementation of ManagerInterface. + // Handles calls to org.chromium.apmanager.Manager.CreateService(). + // This is an asynchronous call, response is invoked when Service and Config + // dbus objects complete the DBus service registration. + virtual void CreateService( + std::unique_ptr<DBusMethodResponse<dbus::ObjectPath>> response, + dbus::Message* message); + // Handles calls to org.chromium.apmanager.Manager.RemoveService(). + virtual bool RemoveService(chromeos::ErrorPtr* error, + dbus::Message* message, + const dbus::ObjectPath& in_service); + + // Register DBus object. + void RegisterAsync( + chromeos::dbus_utils::ExportedObjectManager* object_manager, + const scoped_refptr<dbus::Bus>& bus, + chromeos::dbus_utils::AsyncEventSequencer* sequencer); + + virtual void Start(); + virtual void Stop(); + + virtual void RegisterDevice(scoped_refptr<Device> device); + + // Return an unuse device with AP interface mode support. + virtual scoped_refptr<Device> GetAvailableDevice(); + + // Return the device that's associated with the given interface + // |interface_name|. + virtual scoped_refptr<Device> GetDeviceFromInterfaceName( + const std::string& interface_name); + + // Claim the given interface |interface_name| from shill. + virtual void ClaimInterface(const std::string& interface_name); + // Release the given interface |interface_name| to shill. + virtual void ReleaseInterface(const std::string& interface_name); + + // Request/release access to DHCP port for the specified interface. + virtual void RequestDHCPPortAccess(const std::string& interface); + virtual void ReleaseDHCPPortAccess(const std::string& interface); + + private: + friend class ManagerTest; + + // A callback that will be called when the Service/Config D-Bus + // objects/interfaces are exported successfully and ready to be used. + void OnServiceRegistered( + std::unique_ptr<DBusMethodResponse<dbus::ObjectPath>> response, + std::unique_ptr<Service> service, + bool success); + + // A callback that will be called when a Device D-Bus object/interface is + // exported successfully and ready to be used. + void OnDeviceRegistered(scoped_refptr<Device> device, bool success); + + // This is invoked when the owner of an AP service disappeared. + void OnAPServiceOwnerDisappeared(int service_identifier); + + int service_identifier_; + int device_identifier_; + std::unique_ptr<chromeos::dbus_utils::DBusObject> dbus_object_; + scoped_refptr<dbus::Bus> bus_; + std::vector<std::unique_ptr<Service>> services_; + std::vector<scoped_refptr<Device>> devices_; + // DBus service watchers for the owner of AP services. + using DBusServiceWatcher = chromeos::dbus_utils::DBusServiceWatcher; + std::map<int, std::unique_ptr<DBusServiceWatcher>> service_watchers_; + DeviceInfo device_info_; + + // Proxy to shill DBus services. + ShillProxy shill_proxy_; + // Proxy to DBus service for managing firewall rules. + FirewallManager firewall_manager_; + + DISALLOW_COPY_AND_ASSIGN(Manager); +}; + +} // namespace apmanager + +#endif // APMANAGER_MANAGER_H_ |