diff options
| -rw-r--r-- | input/device.c | 49 | 
1 files changed, 31 insertions, 18 deletions
diff --git a/input/device.c b/input/device.c index 421b6c20..54c5d3dc 100644 --- a/input/device.c +++ b/input/device.c @@ -206,6 +206,14 @@ static DBusHandlerResult err_failed(DBusConnection *conn, DBusMessage *msg,  				INPUT_ERROR_INTERFACE ".Failed", str));  } +static DBusHandlerResult err_not_supported(DBusConnection *conn, DBusMessage *msg) +{ +	return send_message_and_unref(conn, +			dbus_message_new_error(msg, +			INPUT_ERROR_INTERFACE ".NotSupported", +			"The service is not supported by the remote device")); +} +  static DBusHandlerResult err_connection_failed(DBusConnection *conn,  					DBusMessage *msg, const char *str)  { @@ -967,7 +975,8 @@ static void hid_record_reply(DBusPendingCall *call, void *data)  	dbus_error_init(&derr);  	if (dbus_set_error_from_message(&derr, reply)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -975,19 +984,20 @@ static void hid_record_reply(DBusPendingCall *call, void *data)  	if (!dbus_message_get_args(reply, &derr,  				DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &rec_bin, &len,  				DBUS_TYPE_INVALID)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	}  	if (len == 0) { -		err_failed(pr->conn, pr->msg, "SDP error"); +		err_not_supported(pr->conn, pr->msg);  		goto fail;  	}  	pr->hid_rec = sdp_extract_pdu(rec_bin, &scanned);  	if (!pr->hid_rec) { -		err_failed(pr->conn, pr->msg, "HID not supported"); +		err_not_supported(pr->conn, pr->msg);  		goto fail;  	} @@ -1028,7 +1038,8 @@ static void hid_handle_reply(DBusPendingCall *call, void *data)  	dbus_error_init(&derr);  	if (dbus_set_error_from_message(&derr, reply)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1036,8 +1047,8 @@ static void hid_handle_reply(DBusPendingCall *call, void *data)  	if (!dbus_message_get_args(reply, &derr,  				DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &phandle, &len,  				DBUS_TYPE_INVALID)) { - -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1048,7 +1059,7 @@ static void hid_handle_reply(DBusPendingCall *call, void *data)  		else  			goto done;  	} -	err_failed(pr->conn, pr->msg, "SDP error"); +	err_not_supported(pr->conn, pr->msg);  fail:  	pending_req_free(pr);  done: @@ -1066,7 +1077,8 @@ static void pnp_record_reply(DBusPendingCall *call, void *data)  	dbus_error_init(&derr);  	if (dbus_set_error_from_message(&derr, reply)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1074,7 +1086,8 @@ static void pnp_record_reply(DBusPendingCall *call, void *data)  	if (!dbus_message_get_args(reply, &derr,  				DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &rec_bin, &len,  				DBUS_TYPE_INVALID)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1088,8 +1101,7 @@ static void pnp_record_reply(DBusPendingCall *call, void *data)  			goto done;  	} -	err_failed(pr->conn, pr->msg, "SDP error"); - +	err_not_supported(pr->conn, pr->msg);  fail:  	pending_req_free(pr); @@ -1108,7 +1120,8 @@ static void pnp_handle_reply(DBusPendingCall *call, void *data)  	dbus_error_init(&derr);  	if (dbus_set_error_from_message(&derr, reply)) { -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1116,8 +1129,8 @@ static void pnp_handle_reply(DBusPendingCall *call, void *data)  	if (!dbus_message_get_args(reply, &derr,  				DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &phandle, &len,  				DBUS_TYPE_INVALID)) { - -		err_generic(pr->conn, pr->msg, derr.name, derr.message); +		error("%s: %s", derr.name, derr.message); +		err_not_supported(pr->conn, pr->msg);  		dbus_error_free(&derr);  		goto fail;  	} @@ -1125,13 +1138,13 @@ static void pnp_handle_reply(DBusPendingCall *call, void *data)  	if (len == 0) {  		/* PnP is optional: Ignore it and request the HID handle  */  		if (get_handles(pr, hid_uuid, hid_handle_reply) < 0) { -			err_failed(pr->conn, pr->msg, "SDP error"); +			err_not_supported(pr->conn, pr->msg);  			goto fail;  		}  	} else {  		/* Request PnP record */  		if (get_record(pr, *phandle, pnp_record_reply) < 0) { -			err_failed(pr->conn, pr->msg, "SDP error"); +			err_not_supported(pr->conn, pr->msg);  			goto fail;  		}  	} @@ -1193,7 +1206,7 @@ static DBusHandlerResult manager_create_device(DBusConnection *conn,  		if (get_handles(pr, pnp_uuid, pnp_handle_reply) < 0) {  			pending_req_free(pr); -			return err_failed(conn, msg, "SDP error"); +			return err_not_supported(conn, msg);  		}  		return DBUS_HANDLER_RESULT_HANDLED;  | 
