If a node is already attached to an application process,
disallow another appication to attach to the same node.
This means that an Attach() method called with the token
identifying a node that is already in use, returns an error
org.bluez.mesh.Error.AlreadyExists
---
doc/mesh-api.txt | 1 +
mesh/node.c | 8 ++++++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/doc/mesh-api.txt b/doc/mesh-api.txt
index f034bc900..698e7ca4e 100644
--- a/doc/mesh-api.txt
+++ b/doc/mesh-api.txt
@@ -99,6 +99,7 @@ Methods:
PossibleErrors:
org.bluez.mesh.Error.InvalidArguments
org.bluez.mesh.Error.NotFound,
+ org.bluez.mesh.Error.AlreadyExists,
org.bluez.mesh.Error.Failed
void Leave(uint64 token)
diff --git a/mesh/node.c b/mesh/node.c
index 5431a9e9c..e7016ce75 100644
--- a/mesh/node.c
+++ b/mesh/node.c
@@ -1146,9 +1146,13 @@ int node_attach(const char *app_path, const char *sender, uint64_t token,
if (!node)
return MESH_ERROR_NOT_FOUND;
- /* TODO: decide what to do if previous node->app_path is not NULL */
- node->app_path = l_strdup(app_path);
+ /* Check if the node is already in use */
+ if (node->owner) {
+ l_warn("The node is already in use");
+ return MESH_ERROR_ALREADY_EXISTS;
+ }
+ node->app_path = l_strdup(app_path);
node->owner = l_strdup(sender);
req = l_new(struct attach_obj_request, 1);
--
2.17.2