ocpayload: Set default DMV values and only use comma as delim
authorPhilippe Coval <philippe.coval@osg.samsung.com>
Mon, 27 Jun 2016 21:33:40 +0000 (23:33 +0200)
committerZiran Sun <ziran.sun@samsung.com>
Wed, 29 Jun 2016 12:35:45 +0000 (12:35 +0000)
For IoTivity-1.1.1: "res.1.1.0,sh.1.1.0" are used
as default Data Model Versions.

Now only use ',' as CSV separator (so ';' must be avoided).

This change has been tested on Debian jessie
and can be squashed into :

https://gerrit.iotivity.org/gerrit/#/c/8707/

Bug: https://jira.iotivity.org/browse/IOT-1101
Change-Id: I8e79776a8fc6c6112db9d5a9ab9a2008e9ea426e
Signed-off-by: Philippe Coval <philippe.coval@osg.samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/8973
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Ziran Sun <ziran.sun@samsung.com>
resource/csdk/stack/include/ocpayload.h
resource/csdk/stack/src/ocpayload.c
resource/csdk/stack/src/ocpayloadconvert.c
resource/unittests/OCRepresentationEncodingTest.cpp

index 992adc8..0f472e1 100644 (file)
@@ -263,7 +263,7 @@ void OCFreeOCStringLL(OCStringLL* ll);
  * This function creates a list from a string (with separated contents if several)
  * @param text         single string or CSV text fields
  * @return newly allocated linked list
- * @note separator is ',' (according to rfc4180) or ';'
+ * @note separator is ',' (according to rfc4180, ';' is not valid)
  **/
 OCStringLL* OCCreateOCStringLL(const char* text);
 
index eef8c3e..09ec90f 100644 (file)
@@ -34,7 +34,6 @@
 
 #define TAG "OIC_RI_PAYLOAD"
 #define CSV_SEPARATOR ','
-#define CSV_SEPARATORS ",;"
 
 static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val);
 
@@ -1295,13 +1294,15 @@ OCStringLL* OCCreateOCStringLL(const char* text)
     OCStringLL* result = NULL;
     OCStringLL* iter = NULL;
     OCStringLL* prev = NULL;
+    static const char delim[] = { CSV_SEPARATOR, '\0' };
 
     VERIFY_PARAM_NON_NULL(TAG, text, "Invalid parameter");
     backup = OICStrdup(text);
     VERIFY_PARAM_NON_NULL(TAG, backup, "Failed allocating memory");
+
     for (head = backup; ; head = NULL)
     {
-        token = (char *) strtok_r(head, CSV_SEPARATORS, &tail);
+        token = (char *) strtok_r(head, delim, &tail);
         if (!token) break;
         iter = (OCStringLL *)OICCalloc(1,sizeof(OCStringLL));
         VERIFY_PARAM_NON_NULL(TAG, iter, "Failed allocating memory");
index 29a6691..033e837 100644 (file)
@@ -38,6 +38,9 @@
 // Discovery Links Map Length.
 #define LINKS_MAP_LEN 4
 
+// Default data model versions in CVS form
+#define DEFAULT_DATA_MODEL_VERSIONS "res.1.1.0,sh.1.1.0"
+
 // Functions all return either a CborError, or a negative version of the OC_STACK return values
 static int64_t OCConvertPayloadHelper(OCPayload *payload, uint8_t *outPayload, size_t *size);
 static int64_t OCConvertDiscoveryPayload(OCDiscoveryPayload *payload, uint8_t *outPayload,
@@ -389,6 +392,7 @@ static int64_t OCConvertDevicePayload(OCDevicePayload *payload, uint8_t *outPayl
     }
     int64_t err = CborNoError;
     CborEncoder encoder;
+    char *dataModelVersions = 0;
 
     cbor_encoder_init(&encoder, outPayload, *size, 0);
     CborEncoder repMap;
@@ -427,13 +431,17 @@ static int64_t OCConvertDevicePayload(OCDevicePayload *payload, uint8_t *outPayl
     // Device data Model Versions
     if (payload->dataModelVersions)
     {
-        OIC_LOG(INFO, TAG, "Payload has data models versions");
-        char *str = OCCreateString(payload->dataModelVersions);
-        err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_DATA_MODEL_VERSION,
-                sizeof(OC_RSRVD_DATA_MODEL_VERSION) - 1, str);
-        OICFree(str);
-        VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding data model version");
+        OIC_LOG(INFO, TAG, "Payload has data model versions");
+        dataModelVersions = OCCreateString(payload->dataModelVersions);
+    }
+    else
+    {
+        dataModelVersions = OICStrdup(DEFAULT_DATA_MODEL_VERSIONS);
     }
+    err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_DATA_MODEL_VERSION,
+        sizeof(OC_RSRVD_DATA_MODEL_VERSION) - 1, dataModelVersions);
+    OICFree(dataModelVersions);
+    VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding data model versions");
 
     err |= cbor_encoder_close_container(&encoder, &repMap);
     VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing device map");
index 00a7c06..5ce6acd 100644 (file)
@@ -52,7 +52,7 @@ namespace OCRepresentationEncodingTest
     static const char sid1[] = "646F6F72-4465-7669-6365-555549443030";
     static const char devicename1[] = "device name";
     static const char specver1[] = "spec version";
-    static const char dmver1[] = "one-1,two-2";
+    static const char dmver1[] = "res.1.1.0,sh.1.1.0";
     static OCStringLL *types = NULL;
     // Device Payloads
     TEST(DeviceDiscoveryEncoding, Normal)
@@ -71,9 +71,9 @@ namespace OCRepresentationEncodingTest
         EXPECT_STREQ(devicename1, device->deviceName);
         EXPECT_STREQ(specver1, device->specVersion);
         EXPECT_TRUE(device->dataModelVersions);
-        EXPECT_STREQ("one-1", device->dataModelVersions->value);
+        EXPECT_STREQ("res.1.1.0", device->dataModelVersions->value);
         EXPECT_TRUE(device->dataModelVersions->next);
-        EXPECT_STREQ("two-2", device->dataModelVersions->next->value);
+        EXPECT_STREQ("sh.1.1.0", device->dataModelVersions->next->value);
         EXPECT_EQ(PAYLOAD_TYPE_DEVICE, ((OCPayload*)device)->type);
         EXPECT_STREQ("oic.wk.d", device->types->value);
         EXPECT_STREQ("oic.d.tv", device->types->next->value);
@@ -103,8 +103,8 @@ namespace OCRepresentationEncodingTest
         EXPECT_STREQ(sid1, r.getValue<std::string>(OC_RSRVD_DEVICE_ID).c_str());
         EXPECT_STREQ(devicename1, r.getValue<std::string>(OC_RSRVD_DEVICE_NAME).c_str());
         EXPECT_STREQ(specver1, r.getValue<std::string>(OC_RSRVD_SPEC_VERSION).c_str());
-        EXPECT_STREQ("one-1", r.getDataModelVersions()[0].c_str());
-        EXPECT_STREQ("two-2", r.getDataModelVersions()[1].c_str());
+        EXPECT_STREQ("res.1.1.0", r.getDataModelVersions()[0].c_str());
+        EXPECT_STREQ("sh.1.1.0", r.getDataModelVersions()[1].c_str());
 
         OCPayloadDestroy(parsedDevice);
     }