2019-07-09 10:16:03

by Jakub Witowski

[permalink] [raw]
Subject: [PATCH BlueZ v4 2/4] mesh: Extract parsing into mesh_db_read_* functions

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