diff options
Diffstat (limited to 'audio/device.c')
| -rw-r--r-- | audio/device.c | 62 | 
1 files changed, 35 insertions, 27 deletions
| diff --git a/audio/device.c b/audio/device.c index f3567189..c86f711d 100644 --- a/audio/device.c +++ b/audio/device.c @@ -73,51 +73,60 @@ static DBusHandlerResult device_get_address(DBusConnection *conn,  	return send_message_and_unref(conn, reply);  } -static DBusHandlerResult device_get_name(DBusConnection *conn, -						DBusMessage *msg, void *data) +static char *get_dev_name(DBusConnection *conn, const char *adapter_path, +				bdaddr_t *bda)  { -	struct device *device = data; -	DBusMessage *reply, *reply2, *msg2; +	DBusMessage *msg, *reply;  	DBusError derr;  	const char *name; -	char address[18], *addr_ptr = address; +	char address[18], *addr_ptr = address, *ret; -	msg2 = dbus_message_new_method_call("org.bluez", device->adapter_path, +	msg = dbus_message_new_method_call("org.bluez", adapter_path,  					"org.bluez.Adapter", "GetRemoteName"); -	if (!msg2) -		return DBUS_HANDLER_RESULT_NEED_MEMORY; +	if (!msg) +		return NULL; -	ba2str(&device->dst, address); -	dbus_message_append_args(msg2, DBUS_TYPE_STRING, &addr_ptr, +	ba2str(bda, address); +	dbus_message_append_args(msg, DBUS_TYPE_STRING, &addr_ptr,  					DBUS_TYPE_INVALID);  	dbus_error_init(&derr); -	reply2 = dbus_connection_send_with_reply_and_block(conn, msg2, -1, +	reply = dbus_connection_send_with_reply_and_block(conn, msg, -1,  								&derr); - -	dbus_message_unref(msg2); +	dbus_message_unref(msg);  	if (dbus_error_is_set(&derr)) { -		error("%s GetRemoteName(): %s", device->adapter_path, -				derr.message); +		error("%s GetRemoteName(): %s", adapter_path, derr.message);  		dbus_error_free(&derr); -		return err_failed(conn, msg, "Unable to get remote name"); +		return NULL;  	} +	if (!dbus_message_get_args(reply, NULL, +					DBUS_TYPE_STRING, &name, +					DBUS_TYPE_INVALID)) +		return NULL; + +	ret = g_strdup(name); + +	dbus_message_unref(reply); + +	return ret; +} + +static DBusHandlerResult device_get_name(DBusConnection *conn, +						DBusMessage *msg, void *data) +{ +	struct device *dev = data; +	DBusMessage *reply; +	const char *name = dev->name ? dev->name : "";  	reply = dbus_message_new_method_return(msg);  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	dbus_message_get_args(reply2, NULL, -		       		DBUS_TYPE_STRING, &name, -				DBUS_TYPE_INVALID); -  	dbus_message_append_args(reply, DBUS_TYPE_STRING, &name,  					DBUS_TYPE_INVALID); -	dbus_message_unref(reply2); -  	return send_message_and_unref(conn, reply);  } @@ -193,11 +202,9 @@ static void device_free(struct device *dev)  	if (dev->conn)  		dbus_connection_unref(dev->conn); -	if (dev->adapter_path) -		g_free(dev->adapter_path); - -	if (dev->path) -		g_free(dev->path); +	g_free(dev->adapter_path); +	g_free(dev->path); +	g_free(dev->name);  	g_free(dev);  } @@ -303,6 +310,7 @@ struct device *device_register(DBusConnection *conn,  		return NULL;  	} +	dev->name = get_dev_name(conn, dev->adapter_path, bda);  	dev->path = g_strdup(path);  	bacpy(&dev->dst, bda);  	bacpy(&dev->src, &src); | 
