コード例 #1
0
ファイル: cbortests.cpp プロジェクト: Frank-KunLi/iotivity
TEST_F(CborByteStringTest, ByteStringArraySetGetTest )
{
    OCRepPayloadSetUri(payload_in, "/a/quake_sensor");
    OCRepPayloadSetPropInt(payload_in, "scale", 4);

    size_t dimensions_in[MAX_REP_ARRAY_DEPTH] = { 3, 0, 0};
    uint8_t binval1[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19};
    uint8_t binval2[] = {0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29};
    uint8_t binval3[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};

    OCByteString quakedata_in[3] = {{binval1, sizeof(binval1)},
                                    {binval2, sizeof(binval2)},
                                    {binval3, sizeof(binval3)}};

    EXPECT_EQ(true, OCRepPayloadSetByteStringArray(payload_in, "quakedata",
                quakedata_in, dimensions_in));

    OCByteString* quakedata_out = NULL;
    size_t dimensions_out[MAX_REP_ARRAY_DEPTH] = {0};
    ASSERT_EQ(true, OCRepPayloadGetByteStringArray(payload_in, "quakedata",
                &quakedata_out, dimensions_out));

    for(size_t i = 0; i < dimensions_in[0]; i++)
    {
        EXPECT_EQ(quakedata_in[i].len, quakedata_out[i].len);
        EXPECT_EQ(0, memcmp(quakedata_in[i].bytes, quakedata_out[i].bytes, quakedata_in[i].len));
    }

    // Cleanup
    for(size_t i = 0; i < dimensions_out[0]; i++)
    {
        OICFree(quakedata_out[i].bytes);
    }
    OICFree(quakedata_out);
}
コード例 #2
0
ファイル: cbortests.cpp プロジェクト: Frank-KunLi/iotivity
TEST_F(CborByteStringTest, ByteStringArrayConvertParseTest )
{
    OCRepPayloadSetUri(payload_in, "/a/quake_sensor");
    OCRepPayloadSetPropInt(payload_in, "scale", 4);

    size_t dimensions_in[MAX_REP_ARRAY_DEPTH] = { 3, 0, 0};
    uint8_t binval1[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19};
    uint8_t binval2[] = {0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29};
    uint8_t binval3[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};

    OCByteString quakedata_in[3] = {{binval1, sizeof(binval1)},
                                    {binval2, sizeof(binval2)},
                                    {binval3, sizeof(binval3)}};

    EXPECT_EQ(true, OCRepPayloadSetByteStringArray(payload_in, "quakedata",
                quakedata_in, dimensions_in));

    // Convert OCPayload to CBOR
    uint8_t *payload_cbor = NULL;
    size_t payload_cbor_size = 0;
    EXPECT_EQ(OC_STACK_OK, OCConvertPayload((OCPayload*) payload_in, &payload_cbor, &payload_cbor_size));
#ifdef CBOR_BIN_STRING_DEBUG
    FILE *fp = fopen("binstringarr.cbor", "wb+");
    if (fp)
    {
        fwrite(payload_cbor, 1, payload_cbor_size, fp);
        fclose(fp);
    }
#endif //CBOR_BIN_STRING_DEBUG

    // Parse CBOR back to OCPayload
    OCPayload* payload_out = NULL;
    EXPECT_EQ(OC_STACK_OK, OCParsePayload(&payload_out, PAYLOAD_TYPE_REPRESENTATION,
                payload_cbor, payload_cbor_size));

    OCByteString* quakedata_out = NULL;
    size_t dimensions_out[MAX_REP_ARRAY_DEPTH] = {0};
    ASSERT_EQ(true, OCRepPayloadGetByteStringArray((OCRepPayload*)payload_out, "quakedata",
                &quakedata_out, dimensions_out));

    for(size_t i = 0; i < dimensions_in[0]; i++)
    {
        EXPECT_EQ(quakedata_in[i].len, quakedata_out[i].len);
        EXPECT_EQ(0, memcmp(quakedata_in[i].bytes, quakedata_out[i].bytes, quakedata_in[i].len));
    }

    // Cleanup
    OICFree(payload_cbor);
    for(size_t i = 0; i < dimensions_out[0]; i++)
    {
        OICFree(quakedata_out[i].bytes);
    }
    OICFree(quakedata_out);

    OCPayloadDestroy((OCPayload*)payload_out);
}
コード例 #3
0
static int _icd_state_array_from_list(OCRepPayload *repr,
		struct icd_state_list_s *value_list, const char *key)
{
	int i, len;
	GList *node;
	bool *b_arr;
	double *d_arr;
	char **str_arr;
	int64_t *i_arr;
	OCByteString *byte_arr;
	union icd_state_value_u *value;
	struct OCRepPayload **state_arr;

	len = calcDimTotal(value_list->dimensions);

	switch (value_list->type) {
	case OCREP_PROP_INT:
		i_arr = calloc(len, sizeof(int64_t));
		if (NULL == i_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++) {
			value = node->data;
			i_arr[i] = value->i;
		}
		g_list_free_full(value_list->list, free);
		OCRepPayloadSetIntArrayAsOwner(repr, key, i_arr, value_list->dimensions);
		break;
	case OCREP_PROP_BOOL:
		b_arr = calloc(len, sizeof(bool));
		if (NULL == b_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++) {
			value = node->data;
			b_arr[i] = value->b;
		}
		g_list_free_full(value_list->list, free);
		OCRepPayloadSetBoolArrayAsOwner(repr, key, b_arr, value_list->dimensions);
		break;
	case OCREP_PROP_DOUBLE:
		d_arr = calloc(len, sizeof(double));
		if (NULL == d_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++) {
			value = node->data;
			d_arr[i] = value->d;
		}
		g_list_free_full(value_list->list, free);
		OCRepPayloadSetDoubleArrayAsOwner(repr, key, d_arr, value_list->dimensions);
		break;
	case OCREP_PROP_STRING:
		str_arr = calloc(len, sizeof(char *));
		if (NULL == str_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++)
			str_arr[i] = strdup(node->data);
		g_list_free_full(value_list->list, free);
		OCRepPayloadSetStringArrayAsOwner(repr, key, str_arr, value_list->dimensions);
		break;
	case OCREP_PROP_BYTE_STRING:
		byte_arr = calloc(len, sizeof(OCByteString));
		if (NULL == byte_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++) {
			OCByteString *byte_str = node->data;
			byte_arr[i].bytes = byte_str->bytes;
			byte_arr[i].len = byte_str->len;
		}
		g_list_free(value_list->list);
		OCRepPayloadSetByteStringArray(repr, key, byte_arr, value_list->dimensions);

		break;
	case OCREP_PROP_OBJECT:
		state_arr = calloc(len, sizeof(struct OCRepPayload *));
		if (NULL == state_arr) {
			ERR("calloc() Fail(%d)", errno);
			return IOTCON_ERROR_OUT_OF_MEMORY;
		}
		for (node = value_list->list, i = 0; node; node = node->next, i++)
			state_arr[i] = OCRepPayloadClone(node->data);
		g_list_free_full(value_list->list, _icd_payload_object_destroy);
		OCRepPayloadSetPropObjectArrayAsOwner(repr, key, state_arr,
				value_list->dimensions);
		break;
	case OCREP_PROP_ARRAY:
	case OCREP_PROP_NULL:
	default:
		ERR("Invalid Type(%d)", value_list->type);
		return IOTCON_ERROR_INVALID_TYPE;
	}

	return IOTCON_ERROR_NONE;
}