hfp_ag_bluez5: Implement RequestDisconnection()

When a RequestDisconnect() is received, the socket must be closed.
This way, the related emulator will be freed.
This commit is contained in:
Paulo Borges 2013-04-19 19:19:05 -03:00 committed by Denis Kenzior
parent 9332299bb7
commit 7b56ca2730
1 changed files with 27 additions and 3 deletions

View File

@ -162,11 +162,35 @@ static DBusMessage *profile_cancel(DBusConnection *conn,
static DBusMessage *profile_disconnection(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
DBusMessageIter iter;
const char *device;
gpointer fd;
DBG("Profile handler RequestDisconnection");
return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
".NotImplemented",
"Implementation not provided");
if (!dbus_message_iter_init(msg, &iter))
goto invalid;
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
goto invalid;
dbus_message_iter_get_basic(&iter, &device);
DBG("%s", device);
fd = g_hash_table_lookup(connection_hash, device);
if (fd == NULL)
goto invalid;
shutdown(GPOINTER_TO_INT(fd), SHUT_RDWR);
g_hash_table_remove(connection_hash, device);
return dbus_message_new_method_return(msg);
invalid:
return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE ".Rejected",
"Invalid arguments in method call");
}
static const GDBusMethodTable profile_methods[] = {