All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH BlueZ] mesh: Store key indices as integers in node config
@ 2020-08-24 20:09 Inga Stotland
  0 siblings, 0 replies; only message in thread
From: Inga Stotland @ 2020-08-24 20:09 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: brian.gix, Inga Stotland

Store NetKey and AppKey indices as integers instead of hex strings.
This removes unnecessary sting manipulationswhile not affecting
configuration file readability.
---
 mesh/mesh-config-json.c | 102 +++++++++++++++-------------------------
 1 file changed, 38 insertions(+), 64 deletions(-)

diff --git a/mesh/mesh-config-json.c b/mesh/mesh-config-json.c
index 63b6c3988..30c90170d 100644
--- a/mesh/mesh-config-json.c
+++ b/mesh/mesh-config-json.c
@@ -249,21 +249,31 @@ static void jarray_string_del(json_object *jarray, char *str, size_t len)
 	}
 }
 
+static bool get_key_index(json_object *jobj, const char *keyword,
+								uint16_t *index)
+{
+	int idx;
+
+	if (!get_int(jobj, keyword, &idx))
+		return false;
+
+	if (!CHECK_KEY_IDX_RANGE(idx))
+		return false;
+
+	*index = (uint16_t) idx;
+	return true;
+}
+
 static json_object *get_key_object(json_object *jarray, uint16_t idx)
 {
 	int i, sz = json_object_array_length(jarray);
 
 	for (i = 0; i < sz; ++i) {
-		json_object *jentry, *jvalue;
-		const char *str;
+		json_object *jentry;
 		uint16_t jidx;
 
 		jentry = json_object_array_get_idx(jarray, i);
-		if (!json_object_object_get_ex(jentry, "index", &jvalue))
-			return NULL;
-
-		str = json_object_get_string(jvalue);
-		if (sscanf(str, "%04hx", &jidx) != 1)
+		if (!get_key_index(jentry, "index", &jidx))
 			return NULL;
 
 		if (jidx == idx)
@@ -273,28 +283,6 @@ static json_object *get_key_object(json_object *jarray, uint16_t idx)
 	return NULL;
 }
 
-static bool get_key_index(json_object *jobj, const char *keyword,
-								uint16_t *index)
-{
-	uint16_t idx;
-	json_object *jvalue;
-	const char *str;
-
-	if (!json_object_object_get_ex(jobj, keyword, &jvalue))
-		return false;
-
-	str = json_object_get_string(jvalue);
-
-	if (sscanf(str, "%04hx", &idx) != 1)
-		return false;
-
-	if (!CHECK_KEY_IDX_RANGE(idx))
-		return false;
-
-	*index = (uint16_t) idx;
-	return true;
-}
-
 static void jarray_key_del(json_object *jarray, int16_t idx)
 {
 	int i, sz = json_object_array_length(jarray);
@@ -594,11 +582,23 @@ fail:
 	return false;
 }
 
+static bool write_int(json_object *jobj, const char *desc, int val)
+{
+	json_object *jvalue;
+
+	jvalue = json_object_new_int(val);
+	if (!jvalue)
+		return false;
+
+	json_object_object_del(jobj, desc);
+	json_object_object_add(jobj, desc, jvalue);
+	return true;
+}
+
 bool mesh_config_net_key_add(struct mesh_config *cfg, uint16_t idx,
 							const uint8_t key[16])
 {
-	json_object *jnode, *jarray = NULL, *jentry = NULL, *jstring;
-	char buf[5];
+	json_object *jnode, *jarray = NULL, *jentry = NULL;
 
 	if (!cfg)
 		return false;
@@ -618,13 +618,9 @@ bool mesh_config_net_key_add(struct mesh_config *cfg, uint16_t idx,
 	if (!jentry)
 		return false;
 
-	snprintf(buf, 5, "%4.4x", idx);
-	jstring = json_object_new_string(buf);
-	if (!jstring)
+	if (!write_int(jentry, "index", idx))
 		goto fail;
 
-	json_object_object_add(jentry, "index", jstring);
-
 	if (!add_key_value(jentry, "key", key))
 		goto fail;
 
@@ -724,8 +720,7 @@ bool mesh_config_write_token(struct mesh_config *cfg, uint8_t *token)
 bool mesh_config_app_key_add(struct mesh_config *cfg, uint16_t net_idx,
 					uint16_t app_idx, const uint8_t key[16])
 {
-	json_object *jnode, *jarray = NULL, *jentry = NULL, *jstring = NULL;
-	char buf[5];
+	json_object *jnode, *jarray = NULL, *jentry = NULL;
 
 	if (!cfg)
 		return false;
@@ -744,20 +739,12 @@ bool mesh_config_app_key_add(struct mesh_config *cfg, uint16_t net_idx,
 	if (!jentry)
 		return false;
 
-	snprintf(buf, 5, "%4.4x", app_idx);
-	jstring = json_object_new_string(buf);
-	if (!jstring)
+	if (!write_int(jentry, "index", app_idx))
 		goto fail;
 
-	json_object_object_add(jentry, "index", jstring);
-
-	snprintf(buf, 5, "%4.4x", net_idx);
-	jstring = json_object_new_string(buf);
-	if (!jstring)
+	if (!write_int(jentry, "boundNetKey", net_idx))
 		goto fail;
 
-	json_object_object_add(jentry, "boundNetKey", jstring);
-
 	if (!add_key_value(jentry, "key", key))
 		goto fail;
 
@@ -995,6 +982,7 @@ static struct mesh_config_pub *parse_model_publication(json_object *jpub)
 	case 32:
 		if (!str2hex(str, len, pub->virt_addr, 16))
 			goto fail;
+
 		pub->virt = true;
 		break;
 	default:
@@ -1468,19 +1456,6 @@ static bool write_uint32_hex(json_object *jobj, const char *desc, uint32_t val)
 	return true;
 }
 
-static bool write_int(json_object *jobj, const char *desc, int val)
-{
-	json_object *jvalue;
-
-	jvalue = json_object_new_int(val);
-	if (!jvalue)
-		return false;
-
-	json_object_object_del(jobj, desc);
-	json_object_object_add(jobj, desc, jvalue);
-	return true;
-}
-
 static const char *mode_to_string(int mode)
 {
 	switch (mode) {
@@ -1872,7 +1847,7 @@ bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t ele_addr,
 	if (!res)
 		goto fail;
 
-	if (!write_uint16_hex(jpub, "index", pub->idx))
+	if (!write_int(jpub, "index", pub->idx))
 		goto fail;
 
 	if (!write_int(jpub, "ttl", pub->ttl))
@@ -1881,8 +1856,7 @@ bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t ele_addr,
 	if (!write_int(jpub, "period", pub->period))
 		goto fail;
 
-	if (!write_int(jpub, "credentials",
-						pub->credential ? 1 : 0))
+	if (!write_int(jpub, "credentials", pub->credential ? 1 : 0))
 		goto fail;
 
 	jrtx = json_object_new_object();
-- 
2.26.2


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-24 20:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-24 20:09 [PATCH BlueZ] mesh: Store key indices as integers in node config Inga Stotland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.