CA Integration: Sending observe register/deregister request from client to server...
[platform/upstream/iotivity.git] / resource / csdk / stack / src / ocobserve.c
index fc6737d..6053120 100644 (file)
@@ -152,7 +152,6 @@ OCStackResult SendAllObserverNotification (OCMethod method, OCResource *resPtr,
                     {
                         sprintf((char *)presenceResBuf, "%u:%u", resPtr->sequenceNum, maxAge);
                     }
-                    memset(&ehResponse, 0, sizeof(OCEntityHandlerResponse));
                     ehResponse.ehResult = OC_EH_OK;
                     ehResponse.payload = presenceResBuf;
                     ehResponse.payloadSize = strlen((const char *)presenceResBuf) + 1;
@@ -185,8 +184,7 @@ OCStackResult SendListObserverNotification (OCResource * resource,
     uint8_t numSentNotification = 0;
     OCServerRequest * request = NULL;
     OCStackResult result = OC_STACK_ERROR;
-    OCEntityHandlerResponse ehResponse;
-    memset(&ehResponse, 0, sizeof(OCEntityHandlerResponse));
+    OCEntityHandlerResponse ehResponse = {0};
 
     OC_LOG(INFO, TAG, PCF("Entering SendListObserverNotification"));
     while(numIds)
@@ -286,10 +284,9 @@ OCStackResult AddObserver (const char         *resUri,
 {
     ResourceObserver *obsNode = NULL;
 
-    obsNode = (ResourceObserver *) OCMalloc(sizeof(ResourceObserver));
+    obsNode = (ResourceObserver *) OCCalloc(1, sizeof(ResourceObserver));
     if (obsNode)
     {
-        memset(obsNode, 0, sizeof(ResourceObserver));
         obsNode->observeId = obsId;
 
         obsNode->resUri = (unsigned char *)OCMalloc(strlen(resUri)+1);
@@ -397,3 +394,34 @@ void DeleteObserverList()
     }
     serverObsList = NULL;
 }
+
+#ifdef CA_INT
+OCStackResult
+CreateObserveHeaderOption (CAHeaderOption_t **caHdrOpt,
+                           OCHeaderOption *ocHdrOpt,
+                           uint8_t numOptions,
+                           uint8_t observeFlag)
+{
+    CAHeaderOption_t *tmpHdrOpt = NULL;
+
+    tmpHdrOpt = (CAHeaderOption_t *) OCMalloc ((numOptions+1)*sizeof(CAHeaderOption_t));
+    if (NULL == tmpHdrOpt)
+    {
+        return OC_STACK_NO_MEMORY;
+    }
+    tmpHdrOpt[0].protocolID = CA_COAP_ID;
+    // TODO-CA: COAP_OPTION_OBSERVE is defined in CoAP header files which will be abstracted
+    // from resource model. We have to define a new macro for this in the stack layer.
+    tmpHdrOpt[0].optionID = COAP_OPTION_OBSERVE;
+    // Length is one byte
+    tmpHdrOpt[0].optionLength = 1;
+    tmpHdrOpt[0].optionData[0] = observeFlag;
+    for (uint8_t i = 0; i < numOptions; i++)
+    {
+        memcpy (&(tmpHdrOpt[i+1]), &(ocHdrOpt[i]), sizeof(CAHeaderOption_t));
+    }
+
+    *caHdrOpt = tmpHdrOpt;
+    return OC_STACK_OK;
+}
+#endif // CA_INT