Modify CBOR parser and convertor to handle security payload correctly.
authorleechul <chuls.lee@samsung.com>
Wed, 9 Mar 2016 08:55:52 +0000 (17:55 +0900)
committerHabib Virji <habib.virji@samsung.com>
Thu, 10 Mar 2016 12:54:52 +0000 (12:54 +0000)
[Patch #1] Intial upload.
[Patch #2] Update according to review comments.
[Patch #3] Fix typo
[Patch #4] Retrigger
[Patch #5] Remove the invalid type conversion.

Change-Id: I7b1d59d16a48a083d589715ec876d3eb860b921d
Signed-off-by: leechul <chuls.lee@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5613
Reviewed-by: Habib Virji <habib.virji@samsung.com>
Reviewed-by: dongik Lee <dongik.lee@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
resource/csdk/stack/src/ocpayloadconvert.c
resource/csdk/stack/src/ocpayloadparse.c

index 5c6b02f..18459ab 100644 (file)
@@ -183,12 +183,17 @@ static int64_t OCConvertSecurityPayload(OCSecurityPayload* payload, uint8_t* out
     if (payload->securityData)
     {
         err |= cbor_encode_text_string(&map, payload->securityData,
-                                      strlen(payload->securityData));
-        VERIFY_CBOR_SUCCESS(TAG, err, "Retrieving security data");
+                                      (size_t)(strlen(payload->securityData)));
+        VERIFY_CBOR_SUCCESS(TAG, err, "Encoding security data");
+    }
+    else
+    {
+        err |= cbor_encode_null(&map);
+        VERIFY_CBOR_SUCCESS(TAG, err, "Encoding security data");
     }
 
     err |= cbor_encoder_close_container(&encoder, &map);
-    VERIFY_CBOR_SUCCESS(TAG, err, "closing security map");
+    VERIFY_CBOR_SUCCESS(TAG, err, "Closing security map");
 exit:
     return checkError(err, &encoder, outPayload, size);
 }
index c193826..93cdabe 100644 (file)
@@ -102,17 +102,18 @@ void OCFreeOCStringLL(OCStringLL* ll);
 
 static OCStackResult OCParseSecurityPayload(OCPayload** outPayload, CborValue* rootValue)
 {
-    OCStackResult ret = OC_STACK_MALFORMED_RESPONSE;
+    OCStackResult ret = OC_STACK_ERROR;
     CborError err;
     char *securityData = NULL;
-
-    VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid parameter");
-    VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid cbor");
-
     CborValue strVal;
 
+    VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid parameter outPayload");
+    VERIFY_PARAM_NON_NULL(TAG, rootValue, "Invalid parameter rootValue");
+    *outPayload = NULL;
+
     err = cbor_value_enter_container(rootValue, &strVal);
     VERIFY_CBOR_SUCCESS(TAG, err, "Failed entering container");
+
     if (cbor_value_is_text_string(&strVal))
     {
         size_t len = 0;
@@ -122,6 +123,14 @@ static OCStackResult OCParseSecurityPayload(OCPayload** outPayload, CborValue* r
         VERIFY_PARAM_NON_NULL(TAG, *outPayload, "Invalid cbor");
         ret = OC_STACK_OK;
     }
+    else if(cbor_value_is_valid(&strVal))
+    {
+        ret = OC_STACK_OK;
+    }
+    else
+    {
+        ret = OC_STACK_MALFORMED_RESPONSE;
+    }
 
 exit:
     OICFree(securityData);