This enables more code to be reused in ImportLocalNode implementation, when using 'json' import data format. --- mesh/mesh-db.c | 44 ++++++++++++++++++++++++++++++++------------ mesh/mesh.c | 6 +++--- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/mesh/mesh-db.c b/mesh/mesh-db.c index e0a000261..543b8f0e7 100644 --- a/mesh/mesh-db.c +++ b/mesh/mesh-db.c @@ -253,6 +253,34 @@ static json_object *jarray_key_del(json_object *jarray, int16_t idx) return jarray_new; } +static bool mesh_db_read_unicast_address(json_object *jobj, + uint16_t *unicast) +{ + json_object *jvalue; + char *str; + + if (!json_object_object_get_ex(jobj, "unicastAddress", &jvalue)) + return false; + + str = (char *)json_object_get_string(jvalue); + if (sscanf(str, "%04hx", unicast) != 1) + return false; + + return true; +} + + +static bool mesh_db_read_seq_number(json_object *jobj, uint32_t *seq_number) +{ + json_object *jvalue; + + if (!json_object_object_get_ex(jobj, "sequenceNumber", &jvalue)) + return false; + + *seq_number = json_object_get_int(jvalue); + return true; +} + bool mesh_db_read_iv_index(json_object *jobj, uint32_t *idx, bool *update) { int tmp; @@ -1165,7 +1193,6 @@ bool mesh_db_read_node(json_object *jnode, mesh_db_node_cb cb, void *user_data) { struct mesh_db_node node; json_object *jvalue; - char *str; if (!jnode) return false; @@ -1184,14 +1211,7 @@ bool mesh_db_read_node(json_object *jnode, mesh_db_node_cb cb, void *user_data) parse_features(jnode, &node); - if (!json_object_object_get_ex(jnode, "unicastAddress", &jvalue)) { - l_info("Bad config: Unicast address must be present"); - return false; - } - - str = (char *)json_object_get_string(jvalue); - if (sscanf(str, "%04hx", &node.unicast) != 1) - return false; + mesh_db_read_unicast_address(jnode, &node.unicast); if (json_object_object_get_ex(jnode, "defaultTTL", &jvalue)) { int ttl = json_object_get_int(jvalue); @@ -1201,8 +1221,7 @@ bool mesh_db_read_node(json_object *jnode, mesh_db_node_cb cb, void *user_data) node.ttl = (uint8_t) ttl; } - if (json_object_object_get_ex(jnode, "sequenceNumber", &jvalue)) - node.seq_number = json_object_get_int(jvalue); + mesh_db_read_seq_number(jnode, &node.seq_number); /* Check for required "elements" property */ if (!json_object_object_get_ex(jnode, "elements", &jvalue)) @@ -1438,7 +1457,8 @@ static void add_model(void *a, void *b) } /* Add unprovisioned node (local) */ -bool mesh_db_add_node(json_object *jnode, struct mesh_db_node *node) { +bool mesh_db_add_node(json_object *jnode, struct mesh_db_node *node) +{ struct mesh_db_modes *modes = &node->modes; const struct l_queue_entry *entry; diff --git a/mesh/mesh.c b/mesh/mesh.c index 26acfd4dc..98e6d87b2 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -60,7 +60,7 @@ struct bt_mesh { uint8_t max_filters; }; -struct join_data{ +struct join_data { struct l_dbus_message *msg; struct mesh_agent *agent; const char *sender; @@ -365,8 +365,8 @@ static void node_init_cb(struct mesh_node *node, struct mesh_agent *agent) if (!acceptor_start(num_ele, join_pending->uuid, mesh.algorithms, mesh.prov_timeout, agent, prov_complete_cb, - &mesh)) - { + &mesh)) { + reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED, "Failed to start provisioning acceptor"); goto fail; -- 2.20.1