* 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);
#define TAG "OIC_RI_PAYLOAD"
#define CSV_SEPARATOR ','
-#define CSV_SEPARATORS ",;"
static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val);
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");
// 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,
}
int64_t err = CborNoError;
CborEncoder encoder;
+ char *dataModelVersions = 0;
cbor_encoder_init(&encoder, outPayload, *size, 0);
CborEncoder repMap;
// 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");
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)
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);
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);
}