Currently, Samsung implements the sequence type of
AttributeValue(OCRepPayload ) in C like C++
I wrote the sequence type of AttributeValue(OCRepPayload ) because C doesn't
support vector.
when I am using *.c from resoruce/csdk/stack/src because we cannot use
OCpresentation.cpp for the thin project ,I have problem to exchaange
"OCRepPayload array (OCRepPayload[] )" as a value.
ie . the following format cannot be sent.
. { "key1" : {
{
"nested key" : "key_01"
value" : 100
},
{
"nested key" : "key_02"
"value" : 200
}
}
}
The based file i tested was
resource/scdk/stack/smaples/linux/SimpleClientServer/ocserver.cpp, occlient.cpp.
Even though they are .cpp, they call c functions intread of c++ functions..
while testing and debuging this issue, I found out that
OCRepPayloadSetPropObjectArray of ocpayload.c has a pointer issue
line 953 ; increasing i of array[i] in OCRepPayloadClone(array[i]) jumps
too much , so it cannot find the next OCRepPayload correct.
If newArray[i] = OCRepPayloadClone(array[i]) is changed to newArray[i] =
OCRepPayloadClone((*array +i) ) ;,it seems it works well as intended
=============
typedef struct LIGHTRESOURCE
{
OCResourceHandle handle;
bool state;
int power;
char strArray[STRARRAYNUMBER][STRARRAYLENTH]; // array string
int64_t intArray[INTARRAYNUMBER]; // array int
OCRepPayload rcsArray[2];
} LightResource;
-----------------
{
......
OCRepPayload dupobj[2];
dimensions[0]=2; dimensions[1]=dimensions[2]=0;
if(OCRepPayloadGetPropObjectArray(input, "rcsarray", (OCRepPayload
***)dupobj, dimensions)) {
memcpy(currLightResource->rcsArray, dupobj,
RCSTARRAYNUMBER*sizeof(OCRepPayload));
}
}
// when I check currLightResource->rcsArray,, it has teh correct value.
return getPayload(gResourceUri, currLightResource->power,
currLightResource->state,
currLightResource->strArray, currLightResource->intArray,
currLightResource->rcsArray);
}
OCRepPayload* getPayload(const char* uri, int64_t power, bool state, char
strArray[][STRARRAYLENTH],
int64_t* intArray, OCRepPayload* rcsArray)
{
....
size_t dimensions[MAX_REP_ARRAY_DEPTH]={2,0,0}; ;; just 2 times.
OCRepPayloadSetPropObjectArray(payload, "rcsarray",( const OCRepPayload**)
&rcsArray, dimensions ); ///
....
}
Given that OCRepresentation.cpp doesn't use OCRepPayloadSetPropObjectArray
and nobody uses OCRepPayload array (OCRepPayload[] ) yet, I think it is possble
that it would rather be changed. however I am still believeing my testing way
may need to get fixed..
If you don't mind . Can I submit ocpayload.c directly? otherwise please find
out the better way or make me correct..
thank you
Rami