summaryrefslogtreecommitdiff
path: root/manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'manager.h')
-rw-r--r--manager.h111
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_