Initial import to Git
[profile/ivi/common-api-dbus-runtime.git] / src / CommonAPI / DBus / DBusObjectManager.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public\r
2  * License, v. 2.0. If a copy of the MPL was not distributed with this\r
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\r
4 #ifndef COMMONAPI_DBUS_DBUS_OBJECT_MANAGER_H_\r
5 #define COMMONAPI_DBUS_DBUS_OBJECT_MANAGER_H_\r
6 \r
7 #include "DBusMessage.h"\r
8 #include "DBusConnection.h"\r
9 \r
10 namespace CommonAPI {\r
11 namespace DBus {\r
12 \r
13 // objectPath, interfaceName\r
14 typedef std::function<bool(const DBusMessage&)> DBusMessageInterfaceHandler;\r
15 typedef std::pair<std::string, std::string> DBusInterfaceHandlerPath;\r
16 typedef DBusInterfaceHandlerPath DBusInterfaceHandlerToken;\r
17 \r
18 class DBusConnection;\r
19 \r
20 class DBusObjectManager {\r
21  public:\r
22     DBusObjectManager(const std::shared_ptr<DBusConnection>&);\r
23 \r
24     void init();\r
25 \r
26     const DBusInterfaceHandlerToken registerInterfaceHandlerForDBusObject(const std::string& objectPath,\r
27                                                                           const std::string& interfaceName,\r
28                                                                           const DBusMessageInterfaceHandler& dbusMessageInterfaceHandler);\r
29 \r
30     DBusInterfaceHandlerToken registerInterfaceHandler(const std::string& objectPath,\r
31                                                        const std::string& interfaceName,\r
32                                                        const DBusMessageInterfaceHandler& dbusMessageInterfaceHandler);\r
33 \r
34     void unregisterInterfaceHandler(const DBusInterfaceHandlerToken& dbusInterfaceHandlerToken);\r
35 \r
36     bool handleMessage(const DBusMessage&) const;\r
37 \r
38 \r
39  private:\r
40     void addLibdbusObjectPathHandler(const std::string& objectPath);\r
41     void removeLibdbusObjectPathHandler(const std::string& objectPath);\r
42 \r
43     bool onGetDBusObjectManagerData(const DBusMessage& callMessage);\r
44 \r
45     typedef std::unordered_map<DBusInterfaceHandlerPath, DBusMessageInterfaceHandler> DBusRegisteredObjectsTable;\r
46     DBusRegisteredObjectsTable dbusRegisteredObjectsTable_;\r
47 \r
48     std::shared_ptr<DBusConnection> dbusConnection_;\r
49 };\r
50 \r
51 } // namespace DBus\r
52 } // namespace CommonAPI\r
53 \r
54 #endif // COMMONAPI_DBUS_DBUS_OBJECT_MANAGER_H_\r