From 55a6763cde8a2309fd23a96479ee4cf2fc23a442 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 1 Jul 2025 12:14:26 +0200 Subject: [PATCH] device: Better error when no BR/EDR profiles can be connected to Add a more precise error when there are no BR/EDR profiles to connect to. This is useful when trying to connect to a particular device, and there are no relevant profiles to connect to on the bearer. --- src/error.c | 17 ++++++++++++++--- src/error.h | 3 +-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/error.c b/src/error.c index 1214516d7..41dd90400 100644 --- a/src/error.c +++ b/src/error.c @@ -128,6 +128,14 @@ DBusMessage *btd_error_not_ready_str(DBusMessage *msg, const char *str) "%s", str); } +DBusMessage *btd_error_profile_unavailable(DBusMessage *msg) +{ + return g_dbus_create_error(msg, ERROR_INTERFACE + ".ProfileUnavailable", + "Exhausted the list of BR/EDR " + "profiles to connect to"); +} + DBusMessage *btd_error_failed(DBusMessage *msg, const char *str) { return g_dbus_create_error(msg, ERROR_INTERFACE @@ -142,8 +150,6 @@ static const char *btd_error_bredr_str(int err) return ERR_BREDR_CONN_ALREADY_CONNECTED; case EHOSTDOWN: return ERR_BREDR_CONN_PAGE_TIMEOUT; - case ENOPROTOOPT: - return ERR_BREDR_CONN_PROFILE_UNAVAILABLE; case EIO: return ERR_BREDR_CONN_CREATE_SOCKET; case EINVAL: @@ -220,7 +226,12 @@ static const char *btd_error_le_str(int err) DBusMessage *btd_error_bredr_errno(DBusMessage *msg, int err) { - return btd_error_failed(msg, btd_error_bredr_str(err)); + switch (err) { + case ENOPROTOOPT: + return btd_error_profile_unavailable(msg); + default: + return btd_error_failed(msg, btd_error_bredr_str(err)); + } } DBusMessage *btd_error_le_errno(DBusMessage *msg, int err) diff --git a/src/error.h b/src/error.h index 8ac521aa0..64297f437 100644 --- a/src/error.h +++ b/src/error.h @@ -19,8 +19,6 @@ #define ERR_BREDR_CONN_ALREADY_CONNECTED "br-connection-already-"\ "connected" #define ERR_BREDR_CONN_PAGE_TIMEOUT "br-connection-page-timeout" -#define ERR_BREDR_CONN_PROFILE_UNAVAILABLE "br-connection-profile-"\ - "unavailable" #define ERR_BREDR_CONN_SDP_SEARCH "br-connection-sdp-search" #define ERR_BREDR_CONN_CREATE_SOCKET "br-connection-create-socket" #define ERR_BREDR_CONN_INVALID_ARGUMENTS "br-connection-invalid-"\ @@ -85,6 +83,7 @@ DBusMessage *btd_error_no_such_adapter(DBusMessage *msg); DBusMessage *btd_error_agent_not_available(DBusMessage *msg); DBusMessage *btd_error_not_ready(DBusMessage *msg); DBusMessage *btd_error_not_ready_str(DBusMessage *msg, const char *str); +DBusMessage *btd_error_profile_unavailable(DBusMessage *msg); DBusMessage *btd_error_failed(DBusMessage *msg, const char *str); DBusMessage *btd_error_bredr_errno(DBusMessage *msg, int err); DBusMessage *btd_error_le_errno(DBusMessage *msg, int err); -- 2.47.3