return a == b;
}
-static void parse_prov_caps(struct mesh_agent_prov_caps *caps,
+static bool parse_prov_caps(struct mesh_agent_prov_caps *caps,
struct l_dbus_message_iter *property)
{
struct l_dbus_message_iter iter_caps;
uint32_t i;
if (!l_dbus_message_iter_get_variant(property, "as", &iter_caps))
- return;
+ return false;
while (l_dbus_message_iter_next_entry(&iter_caps, &str)) {
for (i = 0; i < L_ARRAY_SIZE(cap_table); i++) {
caps->static_type = 1;
}
+ return true;
}
-static void parse_oob_info(struct mesh_agent_prov_caps *caps,
+static bool parse_oob_info(struct mesh_agent_prov_caps *caps,
struct l_dbus_message_iter *property)
{
struct l_dbus_message_iter iter_oob;
const char *str;
if (!l_dbus_message_iter_get_variant(property, "as", &iter_oob))
- return;
+ return false;
while (l_dbus_message_iter_next_entry(&iter_oob, &str)) {
for (i = 0; i < L_ARRAY_SIZE(oob_table); i++) {
caps->oob_info |= oob_table[i].mask;
}
}
+
+ return true;
}
-static void parse_properties(struct mesh_agent *agent,
+static bool parse_properties(struct mesh_agent *agent,
struct l_dbus_message_iter *properties)
{
const char *key, *uri_string;
while (l_dbus_message_iter_next_entry(properties, &key, &variant)) {
if (!strcmp(key, "Capabilities")) {
- parse_prov_caps(&agent->caps, &variant);
+ if (!parse_prov_caps(&agent->caps, &variant))
+ return false;
} else if (!strcmp(key, "URI")) {
- l_dbus_message_iter_get_variant(&variant, "s",
- &uri_string);
+ if (!l_dbus_message_iter_get_variant(&variant, "s",
+ &uri_string))
+ return false;
/* TODO: compute hash */
} else if (!strcmp(key, "OutOfBandInfo")) {
- parse_oob_info(&agent->caps, &variant);
+ if (!parse_oob_info(&agent->caps, &variant))
+ return false;
}
}
+
+ return true;
}
static void agent_free(void *agent_data)
agent->owner = l_strdup(owner);
agent->path = l_strdup(path);
- parse_properties(agent, properties);
+ if (!parse_properties(agent, properties)) {
+ l_free(agent);
+ return NULL;
+ }
l_queue_push_tail(agents, agent);
err = get_reply_error(reply);
if (err != MESH_ERROR_NONE)
- goto fail;
+ goto done;
if (!l_dbus_message_get_arguments(reply, "a{sv}", &properties)) {
err = MESH_ERROR_FAILED;
- goto fail;
+ goto done;
}
- parse_properties(agent, &properties);
-fail:
+ if (!parse_properties(agent, &properties))
+ err = MESH_ERROR_FAILED;
+
+done:
if (req->cb) {
cb = req->cb;
cb(req->user_data, err);
mesh_agent_key_cb_t cb;
struct l_dbus_message_iter iter_array;
uint32_t n = 0, expected_len = 0;
- uint8_t *buf;
+ uint8_t *buf = NULL;
int err;
if (!l_queue_find(agents, simple_match, agent) || !agent->req)
if (!app_keys)
return NULL;
- key = app_key_new();
- if (!key)
+ if (!mesh_net_have_key(net, net_idx))
return false;
- if (!mesh_net_have_key(net, net_idx))
+ key = app_key_new();
+ if (!key)
return false;
key->net_idx = net_idx;
pub = mesh_model_pub_get(node, ele_addr, id, &status);
- rtx = pub->rtx.cnt + (((pub->rtx.interval / 50) - 1) << 3);
-
- if (pub && status == MESH_STATUS_SUCCESS)
+ if (pub && status == MESH_STATUS_SUCCESS) {
+ rtx = pub->rtx.cnt + (((pub->rtx.interval / 50) - 1) << 3);
return set_pub_status(status, ele_addr, id, pub->addr, pub->idx,
pub->credential, pub->ttl, pub->period,
rtx);
- else
+ } else
return set_pub_status(status, ele_addr, id, 0, 0, 0, 0, 0, 0);
}
struct mesh_net *net = node_get_net(node);
n_idx = l_get_le16(pkt) & 0xfff;
- if (n_idx > NET_IDX_MAX)
- return 0;
-
a_idx = l_get_le16(pkt + 1) >> 4;
- if (a_idx > APP_IDX_MAX)
- return 0;
n = mesh_model_opcode_set(OP_APPKEY_STATUS, msg);
return false;
snprintf(key_file, PATH_MAX, "%s%s", node_path, net_key_dir);
- mkdir(key_file, 0755);
+
+ if (!mkdir(key_file, 0755))
+ l_debug("failed to mkdir %s", key_file);
+
snprintf(key_file, PATH_MAX, "%s%s/%3.3x", node_path, net_key_dir,
net_idx);
l_debug("Put Net Key %s", key_file);
fd = open(key_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fd >= 0) {
- if (write(fd, key, sizeof(*key)) == sizeof(*key))
- result = true;
+ if (fd < 0)
+ return false;
- close(fd);
- }
+ if (write(fd, key, sizeof(*key)) == sizeof(*key))
+ result = true;
+
+ close(fd);
return result;
}
return false;
snprintf(key_file, PATH_MAX, "%s%s", node_path, app_key_dir);
- mkdir(key_file, 0755);
+
+ if (!mkdir(key_file, 0755))
+ l_debug("failed to mkdir %s", key_file);
+
snprintf(key_file, PATH_MAX, "%s%s/%3.3x", node_path, app_key_dir,
app_idx);
l_debug("Put App Key %s", key_file);
}
lseek(fd, 0, SEEK_SET);
- } else
+ } else {
fd = open(key_file, O_WRONLY | O_CREAT | O_TRUNC,
S_IRUSR | S_IWUSR);
+ if (fd < 0)
+ return false;
+ }
- if (fd >= 0) {
- if (write(fd, key, sizeof(*key)) == sizeof(*key))
- result = true;
+ if (write(fd, key, sizeof(*key)) == sizeof(*key))
+ result = true;
- close(fd);
- }
+ close(fd);
return result;
}
return false;
snprintf(key_file, PATH_MAX, "%s%s", node_path, dev_key_dir);
- mkdir(key_file, 0755);
+
+ if (!mkdir(key_file, 0755))
+ l_debug("failed to mkdir %s", key_file);
for (i = 0; i < count; i++) {
snprintf(key_file, PATH_MAX, "%s%s/%4.4x", node_path,