Change PRESENCE payload in correct format.
authorHabib Virji <habib.virji@samsung.com>
Wed, 9 Dec 2015 13:43:04 +0000 (13:43 +0000)
committerHabib Virji <habib.virji@samsung.com>
Thu, 10 Dec 2015 17:04:17 +0000 (17:04 +0000)
Removes enclosing array and rep from the presence payload.

It changes structure from
[{
  rep: {
   presence payload
  }
}]
to
{
  presence payload

}

Change-Id: I44f7fa1d6f18a0a883057ffb52cfc27c5ead596d
Signed-off-by: Habib Virji <habib.virji@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4467
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
resource/csdk/stack/src/ocpayloadconvert.c
resource/csdk/stack/src/ocpayloadparse.c
resource/unittests/OCRepresentationEncodingTest.cpp

index 6efe2c3..861f70a 100644 (file)
@@ -738,12 +738,8 @@ static int64_t OCConvertPresencePayload(OCPresencePayload* payload,
     int64_t err = 0;
 
     cbor_encoder_init(&encoder, outPayload, *size, 0);
-    CborEncoder rootArray;
-
-    err = err | cbor_encoder_create_array(&encoder, &rootArray, 1);
-
     CborEncoder map;
-    err = err | cbor_encoder_create_map(&rootArray, &map, CborIndefiniteLength);
+    err = err | cbor_encoder_create_map(&encoder, &map, CborIndefiniteLength);
 
     // Sequence Number
     err = err | cbor_encode_text_string(&map,
@@ -770,8 +766,7 @@ static int64_t OCConvertPresencePayload(OCPresencePayload* payload,
     }
 
     // Close Map
-    err = err | cbor_encoder_close_container(&rootArray, &map);
-    err = err | cbor_encoder_close_container(&encoder, &rootArray);
+    err = err | cbor_encoder_close_container(&encoder, &map);
 
     return checkError(err, &encoder, outPayload, size);
 }
index 7bd7211..05023ae 100644 (file)
@@ -1240,10 +1240,8 @@ static OCStackResult OCParsePresencePayload(OCPayload** outPayload, CborValue* r
     }
 
     bool err = false;
-    CborValue arrayVal;
-    err = err || cbor_value_enter_container(rootValue, &arrayVal);
 
-    if(cbor_value_is_map(&arrayVal))
+    if(cbor_value_is_map(rootValue))
     {
         uint64_t seqNum = 0;
         uint64_t maxAge = 0;
@@ -1253,29 +1251,28 @@ static OCStackResult OCParsePresencePayload(OCPayload** outPayload, CborValue* r
 
         CborValue curVal;
         // Sequence Number
-        err = err || cbor_value_map_find_value(&arrayVal, OC_RSRVD_NONCE, &curVal);
+        err = err || cbor_value_map_find_value(rootValue, OC_RSRVD_NONCE, &curVal);
         err = err || cbor_value_get_uint64(&curVal, &seqNum);
 
         // Max Age
-        err = err || cbor_value_map_find_value(&arrayVal, OC_RSRVD_TTL, &curVal);
+        err = err || cbor_value_map_find_value(rootValue, OC_RSRVD_TTL, &curVal);
         err = err || cbor_value_get_uint64(&curVal, &maxAge);
 
         // Trigger
-        err = err || cbor_value_map_find_value(&arrayVal, OC_RSRVD_TRIGGER, &curVal);
+        err = err || cbor_value_map_find_value(rootValue, OC_RSRVD_TRIGGER, &curVal);
         err = err || cbor_value_dup_text_string(&curVal, &tempStr, &len, NULL);
         trigger = convertTriggerStringToEnum(tempStr);
         OICFree(tempStr);
         tempStr = NULL;
 
         // Resource type name
-         err = err || cbor_value_map_find_value(&arrayVal, OC_RSRVD_RESOURCE_TYPE, &curVal);
+        err = err || cbor_value_map_find_value(rootValue, OC_RSRVD_RESOURCE_TYPE, &curVal);
         if(cbor_value_is_valid(&curVal))
         {
              err = err || cbor_value_dup_text_string(&curVal, &tempStr, &len, NULL);
         }
 
-        err = err || cbor_value_advance(&arrayVal);
-        err = err || cbor_value_leave_container(rootValue, &arrayVal);
+        err = err || cbor_value_advance(rootValue);
 
         if(!err)
         {
index ea7b7c6..33c90e3 100644 (file)
@@ -170,7 +170,30 @@ namespace OCRepresentationEncodingTest
 
         OCPayloadDestroy(parsedPlatform);
     }
+    TEST(PresencePayload, Normal)
+    {
+        uint32_t maxAge = 0;
+        uint32_t sequenceNumber = 0;
+        OCPresenceTrigger trigger = OC_PRESENCE_TRIGGER_CREATE;
+        OCPresencePayload *presence = OCPresencePayloadCreate(sequenceNumber, maxAge, trigger, uri1);
+
+        uint8_t* cborData;
+        size_t cborSize;
+        OCPayload* cparsed;
+        EXPECT_EQ(OC_STACK_OK, OCConvertPayload((OCPayload*)presence, &cborData, &cborSize));
+        EXPECT_EQ(OC_STACK_OK, OCParsePayload(&cparsed, PAYLOAD_TYPE_PRESENCE,
+                    cborData, cborSize));
+        OCPayloadDestroy((OCPayload*)presence);
+        OICFree(cborData);
+
+        OCPresencePayload* parsed = ((OCPresencePayload*)cparsed);
+        EXPECT_EQ(sequenceNumber, parsed->sequenceNumber);
+        EXPECT_EQ(maxAge, parsed->maxAge);
+        EXPECT_EQ(trigger, parsed->trigger);
+        EXPECT_STREQ(uri1, parsed->resourceType);
 
+        OCPayloadDestroy(cparsed);
+    }
     // Representation Payloads
     TEST(RepresentationEncoding, BaseAttributeTypes)
     {