Imported Upstream version 1.1.1
[platform/upstream/iotivity.git] / resource / csdk / security / src / directpairing.c
index 5606598..8e8712b 100644 (file)
@@ -65,6 +65,7 @@ typedef struct DPairData
     OCDirectPairingDev_t        *peer;                         /**< Pointer to pairing target info.**/\r
     char                                  pin[DP_PIN_LENGTH];  /**< PIN **/\r
     OCDirectPairingResultCB    resultCallback;           /**< Pointer to result callback.**/\r
+    void *userCtx;                                      /** < user context to pass in callback **/\r
 } DPairData_t;\r
 \r
 static OCDirectPairingDev_t *g_dp_paired = NULL;\r
@@ -331,7 +332,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
 \r
     if (clientResponse)\r
     {\r
-        if(OC_STACK_OK == clientResponse->result)\r
+        if(OC_STACK_RESOURCE_CHANGED == clientResponse->result)\r
         {\r
             // result\r
             OIC_LOG(INFO, TAG, "DirectPairingFinalizeHandler : success PUT"\r
@@ -347,7 +348,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
             if (OC_STACK_OK != GetDoxmDeviceID(&ptDeviceID))\r
             {\r
                 OIC_LOG(ERROR, TAG, "Error while retrieving provisioning tool's device ID");\r
-                resultCallback(peer, OC_STACK_ERROR);\r
+                resultCallback(dpairData->userCtx, peer, OC_STACK_ERROR);\r
                 return OC_STACK_DELETE_TRANSACTION;\r
             }\r
 \r
@@ -356,7 +357,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
             if(OC_STACK_OK != res)\r
             {\r
                 OIC_LOG(ERROR, TAG, "Failed to PairingPSK generation");\r
-                resultCallback(peer, res);\r
+                resultCallback(dpairData->userCtx, peer, res);\r
                 return OC_STACK_DELETE_TRANSACTION;\r
             }\r
 \r
@@ -385,7 +386,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
                 OIC_LOG(ERROR, TAG, "Error while adding a device to paired list.");\r
             }\r
 \r
-            resultCallback(peer, OC_STACK_OK);\r
+            resultCallback(dpairData->userCtx, peer, OC_STACK_OK);\r
 \r
             return OC_STACK_DELETE_TRANSACTION;\r
         }\r
@@ -399,7 +400,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
         OIC_LOG(ERROR, TAG, "DirectPairingFinalizeHandler received Null clientResponse");\r
     }\r
 \r
-    resultCallback(peer, OC_STACK_ERROR);\r
+    resultCallback(dpairData->userCtx, peer, OC_STACK_ERROR);\r
     OICFree(dpairData);\r
     return OC_STACK_DELETE_TRANSACTION;\r
 }\r
@@ -412,7 +413,7 @@ static OCStackApplicationResult DirectPairingFinalizeHandler(void *ctx, OCDoHand
  *\r
  * @return OC_STACK_OK on success otherwise error.\r
  */\r
-OCStackResult FinalizeDirectPairing(OCDirectPairingDev_t* peer,\r
+OCStackResult FinalizeDirectPairing(void *ctx, OCDirectPairingDev_t* peer,\r
                                                      OCDirectPairingResultCB resultCallback)\r
 {\r
     if(NULL == peer)\r
@@ -474,6 +475,7 @@ OCStackResult FinalizeDirectPairing(OCDirectPairingDev_t* peer,
     }\r
     dpairData->peer = peer;\r
     dpairData->resultCallback = resultCallback;\r
+    dpairData->userCtx = ctx;\r
 \r
     OCCallbackData cbData =  {.context=NULL, .cb=NULL, .cd=NULL};\r
     cbData.cb = DirectPairingFinalizeHandler;\r
@@ -525,17 +527,17 @@ void DirectPairingDTLSHandshakeCB(const CAEndpoint_t *endpoint, const CAErrorInf
             {\r
                 OIC_LOG(INFO, TAG, "Now, finalize Direct-Pairing procedure.");\r
 \r
-                res = FinalizeDirectPairing(peer, resultCallback);\r
+                res = FinalizeDirectPairing(g_dp_proceed_ctx->userCtx, peer, resultCallback);\r
                 if(OC_STACK_OK != res)\r
                 {\r
                     OIC_LOG(ERROR, TAG, "Failed to finalize direct-pairing");\r
-                    resultCallback(peer, res);\r
+                    resultCallback(g_dp_proceed_ctx->userCtx, peer, res);\r
                 }\r
             }\r
             else if(CA_DTLS_AUTHENTICATION_FAILURE == info->result)\r
             {\r
                 OIC_LOG(INFO, TAG, "DirectPairingDTLSHandshakeCB - Authentication failed");\r
-                resultCallback(peer, OC_STACK_AUTHENTICATION_FAILURE);\r
+                resultCallback(g_dp_proceed_ctx->userCtx, peer, OC_STACK_AUTHENTICATION_FAILURE);\r
             }\r
 \r
 #ifdef __WITH_DTLS__\r
@@ -586,7 +588,7 @@ static OCStackApplicationResult DirectPairingHandler(void *ctx, OCDoHandle UNUSE
 \r
     if (clientResponse)\r
     {\r
-        if(OC_STACK_RESOURCE_CREATED == clientResponse->result)\r
+        if(OC_STACK_RESOURCE_CHANGED == clientResponse->result)\r
         {\r
             // result\r
             OIC_LOG(INFO, TAG, "DirectPairingHandler : success POST request to /oic/sec/dpairing");\r
@@ -653,7 +655,7 @@ exit:
             g_dp_proceed_ctx = NULL;\r
         }\r
 \r
-        resultCallback(dpairData->peer, res);\r
+        resultCallback(dpairData->userCtx, dpairData->peer, res);\r
     }\r
     OIC_LOG_V(INFO, TAG, "OUT DirectPairingHandler.");\r
     return OC_STACK_DELETE_TRANSACTION;\r
@@ -668,8 +670,8 @@ exit:
  *\r
  * @return OC_STACK_OK on success otherwise error.\r
  */\r
-OCStackResult DPDirectPairing(OCDirectPairingDev_t* peer, OicSecPrm_t pmSel, char *pinNumber,\r
-                                                     OCDirectPairingResultCB resultCallback)\r
+OCStackResult DPDirectPairing(void *ctx, OCDirectPairingDev_t* peer, OicSecPrm_t pmSel,\r
+                                char *pinNumber, OCDirectPairingResultCB resultCallback)\r
 {\r
     if(NULL == peer || NULL == pinNumber)\r
     {\r
@@ -732,6 +734,7 @@ OCStackResult DPDirectPairing(OCDirectPairingDev_t* peer, OicSecPrm_t pmSel, cha
     dpairData->peer = peer;\r
     memcpy(dpairData->pin, pinNumber, DP_PIN_LENGTH);\r
     dpairData->resultCallback = resultCallback;\r
+    dpairData->userCtx = ctx;\r
 \r
     OCCallbackData cbData =  {.context=NULL, .cb=NULL, .cd=NULL};\r
     cbData.cb = DirectPairingHandler;\r
@@ -1008,6 +1011,7 @@ OCStackResult DPDeviceDiscovery(unsigned short waittime)
         }\r
         else\r
         {\r
+            OCProcess();\r
             nanosleep(&timeout, NULL);\r
         }\r
     }\r