From: Archie Pusaka <apusaka@xxxxxxxxxxxx> This specifies how long will the userspace ignore a peer with an unknown name after a failed remote name resolving procedure. The peer device can still be connected, this only prevents the remote name resolving procedure retry. Reviewed-by: Miao-chen Chou <mcchou@xxxxxxxxxxxx> --- Changes in v4: * New in this version. src/btd.h | 1 + src/device.c | 4 +--- src/main.c | 19 ++++++++++++++++--- src/main.conf | 5 +++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/btd.h b/src/btd.h index ff9f082f19..a805a40d7d 100644 --- a/src/btd.h +++ b/src/btd.h @@ -104,6 +104,7 @@ struct btd_opts { uint32_t tmpto; uint8_t privacy; bool device_privacy; + uint32_t name_request_retry_delay; struct btd_defaults defaults; diff --git a/src/device.c b/src/device.c index 44450b1132..0e2612825b 100644 --- a/src/device.c +++ b/src/device.c @@ -79,8 +79,6 @@ #define GATT_INCLUDE_UUID_STR "2802" #define GATT_CHARAC_UUID_STR "2803" -#define NAME_RESOLVE_RETRY_DELAY 300 /* seconds */ - static DBusConnection *dbus_conn = NULL; static unsigned service_state_cb_id; @@ -4489,7 +4487,7 @@ bool device_is_name_resolve_allowed(struct btd_device *device) */ return now.tv_sec < device->name_resolve_failed_time || now.tv_sec >= device->name_resolve_failed_time + - NAME_RESOLVE_RETRY_DELAY; + btd_opts.name_request_retry_delay; } void device_name_resolve_fail(struct btd_device *device) diff --git a/src/main.c b/src/main.c index 3adcdc1087..8cc2dfca61 100644 --- a/src/main.c +++ b/src/main.c @@ -55,9 +55,10 @@ #define BLUEZ_NAME "org.bluez" -#define DEFAULT_PAIRABLE_TIMEOUT 0 /* disabled */ -#define DEFAULT_DISCOVERABLE_TIMEOUT 180 /* 3 minutes */ -#define DEFAULT_TEMPORARY_TIMEOUT 30 /* 30 seconds */ +#define DEFAULT_PAIRABLE_TIMEOUT 0 /* disabled */ +#define DEFAULT_DISCOVERABLE_TIMEOUT 180 /* 3 minutes */ +#define DEFAULT_TEMPORARY_TIMEOUT 30 /* 30 seconds */ +#define DEFAULT_NAME_REQUEST_RETRY_DELAY 300 /* 5 minutes */ #define SHUTDOWN_GRACE_SECONDS 10 @@ -82,6 +83,7 @@ static const char *supported_options[] = { "JustWorksRepairing", "TemporaryTimeout", "Experimental", + "RemoteNameRequestRetryDelay", NULL }; @@ -816,6 +818,16 @@ static void parse_config(GKeyFile *config) g_strfreev(strlist); } + val = g_key_file_get_integer(config, "General", + "RemoteNameRequestRetryDelay", &err); + if (err) { + DBG("%s", err->message); + g_clear_error(&err); + } else { + DBG("RemoteNameRequestRetryDelay=%d", val); + btd_opts.name_request_retry_delay = val; + } + str = g_key_file_get_string(config, "GATT", "Cache", &err); if (err) { DBG("%s", err->message); @@ -927,6 +939,7 @@ static void init_defaults(void) btd_opts.name_resolv = TRUE; btd_opts.debug_keys = FALSE; btd_opts.refresh_discovery = TRUE; + btd_opts.name_request_retry_delay = DEFAULT_NAME_REQUEST_RETRY_DELAY; btd_opts.defaults.num_entries = 0; btd_opts.defaults.br.page_scan_type = 0xFFFF; diff --git a/src/main.conf b/src/main.conf index 0c41d77420..49b9e67550 100644 --- a/src/main.conf +++ b/src/main.conf @@ -119,6 +119,11 @@ # Defaults to false. #Experimental = false +# The duration to avoid retrying to resolve a peer's name, if the previous +# try failed. +# The value is in seconds. Default is 300, i.e. 5 minutes. +#RemoteNameRequestRetryDelay = 300 + [BR] # The following values are used to load default adapter parameters for BR/EDR. # BlueZ loads the values into the kernel before the adapter is powered if the -- 2.34.0.rc2.393.gf8c9666880-goog