public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
From: fabchevalier@free.fr
To: BlueZ development <bluez-devel@lists.sourceforge.net>,
	Marcel Holtmann <marcel@holtmann.org>
Cc: BlueZ development <bluez-devel@lists.sourceforge.net>
Subject: Re: [Bluez-devel] [PATCH 1/3] move common exceptions to common/ directory
Date: Sun, 28 Oct 2007 19:01:41 +0100	[thread overview]
Message-ID: <1193594501.4724ce8595cbb@imp.free.fr> (raw)
In-Reply-To: <1193595382.5096.15.camel@aeonflux>

[-- Attachment #1: Type: text/plain, Size: 532 bytes --]


Hi Marcel

> I like to have org.bluez.Error only. There is no need to get an extra
> hierarchy level.
>

That's basically how things are today... however if have no objection if you
want to change that...

Btw did you have a look at the  send_message_and_unref ==>
dbus_connection_send_and_unref patch ? Is it ok for you ? (Aven't tested but i
think those three patches may depend on it)

Please find attached an updated patchset moving everything to org.bluez.Error...
as usual, any more comments are welcomed :-)

Cheers,

Fabien

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: exceptions-rework-audio.diff --]
[-- Type: text/x-patch; name="exceptions-rework-audio.diff", Size: 19813 bytes --]

diff -x Entries -x Makefile.in -u -r -N utils/audio/device.c utils2/audio/device.c
--- utils/audio/device.c	2007-10-27 14:52:45.000000000 +0000
+++ utils2/audio/device.c	2007-10-27 21:21:08.000000000 +0000
@@ -45,7 +45,7 @@
 #include "logging.h"
 #include "textfile.h"
 
-#include "error.h"
+#include "common-error.h"
 #include "ipc.h"
 #include "device.h"
 #include "avdtp.h"
diff -x Entries -x Makefile.in -u -r -N utils/audio/error.c utils2/audio/error.c
--- utils/audio/error.c	2007-10-27 14:46:19.000000000 +0000
+++ utils2/audio/error.c	2007-10-28 17:48:34.000000000 +0000
@@ -30,80 +30,7 @@
 
 #include "dbus-helper.h"
 
-#include "error.h"
+#include "common-error.h"
 #include "logging.h"
 
-#define AUDIO_ERROR_INTERFACE "org.bluez.audio.Error"
-
-/* FIXME: Remove these once global error functions exist */
-static DBusHandlerResult error_reply(DBusConnection *conn, DBusMessage *msg,
-					const char *name, const char *descr)
-{
-	DBusMessage *derr;
-
-	if (!conn || !msg)
-		return DBUS_HANDLER_RESULT_HANDLED;
-
-	derr = dbus_message_new_error(msg, name, descr);
-	if (!derr) {
-		error("Unable to allocate new error return");
-		return DBUS_HANDLER_RESULT_NEED_MEMORY;
-	}
-
-	return dbus_connection_send_and_unref(conn, derr);
-}
-
-DBusHandlerResult err_invalid_args(DBusConnection *conn,
-					DBusMessage *msg, const char *descr)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".InvalidArguments",
-				descr ? descr : "Invalid arguments in method call");
-}
-
-DBusHandlerResult err_already_connected(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".AlreadyConnected",
-					"Already connected to a device");
-}
-
-DBusHandlerResult err_not_connected(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".NotConnected",
-					"Not connected to any device");
-}
-
-DBusHandlerResult err_not_supported(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".NotSupported",
-				"The service is not supported by the remote device");
-}
-
-DBusHandlerResult err_connect_failed(DBusConnection *conn,
-					DBusMessage *msg, const char *err)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".ConnectFailed", err);
-}
-
-DBusHandlerResult err_does_not_exist(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_reply(conn, msg,
-				AUDIO_ERROR_INTERFACE ".DoesNotExist",
-							"Does not exist");
-}
-
-DBusHandlerResult err_not_available(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_reply(conn, msg, AUDIO_ERROR_INTERFACE ".NotAvailable",
-				"Not available");
-}
-
-DBusHandlerResult err_failed(DBusConnection *conn,
-					DBusMessage *msg, const char *dsc)
-{
-	return error_reply(conn, msg, AUDIO_ERROR_INTERFACE ".Failed", dsc);
-}
+/* To be filled once audio service specific errors are defined */
diff -x Entries -x Makefile.in -u -r -N utils/audio/error.h utils2/audio/error.h
--- utils/audio/error.h	2007-10-23 17:17:47.000000000 +0000
+++ utils2/audio/error.h	2007-10-27 21:21:54.000000000 +0000
@@ -22,14 +22,9 @@
  *
  */
 
-DBusHandlerResult err_invalid_args(DBusConnection *conn,
-					DBusMessage *msg, const char *descr);
-DBusHandlerResult err_already_connected(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult err_not_connected(DBusConnection *conn, DBusMessage * msg);
-DBusHandlerResult err_not_supported(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult err_connect_failed(DBusConnection *conn,
-					DBusMessage *msg, const char *err);
-DBusHandlerResult err_does_not_exist(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult err_not_available(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult err_failed(DBusConnection *conn,
-					DBusMessage *msg, const char *dsc);
+/**
+  This file must only contain errors that are specific to the audio service.
+  As such they will be found in the org.bluez.audio.Error namespace.
+  If errors are not specific to the audio service, they must be declared
+  in common-error.h, so that other services can use it
+*/
diff -x Entries -x Makefile.in -u -r -N utils/audio/headset.c utils2/audio/headset.c
--- utils/audio/headset.c	2007-10-27 14:32:53.000000000 +0000
+++ utils2/audio/headset.c	2007-10-27 21:45:57.000000000 +0000
@@ -54,7 +54,7 @@
 #include "logging.h"
 #include "device.h"
 #include "manager.h"
-#include "error.h"
+#include "common-error.h"
 #include "headset.h"
 
 #define RING_INTERVAL 3000
@@ -384,7 +384,7 @@
 static void pending_connect_failed(struct pending_connect *c, struct device *dev)
 {
 	if (c->msg)
-		err_connect_failed(dev->conn, c->msg, strerror(c->err));
+		error_connection_attempt_failed(dev->conn, c->msg, c->err);
 	if (c->cb)
 		c->cb(NULL, c->cb_data);
 	pending_connect_free(c);
@@ -680,7 +680,7 @@
 
 failed_not_supported:
 	if (c->msg) {
-		err_not_supported(device->conn, c->msg);
+		error_not_supported(device->conn, c->msg);
 		dbus_message_unref(c->msg);
 		c->msg = NULL;
 	}
@@ -721,10 +721,10 @@
 		if (c->msg) {
 			if (dbus_error_has_name(&derr,
 						"org.bluez.Error.ConnectionAttemptFailed"))
-				err_connect_failed(device->conn, c->msg,
-					strerror(EHOSTDOWN));
+				error_connection_attempt_failed(device->conn, c->msg,
+					EHOSTDOWN);
 			else
-				err_not_supported(device->conn, c->msg);
+				error_not_supported(device->conn, c->msg);
 		}
 		dbus_error_free(&derr);
 		goto failed;
@@ -738,21 +738,21 @@
 		error("Unable to get args from reply: %s", derr.message);
 		dbus_error_free(&derr);
 		if (c->msg)
-			err_not_supported(device->conn, c->msg);
+			error_not_supported(device->conn, c->msg);
 		goto failed;
 	}
 
 	if (!array) {
 		error("get_handles_reply: Unable to get handle array from reply");
 		if (c->msg)
-			err_not_supported(device->conn, c->msg);
+			error_not_supported(device->conn, c->msg);
 		goto failed;
 	}
 
 	if (array_len < 1) {
 		debug("No record handles found");
 		if (c->msg)
-			err_not_supported(device->conn, c->msg);
+			error_not_supported(device->conn, c->msg);
 		goto failed;
 	}
 
@@ -765,7 +765,7 @@
 	if (!msg) {
 		error("Unable to allocate new method call");
 		if (c->msg)
-			err_connect_failed(device->conn, c->msg, strerror(ENOMEM));
+			error_out_of_memory(device->conn, c->msg);
 		goto failed;
 	}
 
@@ -780,7 +780,7 @@
 	if (!dbus_connection_send_with_reply(device->conn, msg, &pending, -1)) {
 		error("Sending GetRemoteServiceRecord failed");
 		if (c->msg)
-			err_connect_failed(device->conn, c->msg, strerror(EIO));
+			error_connection_attempt_failed(device->conn, c->msg, EIO);
 		goto failed;
 	}
 
@@ -945,7 +945,7 @@
 		return DBUS_HANDLER_RESULT_NEED_MEMORY;
 
 	if (hs->state < HEADSET_STATE_PLAY_IN_PROGRESS)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	headset_set_state(device, HEADSET_STATE_CONNECTED);
 	dbus_connection_send_and_unref(conn, reply);
@@ -988,7 +988,7 @@
 		return DBUS_HANDLER_RESULT_NEED_MEMORY;
 
 	if (hs->state == HEADSET_STATE_DISCONNECTED)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	headset_set_state(device, HEADSET_STATE_DISCONNECTED);
 	ba2str(&device->dst, hs_address);
@@ -1030,7 +1030,7 @@
 	int err;
 
 	if (hs->state > HEADSET_STATE_DISCONNECTED)
-		return err_already_connected(conn, msg);
+		return error_already_connected(conn, msg);
 
 	c = g_try_new0(struct pending_connect, 1);
 	if (!c) {
@@ -1048,7 +1048,7 @@
 
 error:
 	pending_connect_free(c);
-	return err_connect_failed(conn, msg, strerror(-err));
+	return error_connection_attempt_failed(conn, msg, -err);
 }
 
 static gboolean ring_timer_cb(gpointer data)
@@ -1069,7 +1069,7 @@
 	DBusMessage *reply = NULL;
 
 	if (hs->state < HEADSET_STATE_CONNECTED)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1082,7 +1082,7 @@
 
 	if (headset_send(device->headset, "\r\nRING\r\n") != G_IO_ERROR_NONE) {
 		dbus_message_unref(reply);
-		return err_failed(conn, msg, "Failed");
+		return error_failed(conn, msg, "Failed");
 	}
 
 	hs->ring_timer = g_timeout_add(RING_INTERVAL, ring_timer_cb, device);
@@ -1102,7 +1102,7 @@
 	DBusMessage *reply = NULL;
 
 	if (hs->state < HEADSET_STATE_CONNECTED)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1131,10 +1131,10 @@
 	int err;
 
 	if (hs->state < HEADSET_STATE_CONNECTED)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	if (hs->state >= HEADSET_STATE_PLAY_IN_PROGRESS)
-		return err_already_connected(conn, msg);
+		return error_already_connected(conn, msg);
 
 	c = g_try_new0(struct pending_connect, 1);
 	if (!c)
@@ -1145,7 +1145,7 @@
 	err = sco_connect(device, c);
 	if (err < 0) {
 		pending_connect_free(c);
-		return err_failed(conn, msg, strerror(-err));
+		return error_failed(conn, msg, strerror(-err));
 	}
 
 	return DBUS_HANDLER_RESULT_HANDLED;
@@ -1161,7 +1161,7 @@
 	dbus_uint16_t gain;
 
 	if (hs->state < HEADSET_STATE_CONNECTED || hs->sp_gain < 0)
-		return err_not_available(conn, msg);
+		return error_not_available(conn, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1187,7 +1187,7 @@
 	dbus_uint16_t gain;
 
 	if (hs->state < HEADSET_STATE_CONNECTED || hs->mic_gain < 0)
-		return err_not_available(conn, msg);
+		return error_not_available(conn, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1215,20 +1215,20 @@
 	char str[13];
 
 	if (hs->state < HEADSET_STATE_CONNECTED)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	dbus_error_init(&derr);
 	dbus_message_get_args(msg, &derr, DBUS_TYPE_UINT16, &gain,
 				DBUS_TYPE_INVALID);
 
 	if (dbus_error_is_set(&derr)) {
-		err_invalid_args(conn, msg, derr.message);
+		error_invalid_arguments(conn, msg, derr.message);
 		dbus_error_free(&derr);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
 
 	if (gain > 15)
-		return err_invalid_args(conn, msg,
+		return error_invalid_arguments(conn, msg,
 					"Must be less than or equal to 15");
 
 	reply = dbus_message_new_method_return(msg);
@@ -1242,7 +1242,7 @@
 
 	if (headset_send(device->headset, str) != G_IO_ERROR_NONE) {
 		dbus_message_unref(reply);
-		return err_failed(conn, msg, "Unable to send to headset");
+		return error_failed(conn, msg, "Unable to send to headset");
 	}
 
 done:
diff -x Entries -x Makefile.in -u -r -N utils/audio/manager.c utils2/audio/manager.c
--- utils/audio/manager.c	2007-10-27 14:51:58.000000000 +0000
+++ utils2/audio/manager.c	2007-10-27 21:43:57.000000000 +0000
@@ -53,7 +53,7 @@
 #include "textfile.h"
 #include "ipc.h"
 #include "device.h"
-#include "error.h"
+#include "common-error.h"
 #include "avdtp.h"
 #include "a2dp.h"
 #include "headset.h"
@@ -326,7 +326,7 @@
 	if (dbus_error_is_set(&derr)) {
 		error("Unable to get message args");
 		success = FALSE;
-		err_failed(connection, data->msg, derr.message);
+		error_failed(connection, data->msg, derr.message);
 		dbus_error_free(&derr);
 		goto done;
 	}
@@ -335,14 +335,14 @@
 	if (!data->records) {
 		debug("No audio audio related service records were found");
 		success = FALSE;
-		err_not_supported(connection, data->msg);
+		error_not_supported(connection, data->msg);
 		goto done;
 	}
 
 	reply = dbus_message_new_method_return(data->msg);
 	if (!reply) {
 		success = FALSE;
-		err_failed(connection, data->msg, "Out of memory");
+		error_failed(connection, data->msg, "Out of memory");
 		goto done;
 	}
 
@@ -394,10 +394,10 @@
 		error("GetRemoteServiceRecord failed: %s", derr.message);
 		if (dbus_error_has_name(&derr,
 					"org.bluez.Error.ConnectionAttemptFailed"))
-			err_connect_failed(connection, data->msg,
-				strerror(EHOSTDOWN));
+			error_connection_attempt_failed(connection, data->msg,
+				EHOSTDOWN);
 		else
-			err_failed(connection, data->msg, derr.message);
+			error_failed(connection, data->msg, derr.message);
 		dbus_error_free(&derr);
 		goto failed;
 	}
@@ -405,7 +405,7 @@
 	if (!dbus_message_get_args(reply, NULL,
 				DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &array, &array_len,
 				DBUS_TYPE_INVALID)) {
-		err_failed(connection, data->msg,
+		error_failed(connection, data->msg,
 				"Unable to get args from GetRecordReply");
 		goto failed;
 	}
@@ -451,7 +451,7 @@
 						"GetRemoteServiceRecord");
 	if (!msg) {
 		error("Unable to allocate new method call");
-		err_connect_failed(connection, data->msg, strerror(ENOMEM));
+		error_out_of_memory(connection, data->msg);
 		finish_sdp(data, FALSE);
 		return;
 	}
@@ -470,7 +470,7 @@
 
 	if (!dbus_connection_send_with_reply(connection, msg, &pending, -1)) {
 		error("Sending GetRemoteServiceRecord failed");
-		err_connect_failed(connection, data->msg, strerror(EIO));
+		error_connection_attempt_failed(connection, data->msg, EIO);
 		finish_sdp(data, FALSE);
 		return;
 	}
@@ -508,9 +508,10 @@
 		error("GetRemoteServiceHandles failed: %s", derr.message);
 		if (dbus_error_has_name(&derr,
 					"org.bluez.Error.ConnectionAttemptFailed"))
-			err_connect_failed(connection, data->msg, strerror(EHOSTDOWN));
+			error_connection_attempt_failed(connection, data->msg, 
+						EHOSTDOWN);
 		else
-			err_failed(connection, data->msg, derr.message);
+			error_failed(connection, data->msg, derr.message);
 		dbus_error_free(&derr);
 		goto failed;
 	}
@@ -519,7 +520,7 @@
 				DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32,
 				&array, &array_len,
 				DBUS_TYPE_INVALID)) {
-		err_failed(connection, data->msg,
+		error_failed(connection, data->msg,
 				"Unable to get args from reply");
 		goto failed;
 	}
@@ -570,7 +571,7 @@
 						"org.bluez.Adapter",
 						"GetRemoteServiceHandles");
 	if (!msg) {
-		err_failed(connection, data->msg,
+		error_failed(connection, data->msg,
 				"Could not create a new dbus message");
 		goto failed;
 	}
@@ -582,7 +583,7 @@
 					DBUS_TYPE_INVALID);
 
 	if (!dbus_connection_send_with_reply(connection, msg, &pending, -1)) {
-		err_failed(connection, data->msg,
+		error_failed(connection, data->msg,
 				"Sending GetRemoteServiceHandles failed");
 		goto failed;
 	}
@@ -735,7 +736,7 @@
 				DBUS_TYPE_INVALID);
 
 	if (dbus_error_is_set(&derr)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		dbus_error_free(&derr);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
@@ -825,18 +826,18 @@
 	if (!dbus_message_get_args(msg, &derr,
 					DBUS_TYPE_STRING, &path,
 					DBUS_TYPE_INVALID)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
 	if (dbus_error_is_set(&derr)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		dbus_error_free(&derr);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
 
 	match = g_slist_find_custom(devices, path, device_path_cmp);
 	if (!match)
-		return err_does_not_exist(connection, msg);
+		return error_device_does_not_exist(connection, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -906,7 +907,7 @@
 				DBUS_TYPE_STRING, &address,
 				DBUS_TYPE_INVALID);
 	if (dbus_error_is_set(&derr)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		dbus_error_free(&derr);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
@@ -915,7 +916,7 @@
 	device = manager_find_device(&bda, NULL, FALSE);
 
 	if (!device)
-		return err_does_not_exist(conn, msg);
+		return error_device_does_not_exist(conn, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -934,12 +935,12 @@
 	DBusMessage *reply;
 
 	if (!default_dev)
-		return err_does_not_exist(connection, msg);
+		return error_device_does_not_exist(connection, msg);
 
 	if (default_dev->headset == NULL &&
 		dbus_message_is_method_call(msg, AUDIO_MANAGER_INTERFACE,
 							"DefaultHeadset"))
-		return err_does_not_exist(connection, msg);
+		return error_device_does_not_exist(connection, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -965,18 +966,18 @@
 	if (!dbus_message_get_args(msg, &derr,
 					DBUS_TYPE_STRING, &path,
 					DBUS_TYPE_INVALID)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
 	if (dbus_error_is_set(&derr)) {
-		err_invalid_args(connection, msg, derr.message);
+		error_invalid_arguments(connection, msg, derr.message);
 		dbus_error_free(&derr);
 		return DBUS_HANDLER_RESULT_HANDLED;
 	}
 
 	match = g_slist_find_custom(devices, path, device_path_cmp);
 	if (!match)
-		return err_does_not_exist(connection, msg);
+		return error_device_does_not_exist(connection, msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -998,7 +999,7 @@
 						DBUS_TYPE_STRING, &device->path,
 						DBUS_TYPE_INVALID);
 	else
-		return err_does_not_exist(connection, msg);
+		return error_device_does_not_exist(connection, msg);
 
 	default_dev = device;
 	device_store(device, TRUE);
diff -x Entries -x Makefile.in -u -r -N utils/audio/sink.c utils2/audio/sink.c
--- utils/audio/sink.c	2007-10-27 14:45:38.000000000 +0000
+++ utils2/audio/sink.c	2007-10-27 21:48:38.000000000 +0000
@@ -40,7 +40,7 @@
 #include "avdtp.h"
 #include "device.h"
 #include "a2dp.h"
-#include "error.h"
+#include "common-error.h"
 #include "sink.h"
 
 #define STREAM_SETUP_RETRY_TIMER 2000
@@ -147,7 +147,7 @@
 		dbus_connection_send_and_unref(pending->conn, reply);
 	} else {
 		debug("Stream setup failed, after XCASE connect:connect");
-		err_failed(pending->conn, pending->msg, "Stream setup failed");
+		error_failed(pending->conn, pending->msg, "Stream setup failed");
 	}
 
 	sink->connect = NULL;
@@ -182,7 +182,7 @@
 					stream_setup_retry, sink);
 		} else {
 			sink->connect = NULL;
-			err_failed(pending->conn, pending->msg, "Stream setup failed");
+			error_failed(pending->conn, pending->msg, "Stream setup failed");
 			pending_request_free(pending);
 			debug("Stream setup failed : %s", avdtp_strerror(err));
 		}
@@ -201,14 +201,14 @@
 		sink->session = avdtp_get(&dev->src, &dev->dst);
 
 	if (!sink->session)
-		return err_connect_failed(conn, msg,
+		return error_failed(conn, msg,
 						"Unable to get a session");
 
 	if (sink->connect || sink->disconnect)
-		return err_connect_failed(conn, msg, "Connect in progress");
+		return error_in_progress(conn, msg, "Device connection already in progress");
 
 	if (sink->state >= AVDTP_STATE_OPEN)
-		return err_already_connected(conn, msg);
+		return error_already_connected(conn, msg);
 
 	pending = g_new0(struct pending_request, 1);
 	pending->conn = dbus_connection_ref(conn);
@@ -223,8 +223,7 @@
 		sink->connect = NULL;
 		avdtp_unref(sink->session);
 		sink->session = NULL;
-		return err_connect_failed(conn, msg,
-						"Failed to request a stream");
+		return error_failed(conn, msg, "Failed to request a stream");
 	}
 
 	debug("stream creation in progress");
@@ -243,10 +242,10 @@
 	int err;
 
 	if (!sink->session)
-		return err_not_connected(conn, msg);
+		return error_not_connected(conn, msg);
 
 	if (sink->connect || sink->disconnect)
-		return err_failed(conn, msg, strerror(EBUSY));
+		return error_failed(conn, msg, strerror(EBUSY));
 
 	if (sink->state < AVDTP_STATE_OPEN) {
 		DBusMessage *reply = dbus_message_new_method_return(msg);
@@ -259,7 +258,7 @@
 
 	err = avdtp_close(sink->session, sink->stream);
 	if (err < 0)
-		return err_failed(conn, msg, strerror(-err));
+		return error_failed(conn, msg, strerror(-err));
 
 	pending = g_new0(struct pending_request, 1);
 	pending->conn = dbus_connection_ref(conn);

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: exceptions-rework-common.diff --]
[-- Type: text/x-patch; name="exceptions-rework-common.diff", Size: 9966 bytes --]

diff -x Entries -x Makefile.in -u -r -N utils/common/common-error.c utils2/common/common-error.c
--- utils/common/common-error.c	1970-01-01 00:00:00.000000000 +0000
+++ utils2/common/common-error.c	2007-10-28 17:51:53.000000000 +0000
@@ -0,0 +1,138 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2006-2007  Nokia Corporation
+ *  Copyright (C) 2004-2007  Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <errno.h>
+
+#include "dbus-helper.h"
+#include "common-error.h"
+
+DBusHandlerResult error_device_unreachable(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".DeviceUnreachable",
+							"Device Unreachable");
+}
+
+DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, DBusMessage *msg, int err)
+{
+	return error_common_reply(conn, msg,
+				ERROR_INTERFACE ".ConnectionAttemptFailed",
+				err ? strerror(err) : "Connection attempt failed");
+}
+
+DBusHandlerResult error_already_connected(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg,
+				ERROR_INTERFACE ".AlreadyConnected",
+				"Already connected to a device");
+}
+
+DBusHandlerResult error_in_progress(DBusConnection *conn, DBusMessage *msg, 
+						const char *str)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".InProgress", str);
+}
+
+DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg,
+						const char *descr)
+{
+	return error_common_reply(conn, msg,
+				ERROR_INTERFACE ".InvalidArguments",
+				descr ? descr : "Invalid arguments in method call");
+}
+
+DBusHandlerResult error_out_of_memory(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".OutOfMemory",
+							"Out of memory");
+}
+
+DBusHandlerResult error_not_available(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".NotAvailable",
+							"Not available");
+}
+
+DBusHandlerResult error_not_supported(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".NotSupported",
+							"Not supported");
+}
+
+DBusHandlerResult error_not_connected(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".NotConnected",
+							"Not connected");
+}
+
+DBusHandlerResult error_already_exists(DBusConnection *conn, DBusMessage *msg, const char *str)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".AlreadyExists", str);
+}
+
+DBusHandlerResult error_does_not_exist(DBusConnection *conn, DBusMessage *msg, const char *str)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".DoesNotExist", str);
+}
+
+DBusHandlerResult error_device_does_not_exist(DBusConnection *conn, DBusMessage *msg)
+{
+	return error_does_not_exist(conn, msg, "Device does not exist");
+}
+
+DBusHandlerResult error_canceled(DBusConnection *conn, DBusMessage *msg, const char *str)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".Canceled", str);
+}
+
+DBusHandlerResult error_failed(DBusConnection *conn, DBusMessage *msg, const char * desc)
+{
+	return error_common_reply(conn, msg, ERROR_INTERFACE ".Failed", desc);
+}
+
+DBusHandlerResult error_failed_errno(DBusConnection *conn, DBusMessage *msg, int err)
+{
+	const char *desc = strerror(err);
+
+	return error_failed(conn, msg, desc);
+}
+
+DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
+					const char *name, const char *descr)
+{
+	DBusMessage *derr;
+
+	if (!conn || !msg)
+		return DBUS_HANDLER_RESULT_HANDLED;
+
+	derr = dbus_message_new_error(msg, name, descr);
+	if (!derr)
+		return DBUS_HANDLER_RESULT_NEED_MEMORY;
+
+	return dbus_connection_send_and_unref(conn, derr);
+}
diff -x Entries -x Makefile.in -u -r -N utils/common/common-error.h utils2/common/common-error.h
--- utils/common/common-error.h	1970-01-01 00:00:00.000000000 +0000
+++ utils2/common/common-error.h	2007-10-28 17:48:02.000000000 +0000
@@ -0,0 +1,148 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2006-2007  Nokia Corporation
+ *  Copyright (C) 2004-2007  Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <dbus/dbus.h>
+
+#define ERROR_INTERFACE "org.bluez.core.Error"
+
+/**
+  org.bluez.Error.DeviceUnreachable:
+
+  The remote device is either powered down or out of reach.
+*/
+DBusHandlerResult error_device_unreachable(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.ConnectionAttemptFailed: 
+
+  An unexpected error (other than DeviceUnreachable) error has occured while
+  attempting a connection to a device
+*/
+DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, DBusMessage *msg, int err);
+
+/** 
+  org.bluez.Error.AlreadyConnected: 
+
+  A connection request has been received on an already connected device.
+*/
+DBusHandlerResult error_already_connected(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.NotConnected: 
+
+  The remote device is not connected, while the method call
+  would expect it to be, or is not in the expected state to
+  perform the action
+*/
+DBusHandlerResult error_not_connected(DBusConnection *conn, DBusMessage *msg);
+
+/**
+  org.bluez.Error.InProgress: 
+
+  The request is already in progress.
+*/
+DBusHandlerResult error_in_progress(DBusConnection *conn, DBusMessage *msg, const char *str);
+
+/**
+  org.bluez.Error.InvalidArguments: 
+
+  The DBUS request does not contain the right number of
+  arguments with the right type, or the arguments are there but
+  their value is wrong.
+*/
+DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg, const char *str);
+
+/**
+  org.bluez.Error.OutOfMemory: 
+
+  Not much to add
+*/
+DBusHandlerResult error_out_of_memory(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.NotAvailable: 
+
+  The requested information is not there.
+  Examples of use: Adapter object when remote info is not available, or Database
+  object record is not found
+*/
+DBusHandlerResult error_not_available(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.NotSupported: 
+
+  The remote device does not supopt the expected feature.
+  Examples of use: trying to connect to audio device while audio is not
+  declared in device sdp record.
+*/
+DBusHandlerResult error_not_supported(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.AlreadyExists: 
+
+  One of the requested elements already exists
+  Examples of use: Bonding, record, passkey agent, auth agent... already exists
+*/
+DBusHandlerResult error_already_exists(DBusConnection *conn, DBusMessage *msg, const char *str);
+
+/** 
+  org.bluez.Error.DoesNotExist: 
+
+  One of the requested elements does not exist
+  Examples of use: Bonding, record, passkey agent, auth agent, bluetooth device ... does
+  not exist.
+*/
+DBusHandlerResult error_does_not_exist(DBusConnection *conn, DBusMessage *msg, const char *str);
+
+/** 
+  org.bluez.Error.DoesNotExist: 
+
+  Same as error_does_not_exist, but with device error message
+*/
+DBusHandlerResult error_device_does_not_exist(DBusConnection *conn, DBusMessage *msg);
+
+/** 
+  org.bluez.Error.Canceled: 
+*/
+DBusHandlerResult error_canceled(DBusConnection *conn, DBusMessage *msg, const char *str);
+
+/**
+  org.bluez.Error.Failed:
+
+  This is a the most generic error.
+  desc filed is MANDATORY
+*/
+DBusHandlerResult error_failed(DBusConnection *conn, DBusMessage *msg, const char *desc);
+
+/**
+  org.bluez.Error.Failed:
+
+  This is a the most generic error, instantiated form a UNIX errno number.
+*/
+DBusHandlerResult error_failed_errno(DBusConnection *conn, DBusMessage *msg, int err);
+
+
+/* Helper function */
+DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
+					const char *name, const char *descr);
diff -x Entries -x Makefile.in -u -r -N utils/common/Makefile.am utils2/common/Makefile.am
--- utils/common/Makefile.am	2007-03-20 14:48:01.000000000 +0000
+++ utils2/common/Makefile.am	2007-10-27 15:53:23.000000000 +0000
@@ -26,6 +26,7 @@
 libhelper_a_SOURCES = oui.h oui.c dbus.h dbus.c \
 	textfile.h textfile.c logging.h logging.c \
 	dbus-helper.h dbus-helper.c \
+	common-error.h common-error.c \
 	sdp-xml.h sdp-xml.c $(sdp_sources) \
 	hal.h $(hal_sources) notify.h $(notify_sources)
 

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: exceptions-rework-hcid.diff --]
[-- Type: text/x-patch; name="exceptions-rework-hcid.diff", Size: 60275 bytes --]

diff -x Entries -x Makefile.in -u -r -N utils/hcid/adapter.c utils2/hcid/adapter.c
--- utils/hcid/adapter.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/adapter.c	2007-10-27 20:53:59.000000000 +0000
@@ -60,6 +60,7 @@
 #include "dbus-hci.h"
 #include "dbus-sdp.h"
 #include "dbus-error.h"
+#include "common-error.h"
 
 #define NUM_ELEMENTS(table) (sizeof(table)/sizeof(const char *))
 
@@ -365,7 +366,7 @@
 	DBusMessage *reply;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -386,11 +387,11 @@
 	int err;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	err = get_device_version(adapter->dev_id, str, sizeof(str));
 	if (err < 0)
-		return error_failed(conn, msg, -err);
+		return error_failed_errno(conn, msg, -err);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -411,11 +412,11 @@
 	int err;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	err = get_device_revision(adapter->dev_id, str, sizeof(str));
 	if (err < 0)
-		return error_failed(conn, msg, -err);
+		return error_failed_errno(conn, msg, -err);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -436,11 +437,11 @@
 	int err;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	err = get_device_manufacturer(adapter->dev_id, str, sizeof(str));
 	if (err < 0)
-		return error_failed(conn, msg, -err);
+		return error_failed_errno(conn, msg, -err);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -461,11 +462,11 @@
 	int err;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	err = get_device_company(adapter->dev_id, str, sizeof(str));
 	if (err < 0)
-		return error_failed(conn, msg, -err);
+		return error_failed_errno(conn, msg, -err);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -487,7 +488,7 @@
 	int i;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -513,7 +514,7 @@
 	const char *mode;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -542,10 +543,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &mode,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (!mode)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	new_mode = str2mode(adapter->address, mode);
 	switch(new_mode) {
@@ -560,7 +561,7 @@
 		scan_enable = (SCAN_PAGE | SCAN_INQUIRY);
 		break;
 	default:
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	/* Do reverse resolution in case of "on" mode */
@@ -584,7 +585,7 @@
 				adapter->dev_id, strerror(errno), errno);
 
 			hci_close_dev(dd);
-			return error_failed(conn, msg, err);
+			return error_failed_errno(conn, msg, err);
 		}
 	}
 
@@ -592,7 +593,7 @@
 			hcid.offmode == HCID_OFFMODE_DEVDOWN) {
 		if (ioctl(dd, HCIDEVDOWN, adapter->dev_id) < 0) {
 			hci_close_dev(dd);
-			return error_failed(conn, msg, errno);
+			return error_failed_errno(conn, msg, errno);
 		}
 
 		goto done;
@@ -602,7 +603,7 @@
 	err = set_limited_discoverable(dd, adapter->class, limited);
 	if (err < 0) {
 		hci_close_dev(dd);
-		return error_failed(conn, msg, -err);
+		return error_failed_errno(conn, msg, -err);
 	}
 
 	if (current_scan != scan_enable) {
@@ -623,14 +624,14 @@
 			error("Sending write scan enable command failed: %s (%d)",
 					strerror(errno), errno);
 			hci_close_dev(dd);
-			return error_failed(conn, msg, err);
+			return error_failed_errno(conn, msg, err);
 		}
 
 		if (status) {
 			error("Setting scan enable failed with status 0x%02x",
 					status);
 			hci_close_dev(dd);
-			return error_failed(conn, msg, bt_error(status));
+			return error_failed_errno(conn, msg, bt_error(status));
 		}
 	} else {
 		/* discoverable or limited */
@@ -673,7 +674,7 @@
 	DBusMessage *reply;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -700,7 +701,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_UINT32, &timeout,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -739,7 +740,7 @@
 	dbus_bool_t connectable = FALSE;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (scan_enable & SCAN_PAGE)
 		connectable = TRUE;
@@ -763,7 +764,7 @@
 	dbus_bool_t discoverable = FALSE;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (scan_enable & SCAN_INQUIRY)
 		discoverable = TRUE;
@@ -793,10 +794,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &peer_addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(peer_addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(peer_addr, &peer_bdaddr);
 
@@ -824,7 +825,7 @@
 	GSList *l = adapter->active_conn;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -860,7 +861,7 @@
 	const char *str_ptr = "computer";
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -888,7 +889,7 @@
 	int size, i;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	major_class = adapter->class[1] & 0x1F;
 
@@ -930,7 +931,7 @@
 	uint8_t minor_class;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* FIXME: Currently, only computer major class is supported */
 	if ((adapter->class[1] & 0x1f) != 1)
@@ -970,10 +971,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &minor,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (!minor)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	dd = hci_open_dev(adapter->dev_id);
 	if (dd < 0)
@@ -994,7 +995,7 @@
 	/* Check if it's a valid minor class */
 	if (dev_class == 0xFFFFFFFF) {
 		hci_close_dev(dd);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	/* set the service class and major class  */
@@ -1005,7 +1006,7 @@
 		error("Can't write class of device on hci%d: %s(%d)",
 				adapter->dev_id, strerror(errno), errno);
 		hci_close_dev(dd);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	dbus_connection_emit_signal(conn, dbus_message_get_path(msg),
@@ -1035,7 +1036,7 @@
 		return error_not_ready(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1069,7 +1070,7 @@
 	bdaddr_t ba;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(adapter->address, &ba);
 
@@ -1080,7 +1081,7 @@
 
 		err = get_device_name(adapter->dev_id, str, sizeof(str));
 		if (err < 0)
-			return error_failed(conn, msg, -err);
+			return error_failed_errno(conn, msg, -err);
 	}
 
 	reply = dbus_message_new_method_return(msg);
@@ -1105,11 +1106,11 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &str_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (!g_utf8_validate(str_ptr, -1, NULL)) {
 		error("Name change failed: the supplied name isn't valid UTF-8");
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	str2ba(adapter->address, &bdaddr);
@@ -1121,7 +1122,7 @@
 
 	ecode = set_device_name(adapter->dev_id, str_ptr);
 	if (ecode < 0)
-		return error_failed(conn, msg, -ecode);
+		return error_failed_errno(conn, msg, -ecode);
 
 done:
 	reply = dbus_message_new_method_return(msg);
@@ -1151,10 +1152,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1333,10 +1334,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"manufacturers");
@@ -1405,10 +1406,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1448,10 +1449,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"manufacturers");
@@ -1485,7 +1486,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &str_bdaddr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(str_bdaddr, &bdaddr);
 	ba2oui(&bdaddr, oui);
@@ -1519,12 +1520,12 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_peer,
 				DBUS_TYPE_INVALID)) {
-		error_invalid_arguments(conn, msg);
+		error_invalid_arguments(conn, msg, NULL);
 		return -1;
 	}
 
 	if (check_address(addr_peer) < 0) {
-		error_invalid_arguments(conn, msg);
+		error_invalid_arguments(conn, msg, NULL);
 		return -1;
 	}
 
@@ -1657,10 +1658,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "features");
 
@@ -1711,10 +1712,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &peer_addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(peer_addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* check if it is in the cache */
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "names");
@@ -1762,10 +1763,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(addr_ptr, &bdaddr);
 
@@ -1796,18 +1797,18 @@
 				DBUS_TYPE_STRING, &addr,
 				DBUS_TYPE_STRING, &alias,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if ((strlen(alias) == 0) || (check_address(addr) < 0)) {
 		error("Alias change failed: Invalid parameter");
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	str2ba(addr, &bdaddr);
 
 	ecode = set_device_alias(adapter->dev_id, &bdaddr, alias);
 	if (ecode < 0)
-		return error_failed(conn, msg, -ecode);
+		return error_failed_errno(conn, msg, -ecode);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1834,11 +1835,11 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0) {
 		error("Alias clear failed: Invalid parameter");
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	str2ba(addr_ptr, &bdaddr);
@@ -1849,7 +1850,7 @@
 
 	ecode = set_device_alias(adapter->dev_id, &bdaddr, NULL);
 	if (ecode < 0)
-		return error_failed(conn, msg, -ecode);
+		return error_failed_errno(conn, msg, -ecode);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1876,10 +1877,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"lastseen");
@@ -1913,10 +1914,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"lastused");
@@ -1962,7 +1963,7 @@
 			   	500) < 0) {
 		int err = errno;
 		error("Disconnect failed");
-		error_failed(pending_dc->conn, pending_dc->msg, err);
+		error_failed_errno(pending_dc->conn, pending_dc->msg, err);
 	} else {
 		reply = dbus_message_new_method_return(pending_dc->msg);
 		if (!reply)
@@ -1999,10 +2000,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &peer_addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(peer_addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(peer_addr, &peer_bdaddr);
 
@@ -2097,7 +2098,7 @@
 	if (getsockopt(sk, SOL_SOCKET, SO_ERROR, &ret, &len) < 0) {
 		error("Can't get socket error: %s (%d)",
 				strerror(errno), errno);
-		error_failed(adapter->bonding->conn, adapter->bonding->rq,
+		error_failed_errno(adapter->bonding->conn, adapter->bonding->rq,
 				errno);
 		goto failed;
 	}
@@ -2116,7 +2117,7 @@
 	if (getsockopt(sk, SOL_L2CAP, L2CAP_CONNINFO, &cinfo, &len) < 0) {
 		error("Can't get connection info: %s (%d)",
 				strerror(errno), errno);
-		error_failed(adapter->bonding->conn, adapter->bonding->rq,
+		error_failed_errno(adapter->bonding->conn, adapter->bonding->rq,
 				errno);
 		goto failed;
 	}
@@ -2145,7 +2146,7 @@
 	if (hci_send_req(dd, &rq, 500) < 0) {
 		error("Unable to send HCI request: %s (%d)",
 					strerror(errno), errno);
-		error_failed(adapter->bonding->conn, adapter->bonding->rq,
+		error_failed_errno(adapter->bonding->conn, adapter->bonding->rq,
 				errno);
 		hci_close_dev(dd);
 		goto failed;
@@ -2154,7 +2155,7 @@
 	if (rp.status) {
 		error("HCI_Authentication_Requested failed with status 0x%02x",
 				rp.status);
-		error_failed(adapter->bonding->conn, adapter->bonding->rq,
+		error_failed_errno(adapter->bonding->conn, adapter->bonding->rq,
 				bt_error(rp.status));
 		hci_close_dev(dd);
 		goto failed;
@@ -2200,10 +2201,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &peer_addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(peer_addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(peer_addr, &peer_bdaddr);
 
@@ -2266,10 +2267,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &peer_addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(peer_addr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(peer_addr, &peer_bdaddr);
 
@@ -2337,10 +2338,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	dd = hci_open_dev(adapter->dev_id);
 	if (dd < 0)
@@ -2362,7 +2363,7 @@
 	if (textfile_casedel(filename, addr_ptr) < 0) {
 		int err = errno;
 		hci_close_dev(dd);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	str2ba(addr_ptr, &bdaddr);
@@ -2381,7 +2382,7 @@
 			int err = errno;
 			error("Disconnect failed");
 			hci_close_dev(dd);
-			return error_failed(conn, msg, err);
+			return error_failed_errno(conn, msg, err);
 		}
 	}
 
@@ -2409,10 +2410,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"linkkeys");
@@ -2448,7 +2449,7 @@
 	char filename[PATH_MAX + 1];
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
 			"linkkeys");
@@ -2481,10 +2482,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(adapter->address, &local);
 
@@ -2518,16 +2519,16 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &addr_ptr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(addr_ptr) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(addr_ptr, &bdaddr);
 
 	val = get_encryption_key_size(adapter->dev_id, &bdaddr);
 	if (val < 0)
-		return error_failed(conn, msg, -val);
+		return error_failed_errno(conn, msg, -val);
 
 	reply = dbus_message_new_method_return(msg);
 
@@ -2554,7 +2555,7 @@
 		return error_not_ready(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (adapter->discov_active || adapter->pdiscov_active)
 		return error_discover_in_progress(conn, msg);
@@ -2586,14 +2587,14 @@
 		error("Unable to start periodic inquiry: %s (%d)",
 				strerror(errno), errno);
 		hci_close_dev(dd);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	if (status) {
 		error("HCI_Periodic_Inquiry_Mode failed with status 0x%02x",
 				status);
 		hci_close_dev(dd);
-		return error_failed(conn, msg, bt_error(status));
+		return error_failed_errno(conn, msg, bt_error(status));
 	}
 
 	adapter->pdiscov_requestor = g_strdup(dbus_message_get_sender(msg));
@@ -2627,7 +2628,7 @@
 		return error_not_ready(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (!adapter->pdiscov_active)
 		return error_not_authorized(conn, msg);
@@ -2641,7 +2642,7 @@
 		if (err == -ENODEV)
 			return error_no_such_adapter(conn, msg);
 		else
-			return error_failed(conn, msg, -err);
+			return error_failed_errno(conn, msg, -err);
 	}
 
 	reply = dbus_message_new_method_return(msg);
@@ -2676,7 +2677,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_BOOLEAN, &resolve,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -2706,7 +2707,7 @@
 	dbus_bool_t resolve = adapter->pdiscov_resolve_names;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -2734,7 +2735,7 @@
 		return error_not_ready(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (adapter->discov_active)
 		return error_discover_in_progress(conn, msg);
@@ -2767,14 +2768,14 @@
 		error("Unable to start inquiry: %s (%d)",
 				strerror(errno), errno);
 		hci_close_dev(dd);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	if (rp.status) {
 		error("HCI_Inquiry command failed with status 0x%02x",
 				rp.status);
 		hci_close_dev(dd);
-		return error_failed(conn, msg, bt_error(rp.status));
+		return error_failed_errno(conn, msg, bt_error(rp.status));
 	}
 
 	method = dbus_message_get_member(msg);
@@ -2807,7 +2808,7 @@
 		return error_not_ready(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* is there discover pending? or discovery cancel was requested
 	 * previously */
@@ -2828,7 +2829,7 @@
 		if (err == -ENODEV)
 			return error_no_such_adapter(conn, msg);
 		else
-			return error_failed(conn, msg, -err);
+			return error_failed_errno(conn, msg, -err);
 	}
 
 	/* Reply before send DiscoveryCompleted */
@@ -2881,7 +2882,7 @@
 	struct remote_device_list_t param = { NULL, 0 };
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* Add Bonded devices to the list */
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "linkkeys");
@@ -2940,12 +2941,12 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &string,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* Date format is "YYYY-MM-DD HH:MM:SS GMT" */
 	len = strlen(string);
 	if (len && (strptime(string, "%Y-%m-%d %H:%M:%S", &date) == NULL))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* Bonded and trusted: mandatory entries(no matter the date/time) */
 	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "linkkeys");
@@ -2997,10 +2998,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -3031,10 +3032,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(adapter->address, &local);
 
@@ -3063,10 +3064,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -3138,7 +3139,7 @@
 		return error_unknown_method(conn, msg);
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -3168,10 +3169,10 @@
 
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
 						DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -3198,7 +3199,7 @@
 
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &path,
 						DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-database.c utils2/hcid/dbus-database.c
--- utils/hcid/dbus-database.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/dbus-database.c	2007-10-27 20:53:59.000000000 +0000
@@ -50,6 +50,7 @@
 #include "dbus-hci.h"
 #include "dbus-common.h"
 #include "dbus-error.h"
+#include "common-error.h"
 #include "dbus-service.h"
 #include "dbus-security.h"
 #include "dbus-database.h"
@@ -109,7 +110,7 @@
 
 	dbus_message_iter_get_fixed_array(&array, &record, &len);
 	if (len <= 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	user_record = g_new0(struct record_data, 1);
 
@@ -118,21 +119,21 @@
 		if (!sdp_record) {
 			error("Parsing of service record failed");
 			g_free(user_record);
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 
 		if (scanned != len) {
 			error("Size mismatch of service record");
 			g_free(user_record);
 			sdp_record_free(sdp_record);
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 
 		if (add_record_to_server(sdp_record) < 0) {
 			error("Failed to register service record");
 			g_free(user_record);
 			sdp_record_free(sdp_record);
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 
 		user_record->handle = sdp_record->handle;
@@ -143,7 +144,7 @@
 						&user_record->handle) < 0) {
 			error("Failed to register service record");
 			g_free(user_record);
-			return error_failed(conn, msg, errno);
+			return error_failed_errno(conn, msg, errno);
 		}
 	}
 
@@ -175,7 +176,7 @@
 
 	if (dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &record, DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	user_record = g_new0(struct record_data, 1);
 
@@ -183,7 +184,7 @@
 	if (!sdp_record) {
 		error("Parsing of XML service record failed");
 		g_free(user_record);
-		return error_failed(conn, msg, EIO);
+		return error_failed_errno(conn, msg, EIO);
 	}
 
 	if (sdp_server_enable) {
@@ -191,7 +192,7 @@
 			error("Failed to register service record");
 			g_free(user_record);
 			sdp_record_free(sdp_record);
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 
 		user_record->handle = sdp_record->handle;
@@ -200,7 +201,7 @@
 			error("Failed to register service record");
 			g_free(user_record);
 			sdp_record_free(sdp_record);
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 
 		user_record->handle = sdp_record->handle;
@@ -243,7 +244,7 @@
 		if (err < 0) {
 			sdp_record_free(sdp_record);
 			error("Failed to update the service record");
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 	} else {
 		sdp_data_t *d = sdp_data_alloc(SDP_UINT32, &handle);
@@ -253,7 +254,7 @@
 		sdp_record_free(sdp_record);
 		if (err < 0) {
 			error("Failed to update the service record");
-			return error_failed(conn, msg, EIO);
+			return error_failed_errno(conn, msg, EIO);
 		}
 	}
 
@@ -278,7 +279,7 @@
 
 	dbus_message_iter_get_fixed_array(&array, &bin_record, &size);
 	if (size <= 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	user_record = find_record(handle, dbus_message_get_sender(msg));
 	if (!user_record)
@@ -287,13 +288,13 @@
 	sdp_record = sdp_extract_pdu(bin_record, &scanned);
 	if (!sdp_record) {
 		error("Parsing of service record failed");
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	if (scanned != size) {
 		error("Size mismatch of service record");
 		sdp_record_free(sdp_record);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	return update_record(conn, msg, handle, sdp_record);
@@ -312,11 +313,11 @@
 			DBUS_TYPE_UINT32, &handle,
 			DBUS_TYPE_STRING, &record,
 			DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	len = (record ? strlen(record) : 0);
 	if (len == 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	user_record = find_record(handle, dbus_message_get_sender(msg));
 	if (!user_record)
@@ -326,7 +327,7 @@
 	if (!sdp_record) {
 		error("Parsing of XML service record failed");
 		sdp_record_free(sdp_record);
-		return error_failed(conn, msg, EIO);
+		return error_failed_errno(conn, msg, EIO);
 	}
 
 	return update_record(conn, msg, handle, sdp_record);
@@ -342,7 +343,7 @@
 
 	if (dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_UINT32, &handle, DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sender = dbus_message_get_sender(msg);
 
@@ -380,12 +381,12 @@
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &ident,
 			DBUS_TYPE_STRING, &name, DBUS_TYPE_STRING, &desc,
 						DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sender = dbus_message_get_sender(msg);
 
 	if (service_register(conn, sender, ident, name, desc) < 0)
-		return error_failed(conn, msg, EIO);
+		return error_failed_errno(conn, msg, EIO);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -403,7 +404,7 @@
 
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &ident,
 						DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sender = dbus_message_get_sender(msg);
 
@@ -415,7 +416,7 @@
 		return error_not_authorized(conn, msg);
 
 	if (service_unregister(conn, service) < 0)
-		return error_failed(conn, msg, EIO);
+		return error_failed_errno(conn, msg, EIO);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -435,7 +436,7 @@
 
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sender = dbus_message_get_sender(msg);
 
@@ -478,7 +479,7 @@
 
 	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) == FALSE)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sender = dbus_message_get_sender(msg);
 
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-error.c utils2/hcid/dbus-error.c
--- utils/hcid/dbus-error.c	2007-10-27 14:54:10.000000000 +0000
+++ utils2/hcid/dbus-error.c	2007-10-27 21:39:25.000000000 +0000
@@ -37,14 +37,7 @@
 #include "dbus-helper.h"
 #include "dbus-common.h"
 #include "dbus-error.h"
-
-DBusHandlerResult error_failed(DBusConnection *conn, DBusMessage *msg, int err)
-{
-	const char *str = strerror(err);
-
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".Failed", str));
-}
+#include "common-error.h"
 
 DBusHandlerResult error_not_ready(DBusConnection *conn, DBusMessage *msg)
 {
@@ -52,13 +45,6 @@
 		dbus_message_new_error(msg, ERROR_INTERFACE ".NotReady", "Adapter is not ready"));
 }
 
-DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".InvalidArguments",
-							"Invalid arguments"));
-}
-
 DBusHandlerResult error_unknown_method(DBusConnection *conn, DBusMessage *msg)
 {
 	char error[128];
@@ -88,13 +74,6 @@
 							"Rejected"));
 }
 
-DBusHandlerResult error_out_of_memory(DBusConnection *conn, DBusMessage *msg)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".OutOfMemory",
-							"Out of memory"));
-}
-
 DBusHandlerResult error_no_such_adapter(DBusConnection *conn, DBusMessage *msg)
 {
 	return dbus_connection_send_and_unref(conn,
@@ -109,20 +88,6 @@
 							"No such service"));
 }
 
-DBusHandlerResult error_not_available(DBusConnection *conn, DBusMessage *msg)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".NotAvailable",
-							"Not available"));
-}
-
-DBusHandlerResult error_not_supported(DBusConnection *conn, DBusMessage *msg)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".NotSupported",
-							"Not supported"));
-}
-
 DBusHandlerResult error_request_deferred(DBusConnection *conn, DBusMessage *msg)
 {
 	return dbus_connection_send_and_unref(conn,
@@ -130,13 +95,6 @@
 							"Request Deferred"));
 }
 
-DBusHandlerResult error_not_connected(DBusConnection *conn, DBusMessage *msg)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".NotConnected",
-							"Not connected"));
-}
-
 DBusHandlerResult error_unsupported_major_class(DBusConnection *conn, DBusMessage *msg)
 {
 	return dbus_connection_send_and_unref(conn,
@@ -144,48 +102,12 @@
 							"Unsupported Major Class"));
 }
 
-DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, DBusMessage *msg, int err)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".ConnectionAttemptFailed",
-					err ? strerror(err) : "Connection attempt failed"));
-}
-
-static DBusHandlerResult error_already_exists(DBusConnection *conn, DBusMessage *msg, const char *str)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".AlreadyExists", str));
-}
-
-DBusHandlerResult error_does_not_exist(DBusConnection *conn, DBusMessage *msg, const char *str)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".DoesNotExist", str));
-}
-
-static DBusHandlerResult error_in_progress(DBusConnection *conn, DBusMessage *msg, const char *str)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".InProgress", str));
-}
-
-DBusHandlerResult error_canceled(DBusConnection *conn, DBusMessage *msg, const char *str)
-{
-	return dbus_connection_send_and_unref(conn,
-		dbus_message_new_error(msg, ERROR_INTERFACE ".Canceled", str));
-}
-
 DBusHandlerResult error_not_in_progress(DBusConnection *conn, DBusMessage *msg, const char *str)
 {
 	return dbus_connection_send_and_unref(conn,
 		dbus_message_new_error(msg, ERROR_INTERFACE ".NotInProgress", str));
 }
 
-DBusHandlerResult error_connect_canceled(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_canceled(conn, msg, "Connection creation was canceled");
-}
-
 DBusHandlerResult error_bonding_already_exists(DBusConnection *conn, DBusMessage *msg)
 {
 	return error_already_exists(conn, msg, "Bonding already exists");
@@ -218,16 +140,6 @@
 	return error_in_progress(conn, msg, "Discover in progress");
 }
 
-DBusHandlerResult error_connect_in_progress(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_in_progress(conn, msg, "Connection creation in progress");
-}
-
-DBusHandlerResult error_connect_not_in_progress(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_not_in_progress(conn, msg, "Connection creation not in progress");
-}
-
 DBusHandlerResult error_record_does_not_exist(DBusConnection *conn, DBusMessage *msg)
 {
 	return error_does_not_exist(conn, msg, "Record does not exist");
@@ -253,16 +165,6 @@
 	return error_does_not_exist(conn, msg, "Authorization agent does not exist");
 }
 
-DBusHandlerResult error_binding_does_not_exist(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_does_not_exist(conn, msg, "Binding does not exist");
-}
-
-DBusHandlerResult error_service_already_exists(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_already_exists(conn, msg, "Service already exists");
-}
-
 DBusHandlerResult error_service_does_not_exist(DBusConnection *conn, DBusMessage *msg)
 {
 	return error_does_not_exist(conn, msg, "Service does not exist");
@@ -278,16 +180,6 @@
 	return error_already_exists(conn, msg, "Audit already performed");
 }
 
-DBusHandlerResult error_trusted_device_already_exists(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_already_exists(conn, msg, "Trusted device already exists");
-}
-
-DBusHandlerResult error_trusted_device_does_not_exists(DBusConnection *conn, DBusMessage *msg)
-{
-	return error_does_not_exist(conn, msg, "Trusted device does not exist");
-}
-
 DBusHandlerResult error_disconnect_in_progress(DBusConnection *conn, DBusMessage *msg)
 {
 	return error_in_progress(conn, msg, "Disconnection in progress");
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-error.h utils2/hcid/dbus-error.h
--- utils/hcid/dbus-error.h	2007-10-23 17:49:52.000000000 +0000
+++ utils2/hcid/dbus-error.h	2007-10-28 17:47:49.000000000 +0000
@@ -22,47 +22,30 @@
  *
  */
 
-#define ERROR_INTERFACE "org.bluez.Error"
-
-DBusHandlerResult error_failed(DBusConnection *conn, DBusMessage *msg, int err);
 DBusHandlerResult error_not_ready(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_unknown_method(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_not_authorized(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_rejected(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_out_of_memory(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_no_such_adapter(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_no_such_service(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_not_available(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_not_supported(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_request_deferred(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_not_connected(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_does_not_exist(DBusConnection *conn, DBusMessage *msg, const char *str);
-DBusHandlerResult error_canceled(DBusConnection *conn, DBusMessage *msg, const char *str);
+/* Used only for hcid device audit feature */
 DBusHandlerResult error_not_in_progress(DBusConnection *conn, DBusMessage *msg, const char *str);
 DBusHandlerResult error_unsupported_major_class(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, DBusMessage *msg, int err);
 DBusHandlerResult error_bonding_already_exists(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_bonding_does_not_exist(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_bonding_in_progress(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_bonding_not_in_progress(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_authentication_canceled(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_discover_in_progress(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_connect_in_progress(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_connect_not_in_progress(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_record_does_not_exist(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_passkey_agent_already_exists(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_passkey_agent_does_not_exist(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_auth_agent_already_exists(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_auth_agent_does_not_exist(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_binding_does_not_exist(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_service_already_exists(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_service_does_not_exist(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_service_search_in_progress(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_connect_canceled(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_sdp_failed(DBusConnection *conn, DBusMessage *msg, int err);
 DBusHandlerResult error_audit_already_exists(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_trusted_device_already_exists(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_trusted_device_does_not_exists(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_disconnect_in_progress(DBusConnection *conn, DBusMessage *msg);
 DBusHandlerResult error_service_start_in_progress(DBusConnection *conn, DBusMessage *msg);
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-hci.c utils2/hcid/dbus-hci.c
--- utils/hcid/dbus-hci.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/dbus-hci.c	2007-10-28 17:54:17.000000000 +0000
@@ -50,6 +50,7 @@
 #include "textfile.h"
 #include "manager.h"
 #include "adapter.h"
+#include "common-error.h"
 #include "dbus-helper.h"
 #include "dbus-common.h"
 #include "dbus-error.h"
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-sdp.c utils2/hcid/dbus-sdp.c
--- utils/hcid/dbus-sdp.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/dbus-sdp.c	2007-10-27 20:54:00.000000000 +0000
@@ -57,6 +57,7 @@
 #include "dbus-hci.h"
 #include "dbus-common.h"
 #include "dbus-error.h"
+#include "common-error.h"
 #include "dbus-sdp.h"
 #include "sdp-xml.h"
 
@@ -438,7 +439,7 @@
 
 failed:
 	if (err) {
-		error_failed(ctxt->conn, ctxt->rq, err);
+		error_failed_errno(ctxt->conn, ctxt->rq, err);
 		transaction_context_free(ctxt, FALSE);
 	}
 
@@ -463,12 +464,12 @@
 		int sdp_err = sdp_get_error(ctxt->session);
 		if (sdp_err < 0) {
 			error("search failed: Invalid session!");
-			error_failed(ctxt->conn, ctxt->rq, EINVAL);
+			error_failed_errno(ctxt->conn, ctxt->rq, EINVAL);
 			goto failed;
 		}
 
 		error("search failed: %s (%d)", strerror(sdp_err), sdp_err);
-		error_failed(ctxt->conn, ctxt->rq, sdp_err);
+		error_failed_errno(ctxt->conn, ctxt->rq, sdp_err);
 		goto failed;
 	}
 
@@ -480,7 +481,7 @@
 	/* check response PDU ID */
 	if (type != SDP_SVC_ATTR_RSP) {
 		error("SDP error: %s (%d)", strerror(EPROTO), EPROTO);
-		error_failed(ctxt->conn, ctxt->rq, EPROTO);
+		error_failed_errno(ctxt->conn, ctxt->rq, EPROTO);
 		goto failed;
 	}
 
@@ -535,12 +536,12 @@
 		int sdp_err = sdp_get_error(ctxt->session);
 		if (sdp_err < 0) {
 			error("search failed: Invalid session!");
-			error_failed(ctxt->conn, ctxt->rq, EINVAL);
+			error_failed_errno(ctxt->conn, ctxt->rq, EINVAL);
 			goto failed;
 		}
 
 		error("search failed: %s (%d)", strerror(sdp_err), sdp_err);
-		error_failed(ctxt->conn, ctxt->rq, sdp_err);
+		error_failed_errno(ctxt->conn, ctxt->rq, sdp_err);
 		goto failed;
 	}
 
@@ -552,7 +553,7 @@
 	/* check response PDU ID */
 	if (type != SDP_SVC_ATTR_RSP) {
 		error("SDP error: %s (%d)", strerror(EPROTO), EPROTO);
-		error_failed(ctxt->conn, ctxt->rq, EPROTO);
+		error_failed_errno(ctxt->conn, ctxt->rq, EPROTO);
 		goto failed;
 	}
 
@@ -609,12 +610,12 @@
 		int sdp_err = sdp_get_error(ctxt->session);
 		if (sdp_err < 0) {
 			error("search failed: Invalid session!");
-			error_failed(ctxt->conn, ctxt->rq, EINVAL);
+			error_failed_errno(ctxt->conn, ctxt->rq, EINVAL);
 			goto failed;
 		}
 
 		error("search failed: %s (%d)", strerror(sdp_err), sdp_err);
-		error_failed(ctxt->conn, ctxt->rq, sdp_err);
+		error_failed_errno(ctxt->conn, ctxt->rq, sdp_err);
 		goto failed;
 	}
 
@@ -626,7 +627,7 @@
 	/* check response PDU ID */
 	if (type != SDP_SVC_SEARCH_RSP) {
 		error("SDP error: %s (%d)", strerror(EPROTO), EPROTO);
-		error_failed(ctxt->conn, ctxt->rq, EPROTO);
+		error_failed_errno(ctxt->conn, ctxt->rq, EPROTO);
 		goto failed;
 	}
 
@@ -741,12 +742,12 @@
 		int sdp_err = sdp_get_error(ctxt->session);
 		if (sdp_err < 0) {
 			error("search failed: Invalid session!");
-			error_failed(ctxt->conn, ctxt->rq, EINVAL);
+			error_failed_errno(ctxt->conn, ctxt->rq, EINVAL);
 			goto failed;
 		}
 
 		error("search failed: %s (%d)", strerror(sdp_err), sdp_err);
-		error_failed(ctxt->conn, ctxt->rq, sdp_err);
+		error_failed_errno(ctxt->conn, ctxt->rq, sdp_err);
 		goto failed;
 	}
 
@@ -758,7 +759,7 @@
 	/* Check response PDU ID */
 	if (type != SDP_SVC_SEARCH_ATTR_RSP) {
 		error("SDP error: %s (%d)", strerror(EPROTO), EPROTO);
-		error_failed(ctxt->conn, ctxt->rq, EPROTO);
+		error_failed_errno(ctxt->conn, ctxt->rq, EPROTO);
 		goto failed;
 	}
 
@@ -1016,7 +1017,7 @@
 			DBUS_TYPE_STRING, &dst,
 			DBUS_TYPE_UINT32, &handle,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (find_pending_connect(dst))
 		return error_service_search_in_progress(conn, msg);
@@ -1028,7 +1029,7 @@
 	if (!connect_request(conn, msg, adapter->dev_id,
 				dst, cb, &err)) {
 		error("Search request failed: %s (%d)", strerror(err), err);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	return DBUS_HANDLER_RESULT_HANDLED;
@@ -1089,13 +1090,13 @@
 			DBUS_TYPE_STRING, &dst,
 			DBUS_TYPE_STRING, &svc,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (strlen(svc) > 0) {
 		/* Check if it is a service name string */
 		if (str2uuid(&uuid, svc) < 0) {
 			error("Invalid service class name");
-			return error_invalid_arguments(conn, msg);
+			return error_invalid_arguments(conn, msg, NULL);
 		}
 	}
 
@@ -1105,7 +1106,7 @@
 	if (!connect_request(conn, msg, adapter->dev_id,
 				dst, remote_svc_handles_conn_cb, &err)) {
 		error("Search request failed: %s (%d)", strerror(err), err);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	return DBUS_HANDLER_RESULT_HANDLED;
@@ -1123,7 +1124,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &dst,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (find_pending_connect(dst))
 		return error_service_search_in_progress(conn, msg);
@@ -1131,7 +1132,7 @@
 	if (!connect_request(conn, msg, adapter->dev_id,
 				dst, remote_svc_identifiers_conn_cb, &err)) {
 		error("Search request failed: %s (%d)", strerror(err), err);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	return DBUS_HANDLER_RESULT_HANDLED;
@@ -1149,7 +1150,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-security.c utils2/hcid/dbus-security.c
--- utils/hcid/dbus-security.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/dbus-security.c	2007-10-27 20:54:00.000000000 +0000
@@ -50,6 +50,7 @@
 #include "dbus-common.h"
 #include "dbus-service.h"
 #include "dbus-error.h"
+#include "common-error.h"
 #include "dbus-security.h"
 #include "dbus-hci.h"
 
@@ -259,7 +260,7 @@
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_STRING, &addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	memset(&ref, 0, sizeof(ref));
 
@@ -314,7 +315,7 @@
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_STRING, &addr,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	memset(&ref, 0, sizeof(ref));
 
@@ -354,7 +355,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	default_agent = passkey_agent_new(NULL, conn, dbus_message_get_sender(msg),
 						path, NULL);
@@ -395,7 +396,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	name = dbus_message_get_sender(msg);
 
@@ -570,7 +571,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	default_auth_agent = auth_agent_new(conn,
 					dbus_message_get_sender(msg), path);
@@ -611,7 +612,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &path,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	name = dbus_message_get_sender(msg);
 
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-service.c utils2/hcid/dbus-service.c
--- utils/hcid/dbus-service.c	2007-10-27 14:32:54.000000000 +0000
+++ utils2/hcid/dbus-service.c	2007-10-27 20:54:00.000000000 +0000
@@ -49,6 +49,7 @@
 #include "server.h"
 #include "dbus-common.h"
 #include "dbus-error.h"
+#include "common-error.h"
 #include "manager.h"
 #include "adapter.h"
 #include "dbus-service.h"
@@ -326,7 +327,7 @@
 
 	if (service->action) {
 		if (conn)
-			error_failed(conn, service->action, ecode);
+			error_failed_errno(conn, service->action, ecode);
 		dbus_message_unref(service->action);
 		service->action = NULL;
 	}
@@ -467,10 +468,10 @@
 	struct service *service = data;
 
 	if (service->external || service->pid)
-		return error_failed(conn, msg, EALREADY);
+		return error_failed_errno(conn, msg, EALREADY);
 
 	if (service_start(service, conn) < 0)
-		return error_failed(conn, msg, ENOEXEC);
+		return error_failed_errno(conn, msg, ENOEXEC);
 
 	service->action = dbus_message_ref(msg);
 
@@ -483,7 +484,7 @@
 	struct service *service  = data;
 
 	if (service->external || !service->bus_name)
-		return error_failed(conn, msg, EPERM);
+		return error_failed_errno(conn, msg, EPERM);
 
 	stop_service(service, FALSE);
 
@@ -539,10 +540,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -600,10 +601,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	trusted = read_trust(BDADDR_ANY, address, service->ident);
 
@@ -628,10 +629,10 @@
 	if (!dbus_message_get_args(msg, NULL,
 			DBUS_TYPE_STRING, &address,
 			DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
diff -x Entries -x Makefile.in -u -r -N utils/hcid/dbus-test.c utils2/hcid/dbus-test.c
--- utils/hcid/dbus-test.c	2007-10-27 14:32:55.000000000 +0000
+++ utils2/hcid/dbus-test.c	2007-10-27 20:54:00.000000000 +0000
@@ -45,6 +45,7 @@
 #include "adapter.h"
 #include "dbus-hci.h"
 #include "dbus-error.h"
+#include "common-error.h"
 #include "dbus-test.h"
 
 #define L2INFO_TIMEOUT (2 * 1000)
@@ -424,11 +425,11 @@
 	if (dbus_error_is_set(&err)) {
 		error("Can't extract message arguments:%s", err.message);
 		dbus_error_free(&err);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(address, &peer);
 	str2ba(adapter->address, &local);
@@ -507,11 +508,11 @@
 	if (dbus_error_is_set(&err)) {
 		error("Can't extract message arguments:%s", err.message);
 		dbus_error_free(&err);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(address, &peer);
 	str2ba(adapter->address, &local);
@@ -567,11 +568,11 @@
 	if (dbus_error_is_set(&err)) {
 		error("Can't extract message arguments:%s", err.message);
 		dbus_error_free(&err);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(address, &peer);
 	str2ba(adapter->address, &local);
@@ -609,11 +610,11 @@
 	if (dbus_error_is_set(&err)) {
 		error("Can't extract message arguments:%s", err.message);
 		dbus_error_free(&err);
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 	}
 
 	if (check_address(address) < 0)
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	str2ba(address, &peer);
 	str2ba(adapter->address, &local);
diff -x Entries -x Makefile.in -u -r -N utils/hcid/manager.c utils2/hcid/manager.c
--- utils/hcid/manager.c	2007-10-27 14:32:55.000000000 +0000
+++ utils2/hcid/manager.c	2007-10-27 20:54:00.000000000 +0000
@@ -49,6 +49,7 @@
 #include "dbus.h"
 #include "dbus-helper.h"
 #include "dbus-common.h"
+#include "common-error.h"
 #include "dbus-error.h"
 #include "dbus-hci.h"
 #include "dbus-service.h"
@@ -67,7 +68,7 @@
 	dbus_uint32_t version = 0;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -86,7 +87,7 @@
 	char path[MAX_PATH_LENGTH], *path_ptr = path;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	if (default_adapter_id < 0)
 		return error_no_such_adapter(conn, msg);
@@ -159,7 +160,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &pattern,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	/* hci_devid() would make sense to use here, except it
 	   is restricted to devices which are up */
@@ -200,11 +201,11 @@
 	int i, sk;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
 	if (sk < 0)
-		return error_failed(conn, msg, errno);
+		return error_failed_errno(conn, msg, errno);
 
 	dl = g_malloc0(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
 
@@ -215,7 +216,7 @@
 		int err = errno;
 		close(sk);
 		g_free(dl);
-		return error_failed(conn, msg, err);
+		return error_failed_errno(conn, msg, err);
 	}
 
 	dr = dl->dev_req;
@@ -267,7 +268,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &pattern,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	service = search_service(conn, pattern);
 	if (!service)
@@ -291,7 +292,7 @@
 	DBusMessageIter array_iter;
 
 	if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -317,7 +318,7 @@
 	if (!dbus_message_get_args(msg, NULL,
 				DBUS_TYPE_STRING, &pattern,
 				DBUS_TYPE_INVALID))
-		return error_invalid_arguments(conn, msg);
+		return error_invalid_arguments(conn, msg, NULL);
 
 	service = search_service(conn, pattern);
 	if (!service)
@@ -341,7 +342,7 @@
 		return error_service_start_in_progress(conn, msg);
 
 	if (service_start(service, conn) < 0)
-		return error_failed(conn, msg, ENOEXEC);
+		return error_failed_errno(conn, msg, ENOEXEC);
 
 	service->action = dbus_message_ref(msg);
 

  reply	other threads:[~2007-10-28 18:01 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-28 17:06 [Bluez-devel] [PATCH 1/3] move common exceptions to common/ directory fabchevalier
2007-10-28 18:16 ` Marcel Holtmann
2007-10-28 18:01   ` fabchevalier [this message]
2007-10-28 18:15   ` fabchevalier
2007-10-28 19:40     ` Marcel Holtmann
2007-10-28 19:06       ` fabchevalier
2007-10-28 20:46         ` Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1193594501.4724ce8595cbb@imp.free.fr \
    --to=fabchevalier@free.fr \
    --cc=bluez-devel@lists.sourceforge.net \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox