#include "nnstreamer-edge-log.h"
#include "nnstreamer-edge-util.h"
+#define NNS_EDGE_DATA_KEY (0xeddaedda)
+
/**
* @brief Internal data structure for the header of the serialzied edge data.
*/
typedef struct
{
+ uint32_t key;
uint32_t num_mem;
nns_size_t data_len[NNS_EDGE_DATA_LIMIT];
nns_size_t meta_len;
header_len = sizeof (nns_edge_data_header_s);
data_len = 0;
+ edata_header.key = NNS_EDGE_DATA_KEY;
edata_header.num_mem = ed->num;
for (n = 0; n < ed->num; n++) {
edata_header.data_len[n] = ed->data[n].data_len;
nns_edge_data_header_s *header;
int ret;
unsigned int n;
- nns_size_t total;
char *ptr;
ed = (nns_edge_data_s *) data_h;
return NNS_EDGE_ERROR_INVALID_PARAMETER;
}
+ ret = nns_edge_data_is_serialized (data, data_len);
+ if (ret != NNS_EDGE_ERROR_NONE)
+ return ret;
+
nns_edge_lock (ed);
header = (nns_edge_data_header_s *) data;
-
- /* Check mem size */
- total = sizeof (nns_edge_data_header_s) + header->meta_len;
- for (n = 0; n < header->num_mem; n++) {
- total += header->data_len[n];
- }
-
- if (total != data_len) {
- nns_edge_loge ("Invalid data size to deserialize edge data.");
- ret = NNS_EDGE_ERROR_INVALID_PARAMETER;
- goto error;
- }
-
ptr = (char *) data + sizeof (nns_edge_data_header_s);
ed->num = header->num_mem;
ret = nns_edge_metadata_deserialize (ed->metadata, ptr, header->meta_len);
-error:
nns_edge_unlock (ed);
return ret;
}
+
+/**
+ * @brief Check given data is serialized buffer.
+ */
+int
+nns_edge_data_is_serialized (const void *data, const nns_size_t data_len)
+{
+ nns_edge_data_header_s *header;
+ nns_size_t total;
+ unsigned int n;
+
+ if (!data) {
+ nns_edge_loge ("Invalid param, given data is null.");
+ return NNS_EDGE_ERROR_INVALID_PARAMETER;
+ }
+
+ header = (nns_edge_data_header_s *) data;
+ if (header->key != NNS_EDGE_DATA_KEY) {
+ nns_edge_loge ("Invalid param, given data has invalid format.");
+ 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++)
+ total += header->data_len[n];
+
+ if (total != data_len) {
+ nns_edge_loge ("Invalid param, given data has invalid data size.");
+ return NNS_EDGE_ERROR_INVALID_PARAMETER;
+ }
+
+ return NNS_EDGE_ERROR_NONE;
+}
nns_edge_free (data);
}
+/**
+ * @brief Util to check serialized data - invalid param.
+ */
+TEST(edgeDataIsSerialized, invalidParam01_n)
+{
+ int ret;
+
+ ret = nns_edge_data_is_serialized (NULL, 1U);
+ EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+}
+
+/**
+ * @brief Util to check serialized data - invalid param.
+ */
+TEST(edgeDataIsSerialized, invalidParam02_n)
+{
+ void *data;
+ int ret;
+
+ data = nns_edge_malloc (100U);
+ ASSERT_TRUE (data != NULL);
+ memset (data, 0, 100U);
+
+ /* invalid data key */
+ ret = nns_edge_data_is_serialized (data, 100U);
+ EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+
+ nns_edge_free (data);
+}
+
+/**
+ * @brief Util to check serialized data - invalid param.
+ */
+TEST(edgeDataIsSerialized, invalidParam03_n)
+{
+ nns_edge_data_h data_h;
+ void *data;
+ nns_size_t data_len;
+ int ret;
+
+ ret = nns_edge_data_create (&data_h);
+ EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+ ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value");
+ EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+ ret = nns_edge_data_serialize (data_h, &data, &data_len);
+ EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+ /* invalid data size */
+ ret = nns_edge_data_is_serialized (data, 1U);
+ EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+
+ ret = nns_edge_data_destroy (data_h);
+ EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+ nns_edge_free (data);
+}
+
/**
* @brief Create edge event - invalid param.
*/