From 62fc0d6eb31516728d66eef58a4d2e6b498de23c Mon Sep 17 00:00:00 2001 From: Sashi Penta Date: Thu, 25 Dec 2014 00:55:43 -0800 Subject: [PATCH] Fix to copy the header options from CA to Stack correctly. Change-Id: I203333fc30eba89a8f56a7af1652cb96bd172c21 Signed-off-by: Sashi Penta --- resource/csdk/stack/src/ocstack.c | 20 ++++++++++++++------ resource/include/OCHeaderOption.h | 4 ---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/resource/csdk/stack/src/ocstack.c b/resource/csdk/stack/src/ocstack.c index 1a09e35..7442464 100644 --- a/resource/csdk/stack/src/ocstack.c +++ b/resource/csdk/stack/src/ocstack.c @@ -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); diff --git a/resource/include/OCHeaderOption.h b/resource/include/OCHeaderOption.h index 0ea7722..31517c5 100644 --- a/resource/include/OCHeaderOption.h +++ b/resource/include/OCHeaderOption.h @@ -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 } /** -- 2.7.4