diff options
Diffstat (limited to 'audio/sink.c')
| -rw-r--r-- | audio/sink.c | 69 | 
1 files changed, 38 insertions, 31 deletions
| diff --git a/audio/sink.c b/audio/sink.c index 7f33cf13..9027cd74 100644 --- a/audio/sink.c +++ b/audio/sink.c @@ -379,8 +379,8 @@ failed:  	error_failed(pending->conn, pending->msg, "Stream setup failed");  } -static DBusHandlerResult sink_connect(DBusConnection *conn, -					DBusMessage *msg, void *data) +static DBusMessage *sink_connect(DBusConnection *conn, +				DBusMessage *msg, void *data)  {  	struct audio_device *dev = data;  	struct sink *sink = dev->sink; @@ -390,14 +390,17 @@ static DBusHandlerResult sink_connect(DBusConnection *conn,  		sink->session = avdtp_get(&dev->src, &dev->dst);  	if (!sink->session) -		return error_failed(conn, msg, "Unable to get a session"); +		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", +						"Unable to get a session");  	if (sink->connect || sink->disconnect) -		return error_in_progress(conn, msg, "Device connection" -					"already in progress"); +		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", +						"%s", strerror(EBUSY));  	if (sink->state >= AVDTP_STATE_OPEN) -		return error_already_connected(conn, msg); +		return g_dbus_create_error(msg, ERROR_INTERFACE +						".AlreadyConnected", +						"Device Already Connected");  	pending = g_new0(struct pending_request, 1);  	pending->conn = dbus_connection_ref(conn); @@ -408,11 +411,11 @@ static DBusHandlerResult sink_connect(DBusConnection *conn,  	debug("stream creation in progress"); -	return DBUS_HANDLER_RESULT_HANDLED; +	return NULL;  } -static DBusHandlerResult sink_disconnect(DBusConnection *conn, -						DBusMessage *msg, void *data) +static DBusMessage *sink_disconnect(DBusConnection *conn, +					DBusMessage *msg, void *data)  {  	struct audio_device *device = data;  	struct sink *sink = device->sink; @@ -420,35 +423,39 @@ static DBusHandlerResult sink_disconnect(DBusConnection *conn,  	int err;  	if (!sink->session) -		return error_not_connected(conn, msg); +		return g_dbus_create_error(msg, ERROR_INTERFACE +						".NotConnected", +						"Device not Connected");  	if (sink->connect || sink->disconnect) -		return error_failed(conn, msg, strerror(EBUSY)); +		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", +						"%s", strerror(EBUSY));  	if (sink->state < AVDTP_STATE_OPEN) {  		DBusMessage *reply = dbus_message_new_method_return(msg);  		if (!reply) -			return DBUS_HANDLER_RESULT_NEED_MEMORY; +			return NULL;  		avdtp_unref(sink->session);  		sink->session = NULL; -		return send_message_and_unref(conn, reply); +		return reply;  	}  	err = avdtp_close(sink->session, sink->stream);  	if (err < 0) -		return error_failed(conn, msg, strerror(-err)); +		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", +						"%s", strerror(-err));  	pending = g_new0(struct pending_request, 1);  	pending->conn = dbus_connection_ref(conn);  	pending->msg = dbus_message_ref(msg);  	sink->disconnect = pending; -	return DBUS_HANDLER_RESULT_HANDLED; +	return NULL;  } -static DBusHandlerResult sink_is_connected(DBusConnection *conn, -						DBusMessage *msg, -						void *data) +static DBusMessage *sink_is_connected(DBusConnection *conn, +					DBusMessage *msg, +					void *data)  {  	struct audio_device *device = data;  	struct sink *sink = device->sink; @@ -457,26 +464,26 @@ static DBusHandlerResult sink_is_connected(DBusConnection *conn,  	reply = dbus_message_new_method_return(msg);  	if (!reply) -		return DBUS_HANDLER_RESULT_NEED_MEMORY; +		return NULL;  	connected = (sink->state >= AVDTP_STATE_CONFIGURED);  	dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &connected,  					DBUS_TYPE_INVALID); -	send_message_and_unref(conn, reply); - -	return DBUS_HANDLER_RESULT_HANDLED; +	return reply;  } -static DBusMethodVTable sink_methods[] = { -	{ "Connect",		sink_connect,		"",	""	}, -	{ "Disconnect",		sink_disconnect,	"",	""	}, -	{ "IsConnected",	sink_is_connected,	"",	"b"	}, +static GDBusMethodTable sink_methods[] = { +	{ "Connect",		"",	"",	sink_connect, +						G_DBUS_METHOD_FLAG_ASYNC }, +	{ "Disconnect",		"",	"",	sink_disconnect, +						G_DBUS_METHOD_FLAG_ASYNC }, +	{ "IsConnected",	"",	"b",	sink_is_connected },  	{ NULL, NULL, NULL, NULL }  }; -static DBusSignalVTable sink_signals[] = { +static GDBusSignalTable sink_signals[] = {  	{ "Connected",			""	},  	{ "Disconnected",		""	},  	{ "Playing",			""	}, @@ -486,10 +493,10 @@ static DBusSignalVTable sink_signals[] = {  struct sink *sink_init(struct audio_device *dev)  { -	if (!dbus_connection_register_interface(dev->conn, dev->path, -						AUDIO_SINK_INTERFACE, -						sink_methods, -						sink_signals, NULL)) +	if (!g_dbus_register_interface(dev->conn, dev->path, +					AUDIO_SINK_INTERFACE, +					sink_methods, sink_signals, NULL, +					dev, NULL))  		return NULL;  	return g_new0(struct sink, 1); | 
