2022-05-12 07:18:34

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ] service: Add initiator argument to service_accept

From: Luiz Augusto von Dentz <[email protected]>

This adds initiator argument to service_accept so profiles accepting
the connection can use btd_service_is_initiator to determine if the
connection was initiated locally (central) or remotely (peripheral).
---
src/device.c | 18 ++++++++++++++++--
src/service.c | 4 +++-
src/service.h | 2 +-
3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/device.c b/src/device.c
index b0309a1e7..a39eb8c64 100644
--- a/src/device.c
+++ b/src/device.c
@@ -158,6 +158,7 @@ struct bearer_state {
bool bonded;
bool connected;
bool svc_resolved;
+ bool initiator;
};

struct csrk_info {
@@ -297,6 +298,16 @@ static struct bearer_state *get_state(struct btd_device *dev,
return &dev->le_state;
}

+static bool get_initiator(struct btd_device *dev)
+{
+ if (dev->le_state.connected)
+ return dev->le_state.initiator;
+ if (dev->bredr_state.connected)
+ return dev->bredr_state.initiator;
+
+ return false;
+}
+
static GSList *find_service_with_profile(GSList *list, struct btd_profile *p)
{
GSList *l;
@@ -3256,6 +3267,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
return;

state->connected = false;
+ state->initiator = false;
device->general_connect = FALSE;

device_set_svc_refreshed(device, false);
@@ -4169,7 +4181,7 @@ done:
}

/* Notify driver about the new connection */
- service_accept(service);
+ service_accept(service, get_initiator(device));
}

static void device_add_gatt_services(struct btd_device *device)
@@ -4191,7 +4203,7 @@ static void device_accept_gatt_profiles(struct btd_device *device)
GSList *l;

for (l = device->services; l != NULL; l = g_slist_next(l))
- service_accept(l->data);
+ service_accept(l->data, get_initiator(device));
}

static void device_remove_gatt_service(struct btd_device *device,
@@ -5899,6 +5911,8 @@ int device_connect_le(struct btd_device *dev)

/* Keep this, so we can cancel the connection */
dev->att_io = io;
+ /* Set as initiator */
+ dev->le_state.initiator = true;

return 0;
}
diff --git a/src/service.c b/src/service.c
index 14a4c292b..7c4dc8fe0 100644
--- a/src/service.c
+++ b/src/service.c
@@ -172,7 +172,7 @@ void service_remove(struct btd_service *service)
btd_service_unref(service);
}

-int service_accept(struct btd_service *service)
+int service_accept(struct btd_service *service, bool initiator)
{
char addr[18];
int err;
@@ -198,6 +198,8 @@ int service_accept(struct btd_service *service)
return -ECONNABORTED;
}

+ service->initiator = initiator;
+
err = service->profile->accept(service);
if (!err)
goto done;
diff --git a/src/service.h b/src/service.h
index fa930f985..dc0d1d132 100644
--- a/src/service.h
+++ b/src/service.h
@@ -35,7 +35,7 @@ struct btd_service *service_create(struct btd_device *device,
int service_probe(struct btd_service *service);
void service_remove(struct btd_service *service);

-int service_accept(struct btd_service *service);
+int service_accept(struct btd_service *service, bool initiator);
int service_set_connecting(struct btd_service *service);

/* Connection control API */
--
2.35.1



2022-05-13 14:33:10

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ] service: Add initiator argument to service_accept

Hello:

This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Wed, 11 May 2022 17:55:15 -0700 you wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> This adds initiator argument to service_accept so profiles accepting
> the connection can use btd_service_is_initiator to determine if the
> connection was initiated locally (central) or remotely (peripheral).
> ---
> src/device.c | 18 ++++++++++++++++--
> src/service.c | 4 +++-
> src/service.h | 2 +-
> 3 files changed, 20 insertions(+), 4 deletions(-)

Here is the summary with links:
- [BlueZ] service: Add initiator argument to service_accept
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=cd24715bb226

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html