@@ -122,30 +122,6 @@ static json_object *get_node_by_unicast(uint16_t unicast)
return NULL;
}
-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, *jval;
- const char *str;
- uint16_t jidx;
-
- jentry = json_object_array_get_idx(jarray, i);
- if (!json_object_object_get_ex(jentry, "index", &jval))
- return NULL;
-
- str = json_object_get_string(jval);
- if (sscanf(str, "%04hx", &jidx) != 1)
- return NULL;
-
- if (jidx == idx)
- return jentry;
- }
-
- return NULL;
-}
-
static bool get_int(json_object *jobj, const char *keyword, int *value)
{
json_object *jvalue;
@@ -154,8 +130,11 @@ static bool get_int(json_object *jobj, const char *keyword, int *value)
return false;
*value = json_object_get_int(jvalue);
- if (errno == EINVAL)
+ if (errno != 0) {
+ l_error("Error: %s should contain an integer value\n",
+ keyword);
return false;
+ }
return true;
}
@@ -174,8 +153,27 @@ static bool write_int(json_object *jobj, const char *keyword, int val)
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;
+ int jidx;
+
+ jentry = json_object_array_get_idx(jarray, i);
+ if (!get_int(jentry, "index", &jidx))
+ return NULL;
+
+ if (jidx == idx)
+ return jentry;
+ }
+
+ return NULL;
+}
+
static bool write_uint16_hex(json_object *jobj, const char *desc,
- uint16_t value)
+ uint16_t value)
{
json_object *jstring;
char buf[5];
@@ -222,8 +220,8 @@ static json_object *get_node_by_uuid(json_object *jcfg, uint8_t uuid[16])
return NULL;
}
-static bool add_u8_8(json_object *jobj, const uint8_t value[8],
- const char *desc)
+static bool add_u8_8(json_object *jobj, const char *desc,
+ const uint8_t value[8])
{
json_object *jstring;
char buf[17];
@@ -237,8 +235,8 @@ static bool add_u8_8(json_object *jobj, const uint8_t value[8],
return true;
}
-static bool add_u8_16(json_object *jobj, const uint8_t value[16],
- const char *desc)
+static bool add_u8_16(json_object *jobj, const char *desc,
+ const uint8_t value[16])
{
json_object *jstring;
char buf[33];
@@ -252,7 +250,7 @@ static bool add_u8_16(json_object *jobj, const uint8_t value[16],
return true;
}
-static bool add_string(json_object *jobj, const char *str, const char *desc)
+static bool add_string(json_object *jobj, const char *desc, const char *str)
{
json_object *jstring = json_object_new_string(str);
@@ -283,22 +281,17 @@ static bool get_token(json_object *jobj, uint8_t token[8])
static uint16_t node_parse_key(json_object *jarray, int i)
{
- json_object *jkey, *jval;
- const char *str;
- uint16_t idx;
+ json_object *jkey;
+ int idx;
jkey = json_object_array_get_idx(jarray, i);
if (!jkey)
return KEY_IDX_INVALID;
- if (!json_object_object_get_ex(jkey, "index", &jval))
+ if (!get_int(jkey, "index", &idx))
return KEY_IDX_INVALID;
- str = json_object_get_string(jval);
- if (sscanf(str, "%04hx", &idx) != 1)
- return KEY_IDX_INVALID;
-
- return idx;
+ return (uint16_t)idx;
}
static int compare_group_addr(const void *a, const void *b, void *user_data)
@@ -409,8 +402,7 @@ static void load_remotes(json_object *jcfg)
static bool add_app_key(json_object *jobj, uint16_t net_idx, uint16_t app_idx)
{
- json_object *jval, *jkey, *jarray;
- char buf[5];
+ json_object *jkey, *jarray;
json_object_object_get_ex(jobj, "appKeys", &jarray);
if (!jarray || json_object_get_type(jarray) != json_type_array)
@@ -418,20 +410,12 @@ static bool add_app_key(json_object *jobj, uint16_t net_idx, uint16_t app_idx)
jkey = json_object_new_object();
- snprintf(buf, 5, "%4.4x", net_idx);
- jval = json_object_new_string(buf);
- if (!jval)
+ if (!write_int(jkey, "boundNetKey", (int)net_idx))
goto fail;
- json_object_object_add(jkey, "boundNetKey", jval);
-
- snprintf(buf, 5, "%4.4x", app_idx);
- jval = json_object_new_string(buf);
- if (!jval)
+ if (!write_int(jkey, "index", (int)app_idx))
goto fail;
- json_object_object_add(jkey, "index", jval);
-
json_object_array_add(jarray, jkey);
return true;
@@ -442,8 +426,7 @@ fail:
static bool add_node_key(json_object *jobj, const char *desc, uint16_t idx)
{
- json_object *jval, *jkey, *jarray;
- char buf[5];
+ json_object *jkey, *jarray;
json_object_object_get_ex(jobj, desc, &jarray);
if (!jarray || json_object_get_type(jarray) != json_type_array)
@@ -451,15 +434,11 @@ static bool add_node_key(json_object *jobj, const char *desc, uint16_t idx)
jkey = json_object_new_object();
- snprintf(buf, 5, "%4.4x", idx);
-
- jval = json_object_new_string(buf);
- if (!jval) {
+ if (!write_int(jkey, "index", (int)idx)) {
json_object_put(jkey);
return false;
}
- json_object_object_add(jkey, "index", jval);
json_object_array_add(jarray, jkey);
return save_config();
@@ -501,18 +480,12 @@ static void jarray_key_del(json_object *jarray, int16_t idx)
int i, sz = json_object_array_length(jarray);
for (i = 0; i < sz; ++i) {
- json_object *jentry, *jval;
- uint16_t val;
- const char *str;
+ json_object *jentry;
+ int val;
jentry = json_object_array_get_idx(jarray, i);
- if (!json_object_object_get_ex(jentry, "index", &jval))
- continue;
-
- str = json_object_get_string(jval);
-
- if (sscanf(str, "%04hx", &val) != 1)
+ if (!get_int(jentry, "index", &val))
continue;
if (val == idx) {
@@ -579,8 +552,8 @@ bool mesh_db_node_app_key_del(uint16_t unicast, uint16_t idx)
static bool load_keys(json_object *jobj)
{
- json_object *jarray, *jentry, *jval;
- uint16_t net_idx, app_idx;
+ json_object *jarray, *jentry;
+ int net_idx, app_idx;
int i, key_cnt;
json_object_object_get_ex(jobj, "netKeys", &jarray);
@@ -592,20 +565,14 @@ static bool load_keys(json_object *jobj)
return false;
for (i = 0; i < key_cnt; ++i) {
- const char *str;
int phase;
jentry = json_object_array_get_idx(jarray, i);
- if (!json_object_object_get_ex(jentry, "index", &jval))
- return false;
-
- str = json_object_get_string(jval);
-
- if (sscanf(str, "%04hx", &net_idx) != 1)
+ if (!get_int(jentry, "index", &net_idx))
return false;
- keys_add_net_key(net_idx);
+ keys_add_net_key((uint16_t) net_idx);
if (!get_int(jentry, "phase", &phase))
return false;
@@ -622,26 +589,16 @@ static bool load_keys(json_object *jobj)
return false;
for (i = 0; i < key_cnt; ++i) {
- const char *str;
jentry = json_object_array_get_idx(jarray, i);
- if (!json_object_object_get_ex(jentry, "boundNetKey", &jval))
+ if (!get_int(jentry, "boundNetKey", &net_idx))
return false;
- str = json_object_get_string(jval);
-
- if (sscanf(str, "%04hx", &net_idx) != 1)
+ if (!get_int(jentry, "index", &app_idx))
return false;
- if (!json_object_object_get_ex(jentry, "index", &jval))
- return false;
-
- str = json_object_get_string(jval);
-
- if (sscanf(str, "%04hx", &app_idx) != 1)
- return false;
- keys_add_app_key(net_idx, app_idx);
+ keys_add_app_key((uint16_t) net_idx, (uint16_t) app_idx);
}
return true;
@@ -649,8 +606,7 @@ static bool load_keys(json_object *jobj)
bool mesh_db_net_key_add(uint16_t net_idx)
{
- json_object *jval, *jkey, *jarray;
- char buf[5];
+ json_object *jkey, *jarray;
if (!cfg || !cfg->jcfg)
return false;
@@ -664,14 +620,9 @@ bool mesh_db_net_key_add(uint16_t net_idx)
jkey = json_object_new_object();
- snprintf(buf, 5, "%4.4x", net_idx);
-
- jval = json_object_new_string(buf);
- if (!jval)
+ if (!write_int(jkey, "index", net_idx))
goto fail;
- json_object_object_add(jkey, "index", jval);
-
if (!write_int(jkey, "phase", KEY_REFRESH_PHASE_NONE))
goto fail;
@@ -755,14 +706,11 @@ bool mesh_db_add_group(struct mesh_group *grp)
json_object_object_add(jgroup, "name", jval);
if (IS_VIRTUAL(grp->addr)) {
- if (!add_u8_16(jgroup, grp->label, "address"))
+ if (!add_u8_16(jgroup, "address", grp->label))
goto fail;
} else {
- snprintf(buf, 5, "%4.4x", grp->addr);
- jval = json_object_new_string(buf);
- if (!jval)
+ if (!write_uint16_hex(jgroup, "address", grp->addr))
goto fail;
- json_object_object_add(jgroup, "address", jval);
}
json_object_array_add(jgroups, jgroup);
@@ -861,7 +809,7 @@ bool mesh_db_add_node(uint8_t uuid[16], uint8_t num_els, uint16_t unicast,
if (!jnode)
return false;
- if (!add_u8_16(jnode, uuid, "uuid"))
+ if (!add_u8_16(jnode, "uuid", uuid))
goto fail;
jelements = json_object_new_array();
@@ -1022,15 +970,15 @@ bool mesh_db_create(const char *fname, const uint8_t token[8],
cfg->cfg_fname = l_strdup(fname);
memcpy(cfg->token, token, 8);
- if (!add_u8_8(jcfg, token, "token"))
+ if (!add_u8_8(jcfg, "token", token))
goto fail;
l_getrandom(uuid, 16);
- if (!add_u8_16(jcfg, uuid, "uuid"))
+ if (!add_u8_16(jcfg, "uuid", uuid))
goto fail;
- if (mesh_name && !add_string(jcfg, mesh_name, "name"))
+ if (mesh_name && !add_string(jcfg, "name", mesh_name))
goto fail;
jarray = json_object_new_array();