Fix to copy the header options from CA to Stack correctly.
authorSashi Penta <sashi.kumar.penta@intel.com>
Thu, 25 Dec 2014 08:55:43 +0000 (00:55 -0800)
committerSashi Penta <sashi.kumar.penta@intel.com>
Thu, 25 Dec 2014 08:55:43 +0000 (00:55 -0800)
Change-Id: I203333fc30eba89a8f56a7af1652cb96bd172c21
Signed-off-by: Sashi Penta <sashi.kumar.penta@intel.com>
resource/csdk/stack/src/ocstack.c
resource/include/OCHeaderOption.h

index 1a09e35..7442464 100644 (file)
@@ -343,23 +343,31 @@ void HandleCAResponses(const CARemoteEndpoint_t* endPoint, const CAResponseInfo_
         response.numRcvdVendorSpecificHeaderOptions = 0;
         if(responseInfo->info.numOptions > 0)
         {
+            int start = 0;
             //First option alwas with option ID COAP_OPTION_OBSERVE if it is availbale
             if(responseInfo->info.options[0].optionID == COAP_OPTION_OBSERVE)
             {
                 memcpy (&(response.sequenceNumber),
-                &(responseInfo->info.options[0].optionData), 4);
+                            &(responseInfo->info.options[0].optionData), 4);
+                response.numRcvdVendorSpecificHeaderOptions = responseInfo->info.numOptions - 1;
+                start = 1;
             }
             else
             {
-               memcpy (&(response.rcvdVendorSpecificHeaderOptions[0]),
-                 &(responseInfo->info.options[0]), sizeof(OCHeaderOption));
+               response.numRcvdVendorSpecificHeaderOptions = responseInfo->info.numOptions;
             }
-            for (uint8_t i = 1; i < responseInfo->info.numOptions; i++)
+
+            if(response.numRcvdVendorSpecificHeaderOptions > MAX_HEADER_OPTIONS)
+            {
+                OC_LOG(ERROR, TAG, PCF("#header options are more than MAX_HEADER_OPTIONS"));
+                return;
+            }
+
+            for (uint8_t i = start; i < responseInfo->info.numOptions; i++)
             {
-                memcpy (&(response.rcvdVendorSpecificHeaderOptions[i]),
+                memcpy (&(response.rcvdVendorSpecificHeaderOptions[i-start]),
                  &(responseInfo->info.options[i]), sizeof(OCHeaderOption));
             }
-            response.numRcvdVendorSpecificHeaderOptions = responseInfo->info.numOptions;
         }
         result = cbNode->callBack(cbNode->context,
                 cbNode->handle, &response);
index 0ea7722..31517c5 100644 (file)
@@ -58,14 +58,10 @@ namespace OC
                 m_optionID(optionID),
                 m_optionData(optionData)
             {
-
-// TODO-CA Remove this (for some reason optionID is coming to be zero)
-#ifndef CA_INT
                 if(!(optionID >= MIN_HEADER_OPTIONID && optionID <= MAX_HEADER_OPTIONID))
                 {
                     throw OCException(OC::Exception::OPTION_ID_RANGE_INVALID);
                 }
-#endif
             }
 
             /**