summaryrefslogtreecommitdiffstats
path: root/serial/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'serial/manager.c')
-rw-r--r--serial/manager.c61
1 files changed, 27 insertions, 34 deletions
diff --git a/serial/manager.c b/serial/manager.c
index 0032a995..becd4476 100644
--- a/serial/manager.c
+++ b/serial/manager.c
@@ -44,6 +44,7 @@
#include <bluetooth/rfcomm.h>
#include "dbus.h"
+#include "dbus-helper.h"
#include "logging.h"
#include "manager.h"
@@ -931,30 +932,6 @@ static DBusHandlerResult cancel_connect_service(DBusConnection *conn,
return send_message_and_unref(conn, reply);
}
-static DBusHandlerResult manager_message(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- const char *iface, *member;
-
- iface = dbus_message_get_interface(msg);
- member = dbus_message_get_member(msg);
-
- /* Accept messages from the manager interface only */
- if (strcmp(SERIAL_MANAGER_INTERFACE, iface))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- if (strcmp(member, "ConnectService") == 0)
- return connect_service(conn, msg, data);
-
- if (strcmp(member, "DisconnectService") == 0)
- return disconnect_service(conn, msg, data);
-
- if (strcmp(member, "CancelConnectService") == 0)
- return cancel_connect_service(conn, msg, data);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
static void manager_unregister(DBusConnection *conn, void *data)
{
if (connected_nodes) {
@@ -972,10 +949,17 @@ static void manager_unregister(DBusConnection *conn, void *data)
}
}
-/* Virtual table to handle manager object path hierarchy */
-static const DBusObjectPathVTable manager_table = {
- .message_function = manager_message,
- .unregister_function = manager_unregister,
+static DBusMethodVTable manager_methods[] = {
+ { "ConnectService", connect_service, "ss", "s" },
+ { "DisconnectService", disconnect_service, "s", "" },
+ { "CancelConnectService", cancel_connect_service, "ss", "" },
+ { NULL, NULL, NULL, NULL },
+};
+
+static DBusSignalVTable manager_signals[] = {
+ { "ServiceConnected", "s" },
+ { "ServiceDisconnected", "s" },
+ { NULL, NULL }
};
int serial_init(DBusConnection *conn)
@@ -987,16 +971,25 @@ int serial_init(DBusConnection *conn)
return -errno;
}
- connection = dbus_connection_ref(conn);
-
- if (dbus_connection_register_object_path(connection,
- SERIAL_MANAGER_PATH, &manager_table, NULL) == FALSE) {
+ if (!dbus_connection_create_object_path(conn, SERIAL_MANAGER_PATH,
+ NULL, manager_unregister)) {
error("D-Bus failed to register %s path", SERIAL_MANAGER_PATH);
- dbus_connection_unref(connection);
+ return -1;
+ }
+ if (!dbus_connection_register_interface(conn, SERIAL_MANAGER_PATH,
+ SERIAL_MANAGER_INTERFACE,
+ manager_methods,
+ manager_signals, NULL)) {
+ error("Failed to register %s interface to %s",
+ SERIAL_MANAGER_INTERFACE, SERIAL_MANAGER_PATH);
+ dbus_connection_destroy_object_path(connection,
+ SERIAL_MANAGER_PATH);
return -1;
}
+ connection = dbus_connection_ref(conn);
+
info("Registered manager path:%s", SERIAL_MANAGER_PATH);
return 0;
@@ -1004,7 +997,7 @@ int serial_init(DBusConnection *conn)
void serial_exit(void)
{
- dbus_connection_unregister_object_path(connection, SERIAL_MANAGER_PATH);
+ dbus_connection_destroy_object_path(connection, SERIAL_MANAGER_PATH);
dbus_connection_unref(connection);
connection = NULL;