Version option is not associate with application/cbor format.
authorZiran Sun <ziran.sun@samsung.com>
Fri, 24 Mar 2017 15:24:56 +0000 (15:24 +0000)
committerZiran Sun <ziran.sun@samsung.com>
Fri, 31 Mar 2017 08:38:28 +0000 (08:38 +0000)
    1. Remove versioing option settings for application/cbor format.
    2. Correct default versioing number value.

Change-Id: Ia9a5f1edfc834a450106eefc4097c60726e4d740
Signed-off-by: Ziran Sun <ziran.sun@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/18167
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-by: Todd Malsbary <todd.malsbary@intel.com>
resource/csdk/connectivity/src/caprotocolmessage.c
resource/csdk/stack/samples/linux/SimpleClientServer/SConscript
resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp
resource/csdk/stack/src/ocserverrequest.c
resource/csdk/stack/src/ocstack.c

index 585dcc0..da0bbba 100644 (file)
@@ -609,19 +609,17 @@ CAResult_t CAParsePayloadFormatHeadOption(uint16_t formatOption, CAPayloadFormat
         OIC_LOG(ERROR, TAG, "Format option not created");
         return CA_STATUS_INVALID_PARAM;
     }
-    else
+    int ret = coap_insert(optlist, encodeNode, CAOrderOpts);
+    if (0 >= ret)
     {
-        int ret = coap_insert(optlist, encodeNode, CAOrderOpts);
-        if (0 >= ret)
-        {
-            coap_delete(encodeNode);
-            OIC_LOG(ERROR, TAG, "Format option not inserted in header");
-            return CA_STATUS_INVALID_PARAM;
-        }
+        coap_delete(encodeNode);
+        OIC_LOG(ERROR, TAG, "Format option not inserted in header");
+        return CA_STATUS_INVALID_PARAM;
     }
 
-    if (COAP_OPTION_ACCEPT_VERSION == versionOption || 
-        COAP_OPTION_CONTENT_VERSION == versionOption)
+    if ((COAP_OPTION_ACCEPT_VERSION == versionOption ||
+         COAP_OPTION_CONTENT_VERSION == versionOption) &&
+        CA_FORMAT_APPLICATION_VND_OCF_CBOR == format)
     {
         versionNode = CACreateNewOptionNode(versionOption,
                 coap_encode_var_bytes(versionBuf, version), (char *) versionBuf);
@@ -632,10 +630,7 @@ CAResult_t CAParsePayloadFormatHeadOption(uint16_t formatOption, CAPayloadFormat
             coap_delete(encodeNode);
             return CA_STATUS_INVALID_PARAM;
         }
-    }
-    if (versionNode)
-    {
-        int ret = coap_insert(optlist, versionNode, CAOrderOpts);
+        ret = coap_insert(optlist, versionNode, CAOrderOpts);
         if (0 >= ret)
         {
             coap_delete(versionNode);
@@ -921,7 +916,8 @@ CAResult_t CAGetInfoFromPDU(const coap_pdu_t *pdu, const CAEndpoint_t *endpoint,
             {
                 if (2 == COAP_OPT_LENGTH(option))
                 {
-                    outInfo->payloadVersion =  coap_decode_var_bytes(COAP_OPT_VALUE(option), COAP_OPT_LENGTH(option));
+                    outInfo->payloadVersion = coap_decode_var_bytes(COAP_OPT_VALUE(option),
+                            COAP_OPT_LENGTH(option));
                 }
                 else
                 {
@@ -934,7 +930,8 @@ CAResult_t CAGetInfoFromPDU(const coap_pdu_t *pdu, const CAEndpoint_t *endpoint,
             {
                 if (2 == COAP_OPT_LENGTH(option))
                 {
-                    outInfo->acceptVersion = coap_decode_var_bytes(COAP_OPT_VALUE(option), COAP_OPT_LENGTH(option));
+                    outInfo->acceptVersion = coap_decode_var_bytes(COAP_OPT_VALUE(option),
+                                                                   COAP_OPT_LENGTH(option));
                 }
                 else
                 {
@@ -951,7 +948,8 @@ CAResult_t CAGetInfoFromPDU(const coap_pdu_t *pdu, const CAEndpoint_t *endpoint,
                 else if (2 == COAP_OPT_LENGTH(option))
                 {
                     outInfo->acceptFormat = CAConvertFormat(
-                            coap_decode_var_bytes(COAP_OPT_VALUE(option), COAP_OPT_LENGTH(option)));
+                            coap_decode_var_bytes(COAP_OPT_VALUE(option),
+                                                  COAP_OPT_LENGTH(option)));
                 }
                 else
                 {
index 5a145b7..4b9bfdf 100644 (file)
@@ -43,6 +43,7 @@ samples_env.PrependUnique(CPPPATH=[
     '../../../../logger/include',
     '../../../../include',
     '../../../../stack/include',
+    '../../../../connectivity/api',
     '../../../../security/include',
     '../../../../../../extlibs/boost/boost',
     '../../../../../oc_logger/include',
index 6576405..1b39e28 100755 (executable)
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
+#include "cacommon.h"
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -405,7 +406,7 @@ OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle /*handle*/,
         {
             // Re-initiate discovery with OIC format. This is applicable for the case that
             // a OCF 1.x client speaks to a OIC 1.1 server.
-            InitDiscovery(OC_LOW_QOS, 1);
+            InitDiscovery(OC_LOW_QOS, 0);
             return OC_STACK_KEEP_TRANSACTION;
         }
 
@@ -879,15 +880,14 @@ int InitDiscovery(OCQualityOfService qos, uint8_t withVendorSpecificHeaderOption
         memset(options, 0, sizeof(OCHeaderOption) * MAX_HEADER_OPTIONS);
         size_t numOptions = 0;
 
-        uint8_t option0[] = {0};
-        uint16_t optionID = 2049;
-        size_t optionDataSize = sizeof(option0);
-        OCSetHeaderOption(options, &numOptions, optionID, option0, optionDataSize);
+        uint16_t format = COAP_MEDIATYPE_APPLICATION_VND_OCF_CBOR;
+        uint16_t optionID = CA_OPTION_ACCEPT;
+        OCSetHeaderOption(options, &numOptions, optionID, &format, sizeof(format));
 
-        uint8_t option1[] = {0};
-        optionID = 2053;
-        optionDataSize = sizeof(option1);
-        OCSetHeaderOption(options, &numOptions, optionID, option1, optionDataSize);
+        uint16_t version = 2048;
+        optionID = CA_OPTION_ACCEPT_VERSION;
+        numOptions = 1;
+        OCSetHeaderOption(options, &numOptions, optionID, &version, sizeof(version));
 
         ret = OCDoRequest(NULL, OC_REST_DISCOVER, szQueryUri, NULL, 0, CT_DEFAULT,
                               (qos == OC_HIGH_QOS) ? OC_HIGH_QOS : OC_LOW_QOS,
@@ -1107,7 +1107,7 @@ int main(int argc, char* argv[])
     }
     else
     {
-        InitDiscovery(OC_LOW_QOS, 0);
+        InitDiscovery(OC_LOW_QOS, 1);
     }
 
     // Break from loop with Ctrl+C
index b4c3014..fddd9c1 100644 (file)
@@ -666,11 +666,16 @@ OCStackResult HandleSingleResponse(OCEntityHandlerResponse * ehResponse)
                     {
                         responseInfo.info.payloadFormat = CA_FORMAT_APPLICATION_CBOR;
                     }
-                    if (!serverRequest->acceptVersion)
+                    if ((OC_FORMAT_VND_OCF_CBOR == serverRequest->acceptFormat))
                     {
-                        serverRequest->acceptVersion = DEFAULT_VERSION_VALUE;
+                        // Add versioning information for this format
+                        responseInfo.info.payloadVersion = serverRequest->acceptVersion;
+                        if (!responseInfo.info.payloadVersion)
+                        {
+                            responseInfo.info.payloadVersion = DEFAULT_VERSION_VALUE;
+                        }
+
                     }
-                    responseInfo.info.payloadVersion = serverRequest->acceptVersion;
                 }
                 break;
             default:
index eb5a077..2b4e55d 100755 (executable)
@@ -612,7 +612,7 @@ static OCStackResult OCSendRequest(const CAEndpoint_t *object, CARequestInfo_t *
     }
 #endif
 
-    uint16_t acceptVersion = OC_SPEC_VERSION_VALUE;
+    uint16_t acceptVersion = 0;
     CAPayloadFormat_t acceptFormat = CA_FORMAT_APPLICATION_CBOR;
     // Check settings of version option and content format.
     if (requestInfo->info.numOptions > 0 && requestInfo->info.options)
@@ -644,11 +644,21 @@ static OCStackResult OCSendRequest(const CAEndpoint_t *object, CARequestInfo_t *
         }
     }
 
-    requestInfo->info.acceptVersion = acceptVersion;
     requestInfo->info.acceptFormat = acceptFormat;
+    if (CA_FORMAT_APPLICATION_VND_OCF_CBOR == acceptFormat)
+    {
+        if (!acceptVersion)
+        {
+            requestInfo->info.acceptVersion = OC_SPEC_VERSION_VALUE;
+        }
+        else
+        {
+            requestInfo->info.acceptVersion = acceptVersion;
+        }
+    }
 
     CAResult_t result = CASendRequest(object, requestInfo);
-    if(CA_STATUS_OK != result)
+    if (CA_STATUS_OK != result)
     {
         OIC_LOG_V(ERROR, TAG, "CASendRequest failed with CA error %u", result);
         OIC_TRACE_END();
@@ -2317,6 +2327,10 @@ void OCHandleRequests(const CAEndpoint_t* endPoint, const CARequestInfo_t* reque
     }
 
     serverRequest.acceptFormat = CAToOCPayloadFormat(requestInfo->info.acceptFormat);
+    if (OC_FORMAT_VND_OCF_CBOR == serverRequest.acceptFormat)
+    {
+        serverRequest.acceptVersion = requestInfo->info.acceptVersion;
+    }
     if (requestInfo->info.type == CA_MSG_CONFIRM)
     {
         serverRequest.qos = OC_HIGH_QOS;
@@ -3242,9 +3256,9 @@ OCStackResult OCDoRequest(OCDoHandle *handle,
 
     if (payload)
     {
-        uint16_t payloadVersion = OC_SPEC_VERSION_VALUE;
+        uint16_t payloadVersion = 0;
         CAPayloadFormat_t payloadFormat = CA_FORMAT_APPLICATION_CBOR;
-        // From OCF onwards, check version option settings
+        // Check version option settings
         if (numOptions > 0 && options)
         {
             for (uint8_t i = 0; i < numOptions; i++)
@@ -3272,12 +3286,21 @@ OCStackResult OCDoRequest(OCDoHandle *handle,
             }
         }
 
-        requestInfo.info.payloadVersion = payloadVersion;
         requestInfo.info.payloadFormat = payloadFormat;
-
-        if((result =
+        if (CA_FORMAT_APPLICATION_VND_OCF_CBOR == payloadFormat)
+        {
+            if (!payloadVersion)
+            {
+                requestInfo.info.payloadVersion = OC_SPEC_VERSION_VALUE;
+            }
+            else
+            {
+                requestInfo.info.payloadVersion = payloadVersion;
+            }
+        }
+        if ((result =
             OCConvertPayload(payload, CAToOCPayloadFormat(requestInfo.info.payloadFormat),
-                             &requestInfo.info.payload, &requestInfo.info.payloadSize))
+                            &requestInfo.info.payload, &requestInfo.info.payloadSize))
                 != OC_STACK_OK)
         {
             OIC_LOG(ERROR, TAG, "Failed to create CBOR Payload");