diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-05-01 11:50:48 +0000 |
---|---|---|
committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-05-01 11:50:48 +0000 |
commit | 7c21f8711c39949419c35aba60b007d1b9d2b1d5 (patch) | |
tree | 8795e06fe142a4570d9d733e158b9633e767093c /serial/manager.c | |
parent | cdb1b7c3435688bc6f30a3953f1152247ec51b95 (diff) |
serial: added manager methods skeleton
Diffstat (limited to 'serial/manager.c')
-rw-r--r-- | serial/manager.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/serial/manager.c b/serial/manager.c index 79601624..ee250b37 100644 --- a/serial/manager.c +++ b/serial/manager.c @@ -25,21 +25,107 @@ #include <config.h> #endif +#include <errno.h> +#include <string.h> + #include "dbus.h" +#include "logging.h" #include "manager.h" +#define SERIAL_PATH "/org/bluez/serial" +#define SERIAL_MANAGER_INTERFACE "org.bluez.serial.Manager" +#define SERIAL_ERROR_INTERFACE "org.bluez.serial.Error" + static DBusConnection *connection = NULL; +DBusHandlerResult err_unknown_port(DBusConnection *conn, DBusMessage *msg) +{ + return send_message_and_unref(conn, + dbus_message_new_error(msg, + SERIAL_ERROR_INTERFACE ".UnknownPort", + "Unknown port path")); +} + +static DBusHandlerResult create_port(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult remove_port(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult list_ports(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static DBusHandlerResult manager_message(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + const char *path, *iface, *member; + + path = dbus_message_get_path(msg); + iface = dbus_message_get_interface(msg); + member = dbus_message_get_member(msg); + + /* Catching fallback paths */ + if (strcmp(SERIAL_PATH, path) != 0) + return err_unknown_port(conn, msg); + + /* Accept messages from the manager interface only */ + if (strcmp(SERIAL_MANAGER_INTERFACE, iface)) + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + + if (strcmp(member, "CreatePort") == 0) + return create_port(conn, msg, data); + + if (strcmp(member, "RemovePort") == 0) + return remove_port(conn, msg, data); + + if (strcmp(member, "ListPorts") == 0) + return list_ports(conn, msg, data); + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +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, +}; + int serial_init(DBusConnection *conn) { connection = dbus_connection_ref(conn); + /* Fallback to catch invalid serial path */ + if (dbus_connection_register_fallback(connection, SERIAL_PATH, + &manager_table, NULL) == FALSE) { + error("D-Bus failed to register %s path", SERIAL_PATH); + dbus_connection_unref(connection); + + return -1; + } + + info("Registered manager path:%s", SERIAL_PATH); + return 0; } void serial_exit(void) { + dbus_connection_unregister_object_path(connection, SERIAL_PATH); + dbus_connection_unref(connection); connection = NULL; } |