[Cmd] version info in buffer accepted/tizen/unified/20230907.175335
authorJaeyun Jung <jy1210.jung@samsung.com>
Thu, 7 Sep 2023 06:58:41 +0000 (15:58 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Thu, 7 Sep 2023 08:21:16 +0000 (17:21 +0900)
Add version info while sending and receiving buffer between edge connection.

TODO:
Now max memories in edge-data is 16. Check the limit when updating this definition.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
src/libnnstreamer-edge/nnstreamer-edge-data.c
src/libnnstreamer-edge/nnstreamer-edge-internal.c

index 39a6476083b3bafc50315455052a99b83066bfe6..6abbe20683484bf7bbbc36a248c53cac2c941a8f 100644 (file)
@@ -22,6 +22,7 @@
 typedef struct
 {
   uint32_t key;
+  uint64_t version;
   uint32_t num_mem;
   nns_size_t data_len[NNS_EDGE_DATA_LIMIT];
   nns_size_t meta_len;
@@ -543,6 +544,7 @@ nns_edge_data_serialize (nns_edge_data_h data_h, void **data, nns_size_t * len)
 
   data_len = 0;
   edata_header.key = NNS_EDGE_DATA_KEY;
+  edata_header.version = nns_edge_generate_version_key ();
   edata_header.num_mem = ed->num;
   for (n = 0; n < ed->num; n++) {
     edata_header.data_len[n] = ed->data[n].data_len;
@@ -653,6 +655,21 @@ nns_edge_data_is_serialized (const void *data, const nns_size_t data_len)
     return NNS_EDGE_ERROR_INVALID_PARAMETER;
   }
 
+  if (!nns_edge_parse_version_key (header->version, NULL, NULL, NULL)) {
+    nns_edge_loge ("Invalid param, given data has invalid version.");
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+  }
+
+  /**
+   * @todo The number of memories in data.
+   * Total number of memories in edge-data should be less than NNS_EDGE_DATA_LIMIT.
+   * Fetch nns-edge version info and check allowed memories if NNS_EDGE_DATA_LIMIT is updated.
+   */
+  if (header->num_mem > NNS_EDGE_DATA_LIMIT) {
+    nns_edge_loge ("Invalid param, given data has invalid memories.");
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+  }
+
   /* Check mem size */
   total = sizeof (nns_edge_data_header_s) + header->meta_len;
   for (n = 0; n < header->num_mem; n++)
index 5e602ddf0a0fe535ba2b8d5563cc9be92287678a..c83b84ec0807827e61c335e368e2cd701c0874a7 100644 (file)
@@ -92,6 +92,7 @@ typedef struct
 {
   uint32_t magic;
   uint32_t cmd; /**< enum for query commands, see nns_edge_cmd_e. */
+  uint64_t version;
   int64_t client_id;
 
   /* memory info */
@@ -284,6 +285,7 @@ _nns_edge_cmd_init (nns_edge_cmd_s * cmd, nns_edge_cmd_e c, int64_t cid)
   memset (cmd, 0, sizeof (nns_edge_cmd_s));
   nns_edge_handle_set_magic (&cmd->info, NNS_EDGE_MAGIC);
   cmd->info.cmd = c;
+  cmd->info.version = nns_edge_generate_version_key ();
   cmd->info.client_id = cid;
   cmd->info.num = 0;
   cmd->info.meta_size = 0;
@@ -309,8 +311,11 @@ _nns_edge_cmd_clear (nns_edge_cmd_s * cmd)
 
   SAFE_FREE (cmd->meta);
 
-  cmd->info.num = 0U;
-  cmd->info.meta_size = 0U;
+  cmd->info.cmd = _NNS_EDGE_CMD_ERROR;
+  cmd->info.version = 0;
+  cmd->info.client_id = 0;
+  cmd->info.num = 0;
+  cmd->info.meta_size = 0;
 }
 
 /**
@@ -331,6 +336,17 @@ _nns_edge_cmd_is_valid (nns_edge_cmd_s * cmd)
     return false;
   }
 
+  if (!nns_edge_parse_version_key (cmd->info.version, NULL, NULL, NULL))
+    return false;
+
+  /**
+   * @todo The number of memories in data.
+   * Total number of memories in edge-data should be less than NNS_EDGE_DATA_LIMIT.
+   * Fetch nns-edge version info and check allowed memories if NNS_EDGE_DATA_LIMIT is updated.
+   */
+  if (cmd->info.num > NNS_EDGE_DATA_LIMIT)
+    return false;
+
   return true;
 }