Message ID | 20200828165112.4937-1-inga.stotland@intel.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [BlueZ,v2] mesh: Store key indices as integers in node config | expand |
Applied On Fri, 2020-08-28 at 09:51 -0700, Inga Stotland wrote: > Store NetKey and AppKey indices as integers instead of hex strings. > This removes unnecessary string manipulations while not affecting > the 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();
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();