diff options
author | Inga Stotland <inga.stotland@intel.com> | 2020-05-21 17:34:59 -0700 |
---|---|---|
committer | Abhay Agarwal <ay.agarwal@samsung.com> | 2020-05-28 16:57:22 +0530 |
commit | 42ed9f94ea3b33df1d5e3ceec30f09ab36784a6c (patch) | |
tree | 8848dd50bd8c0e2026cc78a94e1965ad37232074 | |
parent | 73d7e5d457ecd522883d5cf221b23e343a4f2fca (diff) | |
download | bluez-42ed9f94ea3b33df1d5e3ceec30f09ab36784a6c.tar.gz bluez-42ed9f94ea3b33df1d5e3ceec30f09ab36784a6c.tar.bz2 bluez-42ed9f94ea3b33df1d5e3ceec30f09ab36784a6c.zip |
mesh: Clean up Attach() method call
This consolidates error return form one place: off a callback
with unsuccessful status.
Change-Id: I3c39a8bb7e6198f730ce8c1a8f7da97e43f65823
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
-rw-r--r-- | mesh/mesh.c | 29 | ||||
-rw-r--r-- | mesh/node.c | 14 | ||||
-rw-r--r-- | mesh/node.h | 2 |
3 files changed, 16 insertions, 29 deletions
diff --git a/mesh/mesh.c b/mesh/mesh.c index 707f18f8..65753934 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -616,24 +616,17 @@ static void attach_ready_cb(void *user_data, int status, struct mesh_node *node) struct l_dbus_message *reply; struct l_dbus_message *pending_msg; - pending_msg = l_queue_find(pending_queue, simple_match, user_data); + pending_msg = l_queue_remove_if(pending_queue, simple_match, user_data); if (!pending_msg) return; - if (status != MESH_ERROR_NONE) { - const char *desc = (status == MESH_ERROR_NOT_FOUND) ? - "Node match not found" : "Attach failed"; - reply = dbus_error(pending_msg, status, desc); - goto done; - } - - reply = l_dbus_message_new_method_return(pending_msg); + if (status == MESH_ERROR_NONE) { + reply = l_dbus_message_new_method_return(pending_msg); + node_build_attach_reply(node, reply); + } else + reply = dbus_error(pending_msg, status, "Attach failed"); - node_build_attach_reply(node, reply); - -done: l_dbus_send(dbus_get_bus(), reply); - l_queue_remove(pending_queue, pending_msg); } static struct l_dbus_message *attach_call(struct l_dbus *dbus, @@ -643,7 +636,6 @@ static struct l_dbus_message *attach_call(struct l_dbus *dbus, uint64_t token; const char *app_path, *sender; struct l_dbus_message *pending_msg; - int status; l_debug("Attach"); @@ -655,14 +647,9 @@ static struct l_dbus_message *attach_call(struct l_dbus *dbus, pending_msg = l_dbus_message_ref(msg); l_queue_push_tail(pending_queue, pending_msg); - status = node_attach(app_path, sender, token, attach_ready_cb, - pending_msg); - if (status == MESH_ERROR_NONE) - return NULL; + node_attach(app_path, sender, token, attach_ready_cb, pending_msg); - l_queue_remove(pending_queue, pending_msg); - - return dbus_error(msg, status, NULL); + return NULL; } static struct l_dbus_message *leave_call(struct l_dbus *dbus, diff --git a/mesh/node.c b/mesh/node.c index 74b7603c..535a0216 100644 --- a/mesh/node.c +++ b/mesh/node.c @@ -1634,20 +1634,23 @@ fail: } /* Establish relationship between application and mesh node */ -int node_attach(const char *app_root, const char *sender, uint64_t token, +void node_attach(const char *app_root, const char *sender, uint64_t token, node_ready_func_t cb, void *user_data) { struct managed_obj_request *req; struct mesh_node *node; node = l_queue_find(nodes, match_token, (void *) &token); - if (!node) - return MESH_ERROR_NOT_FOUND; + if (!node) { + cb(user_data, MESH_ERROR_NOT_FOUND, NULL); + return; + } /* Check if the node is already in use */ if (node->owner) { l_warn("The node is already in use"); - return MESH_ERROR_ALREADY_EXISTS; + cb(user_data, MESH_ERROR_ALREADY_EXISTS, NULL); + return; } req = l_new(struct managed_obj_request, 1); @@ -1668,11 +1671,8 @@ int node_attach(const char *app_root, const char *sender, uint64_t token, "GetManagedObjects", NULL, get_managed_objects_cb, req, l_free); - return MESH_ERROR_NONE; - } - /* Create a temporary pre-provisioned node */ void node_join(const char *app_root, const char *sender, const uint8_t *uuid, node_join_ready_func_t cb) diff --git a/mesh/node.h b/mesh/node.h index ca5d60b6..290681e2 100644 --- a/mesh/node.h +++ b/mesh/node.h @@ -81,7 +81,7 @@ const char *node_get_app_path(struct mesh_node *node); bool node_add_pending_local(struct mesh_node *node, void *info); void node_attach_io_all(struct mesh_io *io); void node_attach_io(struct mesh_node *node, struct mesh_io *io); -int node_attach(const char *app_root, const char *sender, uint64_t token, +void node_attach(const char *app_root, const char *sender, uint64_t token, node_ready_func_t cb, void *user_data); void node_build_attach_reply(struct mesh_node *node, struct l_dbus_message *reply); |