Removed global variables from OTM
authorRandeep Singh <randeep.s@samsung.com>
Mon, 7 Sep 2015 12:23:12 +0000 (21:23 +0900)
committerSachin Agrawal <sachin.agrawal@intel.com>
Wed, 9 Sep 2015 21:53:25 +0000 (21:53 +0000)
Change-Id: I5b037529c661e37a6b9c34899e499e4a89e66527
Signed-off-by: Randeep Singh <randeep.s@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/2398
Reviewed-by: Woochul Shim <woochul.shim@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Sakthivel Samidurai <sakthivel.samidurai@intel.com>
Reviewed-by: Sachin Agrawal <sachin.agrawal@intel.com>
resource/csdk/security/provisioning/include/internal/ownershiptransfermanager.h
resource/csdk/security/provisioning/src/ownershiptransfermanager.c
resource/csdk/security/provisioning/src/oxmrandompin.c

index 64f7368..bcd7b8a 100644 (file)
@@ -37,21 +37,25 @@ extern "C" {
  * Context for ownership transfer(OT)\r
  */\r
 typedef struct OTMContext{\r
-    void* userCtx; /**< Context for user**/\r
-    OCProvisionDev_t* selectedDeviceInfo; /**< Selected device info for OT */\r
-    OicUuid_t tempCredId;\r
+    void* userCtx;                         /**< Context for user.*/\r
+    OCProvisionDev_t* selectedDeviceInfo;  /**< Selected device info for OT. */\r
+    OicUuid_t subIdForPinOxm;              /**< Subject Id which uses PIN based OTM. */\r
+    OCProvisionResultCB ctxResultCallback; /**< Function pointer to store result callback. */\r
+    OCProvisionResult_t* ctxResultArray;   /**< Result array having result of all device. */\r
+    size_t ctxResultArraySize;             /**< No of elements in result array. */\r
+    bool ctxHasError;                      /**< Does OT process have any error. */\r
 }OTMContext_t;\r
 \r
 /**\r
- * Do ownership transfer for un-owned device.\r
+ * Do ownership transfer for the unowned devices.\r
  *\r
  * @param[in] ctx Application context would be returned in result callback\r
- * @param[in] selectedDeviceInfo selected device information\r
+ * @param[in] selectedDeviceList linked list of ownership transfer candidate devices.\r
  * @param[in] resultCB Result callback function to be invoked when ownership transfer finished.\r
  * @return OC_STACK_OK in case of success and other value otherwise.\r
  */\r
 OCStackResult OTMDoOwnershipTransfer(void* ctx,\r
-                                     OCProvisionDev_t* selectedDeviceInfo, OCProvisionResultCB resultCB);\r
+                                     OCProvisionDev_t* selectedDeviceList, OCProvisionResultCB resultCB);\r
 \r
 /*\r
  *Callback for load secret for temporal secure session\r
@@ -95,4 +99,4 @@ OCStackResult OTMSetOwnershipTransferCallbackData(OicSecOxm_t oxm, OTMCallbackDa
 #ifdef __cplusplus\r
 }\r
 #endif\r
-#endif //OTM_OWNERSHIPTRANSFERMANAGER_H_
\ No newline at end of file
+#endif //OTM_OWNERSHIPTRANSFERMANAGER_H_\r
index 692363d..cddbeb9 100644 (file)
 #include "pmutility.h"
 #include "srmutility.h"
 #include "provisioningdatabasemanager.h"
-
-// TODO: Not yet supported.
-//#include "oxmrandompin.h"
-
-#define DEFAULT_CONTEXT_VALUE 0x99
-#define DEFAULT_SECURE_PORT 5684
+#include "oxmrandompin.h"
 
 #define TAG "OTM"
 
-OCProvisionResultCB g_resultCallback;
-OCProvisionResult_t* g_resultArray = NULL;
-size_t g_resultArraySize = 0;
-bool g_hasError = false;
-
 /**
  * Possible states of ownership transfer manager module.
  */
@@ -98,7 +88,7 @@ typedef enum
 /**
  * Array to store the callbacks for each owner transfer method.
  */
-OTMCallbackData_t g_OTMDatas[OIC_OXM_COUNT];
+static OTMCallbackData_t g_OTMDatas[OIC_OXM_COUNT];
 
 /**
  * Variable for storing provisioning tool's provisioning capabilities
@@ -259,11 +249,11 @@ static OCStackResult StartOwnershipTransfer(void* ctx, OCProvisionDev_t* selecte
 static OCStackResult FinalizeProvisioning(OTMContext_t* otmCtx);
 
 
-static bool IsComplete()
+static bool IsComplete(OTMContext_t* otmCtx)
 {
-    for(size_t i = 0; i < g_resultArraySize; i++)
+    for(size_t i = 0; i < otmCtx->ctxResultArraySize; i++)
     {
-        if(OC_STACK_CONTINUE == g_resultArray[i].res)
+        if(OC_STACK_CONTINUE == otmCtx->ctxResultArray[i].res)
         {
             return false;
         }
@@ -290,27 +280,30 @@ static void SetResult(OTMContext_t* otmCtx, const OCStackResult res)
 
     if(otmCtx->selectedDeviceInfo)
     {
-        for(size_t i = 0; i < g_resultArraySize; i++)
+        for(size_t i = 0; i < otmCtx->ctxResultArraySize; i++)
         {
             if(memcmp(otmCtx->selectedDeviceInfo->doxm->deviceID.id,
-                      g_resultArray[i].deviceId.id, UUID_LENGTH) == 0)
+                      otmCtx->ctxResultArray[i].deviceId.id, UUID_LENGTH) == 0)
             {
-                g_resultArray[i].res = res;
+                otmCtx->ctxResultArray[i].res = res;
                 if(OC_STACK_OK != res)
                 {
-                    g_hasError = true;
+                    otmCtx->ctxHasError = true;
                 }
             }
         }
 
         //If all request is completed, invoke the user callback.
-        if(IsComplete())
+        if(IsComplete(otmCtx))
         {
-            g_resultCallback(otmCtx->userCtx, g_resultArraySize, g_resultArray, g_hasError);
+            otmCtx->ctxResultCallback(otmCtx->userCtx, otmCtx->ctxResultArraySize,
+                                       otmCtx->ctxResultArray, otmCtx->ctxHasError);
+            OICFree(otmCtx->ctxResultArray);
+            OICFree(otmCtx);
         }
         else
         {
-            if(OC_STACK_OK != StartOwnershipTransfer(otmCtx->userCtx,
+            if(OC_STACK_OK != StartOwnershipTransfer(otmCtx,
                                                      otmCtx->selectedDeviceInfo->next))
             {
                 OC_LOG(ERROR, TAG, "Failed to StartOwnershipTransfer");
@@ -319,8 +312,6 @@ static void SetResult(OTMContext_t* otmCtx, const OCStackResult res)
     }
 
     OC_LOG(DEBUG, TAG, "OUT SetResult");
-
-    OICFree(otmCtx);
 }
 
 
@@ -529,7 +520,7 @@ static OCStackApplicationResult OwnershipInformationHandler(void *ctx, OCDoHandl
     {
         if(OIC_RANDOM_DEVICE_PIN == otmCtx->selectedDeviceInfo->doxm->oxmSel)
         {
-            res = RemoveCredential(&otmCtx->tempCredId);
+            res = RemoveCredential(&otmCtx->subIdForPinOxm);
             if(OC_STACK_RESOURCE_DELETED != res)
             {
                 OC_LOG_V(ERROR, TAG, "Failed to remove temporal PSK : %d", res);
@@ -650,7 +641,7 @@ static OCStackResult PutOwnerTransferModeToResource(OTMContext_t* otmCtx)
 
     if(!otmCtx || !otmCtx->selectedDeviceInfo)
     {
-        OC_LOG(ERROR, TAG, "Invailed parameters");
+        OC_LOG(ERROR, TAG, "Invalid parameters");
         return OC_STACK_INVALID_PARAM;
     }
 
@@ -852,19 +843,7 @@ static OCStackResult PutUpdateOperationMode(OTMContext_t* otmCtx,
 static OCStackResult StartOwnershipTransfer(void* ctx, OCProvisionDev_t* selectedDevice)
 {
     OC_LOG(INFO, TAG, "IN StartOwnershipTransfer");
-    //Checking duplication of Device ID.
-    if(true == PDMIsDuplicateDevice(&selectedDevice->doxm->deviceID))
-    {
-        OC_LOG(ERROR, TAG, "OTMDoOwnershipTransfer : Device ID is duplicated");
-        return OC_STACK_INVALID_PARAM;
-    }
-    OTMContext_t* otmCtx = (OTMContext_t*)OICMalloc(sizeof(OTMContext_t));
-    if(!otmCtx)
-    {
-        OC_LOG(ERROR, TAG, "Failed to create OTM Context");
-        return OC_STACK_NO_MEMORY;
-    }
-    otmCtx->userCtx = ctx;
+    OTMContext_t* otmCtx = (OTMContext_t*)ctx;
     otmCtx->selectedDeviceInfo = selectedDevice;
 
     //Set to the lowest level OxM, and then find more higher level OxM.
@@ -933,47 +912,56 @@ OCStackResult OTMDoOwnershipTransfer(void* ctx,
         return OC_STACK_INVALID_PARAM;
     }
 
-    g_resultCallback = resultCallback;
-    g_hasError = false;
-
+    OTMContext_t* otmCtx = (OTMContext_t*)OICCalloc(1,sizeof(OTMContext_t));
+    if(!otmCtx)
+    {
+        OC_LOG(ERROR, TAG, "Failed to create OTM Context");
+        return OC_STACK_NO_MEMORY;
+    }
+    otmCtx->ctxResultCallback = resultCallback;
+    otmCtx->ctxHasError = false;
+    otmCtx->userCtx = ctx;
     OCProvisionDev_t* pCurDev = selectedDevicelist;
 
     //Counting number of selected devices.
-    g_resultArraySize = 0;
+    otmCtx->ctxResultArraySize = 0;
     while(NULL != pCurDev)
     {
-        g_resultArraySize++;
+        otmCtx->ctxResultArraySize++;
         pCurDev = pCurDev->next;
     }
 
-    if(g_resultArray)
-    {
-        OICFree(g_resultArray);
-    }
-    g_resultArray =
-        (OCProvisionResult_t*)OICMalloc(sizeof(OCProvisionResult_t) * g_resultArraySize);
-    if(NULL == g_resultArray)
+    otmCtx->ctxResultArray =
+        (OCProvisionResult_t*)OICCalloc(otmCtx->ctxResultArraySize, sizeof(OCProvisionResult_t));
+    if(NULL == otmCtx->ctxResultArray)
     {
         OC_LOG(ERROR, TAG, "OTMDoOwnershipTransfer : Failed to memory allocation");
+        OICFree(otmCtx);
         return OC_STACK_NO_MEMORY;
     }
-
     pCurDev = selectedDevicelist;
+
     //Fill the device UUID for result array.
-    for(size_t devIdx = 0; devIdx < g_resultArraySize; devIdx++)
+    for(size_t devIdx = 0; devIdx < otmCtx->ctxResultArraySize; devIdx++)
     {
-        memcpy(g_resultArray[devIdx].deviceId.id,
+        //Checking duplication of Device ID.
+        if(true == PDMIsDuplicateDevice(&pCurDev->doxm->deviceID))
+        {
+            OC_LOG(ERROR, TAG, "OTMDoOwnershipTransfer : Device ID is duplicate");
+            OICFree(otmCtx->ctxResultArray);
+            OICFree(otmCtx);
+            return OC_STACK_INVALID_PARAM;
+        }
+        memcpy(otmCtx->ctxResultArray[devIdx].deviceId.id,
                pCurDev->doxm->deviceID.id,
                UUID_LENGTH);
-        g_resultArray[devIdx].res = OC_STACK_CONTINUE;
+        otmCtx->ctxResultArray[devIdx].res = OC_STACK_CONTINUE;
         pCurDev = pCurDev->next;
     }
-
-    StartOwnershipTransfer(ctx, selectedDevicelist);
+    StartOwnershipTransfer(otmCtx, selectedDevicelist);
 
     OC_LOG(DEBUG, TAG, "OUT OTMDoOwnershipTransfer");
-
-    return (g_hasError ? OC_STACK_ERROR : OC_STACK_OK);
+    return OC_STACK_OK;
 }
 
 /**
index ea09fb4..a3c76bc 100644 (file)
@@ -105,7 +105,7 @@ OCStackResult InputPinCodeCallback(OTMContext_t* otmCtx)
     res = AddTmpPskWithPIN(&otmCtx->selectedDeviceInfo->doxm->deviceID,
                            SYMMETRIC_PAIR_WISE_KEY,
                            (char*)pinData, OXM_RANDOM_PIN_SIZE,
-                           1, &deviceUUID, &otmCtx->tempCredId);
+                           1, &deviceUUID, &otmCtx->subIdForPinOxm);
     if(res != OC_STACK_OK)
     {
         OC_LOG_V(ERROR, TAG, "Failed to save the temporal PSK : %d", res);