Diff between 9eaab34af829cef3c8a1557a45c93c22f9110ec1 and 297330b93e61c1263b087ad0f105a2cfae02ac61

Changed Files

File Additions Deletions Status
src/profile.h +2 -0 modified
src/service.c +18 -0 modified
src/service.h +2 -0 modified

Full Patch

diff --git a/src/profile.h b/src/profile.h
index 9aec27e..f5a3ded 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -42,6 +42,8 @@ struct btd_profile {
 	int (*connect) (struct btd_service *service);
 	int (*disconnect) (struct btd_service *service);
 
+	int (*accept) (struct btd_service *service);
+
 	int (*adapter_probe) (struct btd_profile *p,
 						struct btd_adapter *adapter);
 	void (*adapter_remove) (struct btd_profile *p,
diff --git a/src/service.c b/src/service.c
index afe592b..2ea2b7a 100644
--- a/src/service.c
+++ b/src/service.c
@@ -199,6 +199,24 @@ void service_remove(struct btd_service *service)
 	btd_service_unref(service);
 }
 
+int service_accept(struct btd_service *service)
+{
+	char addr[18];
+	int err;
+
+	if (!service->profile->accept)
+		return 0;
+
+	err = service->profile->accept(service);
+	if (!err)
+		return 0;
+
+	ba2str(device_get_address(service->device), addr);
+	error("%s profile accept failed for %s", service->profile->name, addr);
+
+	return err;
+}
+
 int btd_service_connect(struct btd_service *service)
 {
 	struct btd_profile *profile = service->profile;
diff --git a/src/service.h b/src/service.h
index 857e688..3a0db6e 100644
--- a/src/service.h
+++ b/src/service.h
@@ -52,6 +52,8 @@ struct btd_service *service_create_gatt(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);
+
 /* Connection control API */
 int btd_service_connect(struct btd_service *service);
 int btd_service_disconnect(struct btd_service *service);