*/
typedef struct
{
+ unsigned int magic;
nns_edge_cmd_e cmd;
int64_t client_id;
return;
memset (cmd, 0, sizeof (nns_edge_cmd_s));
+ cmd->info.magic = NNS_EDGE_MAGIC;
cmd->info.cmd = c;
cmd->info.client_id = cid;
}
if (!cmd)
return;
+ cmd->info.magic = NNS_EDGE_MAGIC_DEAD;
+
for (i = 0; i < cmd->info.num; i++) {
if (cmd->mem[i])
free (cmd->mem[i]);
}
}
+/**
+ * @brief Validate edge command.
+ */
+static bool
+_nns_edge_cmd_is_valid (nns_edge_cmd_s * cmd)
+{
+ int command;
+
+ if (!cmd)
+ return false;
+
+ command = (int) cmd->info.cmd;
+
+ if (!NNS_EDGE_MAGIC_IS_VALID (&cmd->info) ||
+ (command < 0 || command >= _NNS_EDGE_CMD_END)) {
+ return false;
+ }
+
+ return true;
+}
+
/**
* @brief Send edge command to connected device.
*/
if (!conn || !cmd)
return NNS_EDGE_ERROR_INVALID_PARAMETER;
+ if (!_nns_edge_cmd_is_valid (cmd)) {
+ nns_edge_loge ("Failed to send command, invalid command.");
+ return NNS_EDGE_ERROR_INVALID_PARAMETER;
+ }
+
if (!_send_raw_data (conn->socket, &cmd->info,
sizeof (nns_edge_cmd_info_s), conn->cancellable)) {
nns_edge_loge ("Failed to send command to socket.");
return NNS_EDGE_ERROR_IO;
}
+ if (!_nns_edge_cmd_is_valid (cmd)) {
+ nns_edge_loge ("Failed to receive command, invalid command.");
+ return NNS_EDGE_ERROR_IO;
+ }
+
nns_edge_logd ("Received command:%d (num:%u)", cmd->info.cmd, cmd->info.num);
for (n = 0; n < cmd->info.num; n++) {