diff --git a/src/profile.h b/src/profile.h
index 9aec27e..f5a3ded 100644
--- a/src/profile.h
+++ b/src/profile.h
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
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
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);