Add context param to DP
authorAshwini Kumar <k.ashwini@samsung.com>
Mon, 23 May 2016 06:29:25 +0000 (11:59 +0530)
committerRandeep Singh <randeep.s@samsung.com>
Tue, 14 Jun 2016 02:34:16 +0000 (02:34 +0000)
 Added user context to direct pairing API OCDoDirectPairing

Change-Id: Ie0cd85446a1b7d56d153ba4f3ccabbefd0ff5284
Signed-off-by: Ashwini Kumar <k.ashwini@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/8273
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Chul Lee <chuls.lee@samsung.com>
Reviewed-by: Randeep Singh <randeep.s@samsung.com>
resource/csdk/security/include/internal/directpairing.h
resource/csdk/security/provisioning/include/pmtypes.h
resource/csdk/security/src/directpairing.c
resource/csdk/security/unittest/directpairingtest.cpp
resource/csdk/stack/include/ocstack.h
resource/csdk/stack/include/octypes.h
resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp
resource/csdk/stack/src/ocstack.c
resource/csdk/stack/test/stacktests.cpp

index e884c9a..328523d 100644 (file)
@@ -43,6 +43,7 @@ OCStackResult DPDeviceDiscovery(unsigned short waittime);
 /**\r
  * Start direct-pairing processes.\r
  *\r
+ * @param[in] ctx  user context passed back with resultCallback.\r
  * @param[in] peer  target device to establish direct-pairing.\r
  * @param[in] pmSel  selected pairing method.\r
  * @param[in] pinNumber  secret value for dtls connection.\r
@@ -50,8 +51,8 @@ OCStackResult DPDeviceDiscovery(unsigned short waittime);
  *\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
 /**\r
  * This function returns discovered devices list in direct-pairing discovery\r
index eede02d..f6b7a7a 100644 (file)
@@ -111,11 +111,12 @@ typedef void (*OCProvisionResultCB)(void* ctx, int nOfRes, OCProvisionResult_t *
 /**
  * Callback function definition of direct-pairing
  *
+ * @param[OUT] ctx - User context which will be returned wth callback
  * @param[OUT] peer - pairing device info.
  * @param[OUT} result - It's returned with 'OC_STACK_XXX'. It will return 'OC_STACK_OK'
  *                                   if D2D pairing is success without error
  */
-typedef void (*OCDirectPairingResultCB)(OCDirectPairingDev_t *peer, OCStackResult result);
+typedef void (*OCDirectPairingResultCB)(void *ctx, OCDirectPairingDev_t *peer, OCStackResult result);
 
 
 #ifdef __cplusplus
index be68b04..a13d236 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
@@ -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
@@ -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
index 5c49a21..4904b35 100644 (file)
@@ -29,20 +29,21 @@ static OCDirectPairingDev_t peer;
 static OicSecPrm_t pmSel;
 static char pinNumber;
 
-static void ResultCB(OCDirectPairingDev_t *UNUSED1, OCStackResult UNUSED2)
+static void ResultCB(void *UNUSED1, OCDirectPairingDev_t *UNUSED2, OCStackResult UNUSED3)
 {
     //dummy callback
     (void) UNUSED1;
     (void) UNUSED2;
+    (void) UNUSED3;
 }
 
 TEST(DPDirectPairingTest, NullPeer)
 {
-    EXPECT_EQ(OC_STACK_INVALID_PARAM, DPDirectPairing(NULL, pmSel, &pinNumber, &ResultCB));
+    EXPECT_EQ(OC_STACK_INVALID_PARAM, DPDirectPairing(NULL, NULL, pmSel, &pinNumber, &ResultCB));
 }
 
 TEST(DPDirectPairingTest, NullPinNumber)
 {
-    EXPECT_EQ(OC_STACK_INVALID_PARAM, DPDirectPairing(&peer, pmSel, NULL, &ResultCB));
+    EXPECT_EQ(OC_STACK_INVALID_PARAM, DPDirectPairing(NULL, &peer, pmSel, NULL, &ResultCB));
 }
 
index 9eeae7e..7ea59f8 100644 (file)
@@ -547,7 +547,7 @@ const OCDPDev_t* OCGetDirectPairedDevices();
  * @param[in] resultCallback Callback fucntion to event status of process.
  * @return OTM_SUCCESS in case of success and other value otherwise.
  */
-OCStackResult OCDoDirectPairing(OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber,
+OCStackResult OCDoDirectPairing(void *ctx, OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber,
                                                      OCDirectPairingCB resultCallback);
 //#endif // DIRECT_PAIRING
 
index da3e23a..a23cddc 100644 (file)
@@ -1490,11 +1490,12 @@ typedef OCEntityHandlerResult (*OCDeviceEntityHandler)
 /**
  * Callback function definition of direct-pairing
  *
+ * @param[OUT] ctx - user context returned in the callback.
  * @param[OUT] peer - pairing device info.
  * @param[OUT} result - It's returned with 'OC_STACK_XXX'. It will return 'OC_STACK_OK'
  *                                   if D2D pairing is success without error
  */
-typedef void (*OCDirectPairingCB)(OCDPDev_t *peer, OCStackResult result);
+typedef void (*OCDirectPairingCB)(void *ctx, OCDPDev_t *peer, OCStackResult result);
 //#endif // DIRECT_PAIRING
 
 #ifdef __cplusplus
index fd7d8ee..f00c44c 100644 (file)
@@ -270,10 +270,11 @@ OCStackApplicationResult discoveryReqCB(void*, OCDoHandle,
 }\r
 \r
 // This is a function called back when direct-pairing status is changed\r
-void pairingReqCB(OCDPDev_t* peer, OCStackResult result)\r
+void pairingReqCB(void *ctx, OCDPDev_t* peer, OCStackResult result)\r
 {\r
     OIC_LOG(INFO, TAG, "Callback Context for Direct-Pairing establishment\n");\r
 \r
+    (void) ctx;\r
     if (OC_STACK_OK == result)\r
     {\r
         OIC_LOG_V(INFO, TAG,\r
@@ -359,7 +360,7 @@ OCStackResult DoDirectPairing(OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber)
 \r
     // start direct pairing\r
     OIC_LOG(INFO, TAG, "   Start Direct Pairing..");\r
-    if(OC_STACK_OK != OCDoDirectPairing(peer, pmSel, pinNumber, pairingReqCB))\r
+    if(OC_STACK_OK != OCDoDirectPairing(NULL, peer, pmSel, pinNumber, pairingReqCB))\r
     {\r
         OIC_LOG(ERROR, TAG, "OCDoDirectPairing API error");\r
         return OC_STACK_ERROR;\r
index d622944..efd9caa 100644 (file)
@@ -133,10 +133,6 @@ void* defaultDeviceHandlerCallbackParameter = NULL;
 static const char COAP_TCP[] = "coap+tcp:";
 static const char CORESPEC[] = "core";
 
-//#ifdef DIRECT_PAIRING
-OCDirectPairingCB gDirectpairingCallback = NULL;
-//#endif
-
 //-----------------------------------------------------------------------------
 // Macros
 //-----------------------------------------------------------------------------
@@ -3961,16 +3957,7 @@ const OCDPDev_t* OCGetDirectPairedDevices()
     return (const OCDPDev_t*)DPGetPairedDevices();
 }
 
-void DirectPairingCB (OCDirectPairingDev_t * peer, OCStackResult result)
-{
-    if (gDirectpairingCallback)
-    {
-        gDirectpairingCallback((OCDPDev_t*)peer, result);
-        gDirectpairingCallback = NULL;
-    }
-}
-
-OCStackResult OCDoDirectPairing(OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber,
+OCStackResult OCDoDirectPairing(void *ctx, OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber,
                                                      OCDirectPairingCB resultCallback)
 {
     OIC_LOG(INFO, TAG, "Start OCDoDirectPairing");
@@ -3985,9 +3972,8 @@ OCStackResult OCDoDirectPairing(OCDPDev_t* peer, OCPrm_t pmSel, char *pinNumber,
         return OC_STACK_INVALID_CALLBACK;
     }
 
-    gDirectpairingCallback = resultCallback;
-    return DPDirectPairing((OCDirectPairingDev_t*)peer, (OicSecPrm_t)pmSel,
-                                           pinNumber, DirectPairingCB);
+    return DPDirectPairing(ctx, (OCDirectPairingDev_t*)peer, (OicSecPrm_t)pmSel,
+                                           pinNumber, (OCDirectPairingResultCB)resultCallback);
 }
 //#endif // DIRECT_PAIRING
 
index 3d353dc..8325487 100644 (file)
@@ -86,10 +86,11 @@ extern "C"  OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
     return OC_STACK_KEEP_TRANSACTION;
 }
 
-static void resultCallback(OCDPDev_t *UNUSED1, OCStackResult UNUSED2)
+static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
 {
     (void) (UNUSED1);
     (void) (UNUSED2);
+    (void) (UNUSED3);
 }
 
 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
@@ -1689,17 +1690,17 @@ TEST(PODTests, OCCallbackData)
 
 TEST(OCDoDirectPairingTests, Nullpeer)
 {
-    EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, pmSel, &pinNumber, &resultCallback));
+    EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
 }
 
 TEST(OCDoDirectPairingTests, NullCallback)
 {
-    EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(&peer, pmSel, &pinNumber, NULL));
+    EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
 }
 
 TEST(OCDoDirectPairingTests, NullpinNumber)
 {
-    EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(&peer, pmSel, NULL, &resultCallback));
+    EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
 }
 
 TEST(StackResource, MultipleResourcesDiscovery)