typedef OCStackResult (*OTMCreatePayloadCallback)(OTMContext_t* otmCtx, uint8_t **payload,\r
size_t *size);\r
\r
+/*\r
+ * Callback for selecting OTM.\r
+ */\r
+typedef OicSecOxm_t (*OTMSelectMethodCallback)(const OicSecOxm_t* otmList, const uint32_t len);\r
+\r
/**\r
* Required callback for performing ownership transfer\r
*/\r
OTMCreateSecureSession createSecureSessionCB;\r
OTMCreatePayloadCallback createSelectOxmPayloadCB;\r
OTMCreatePayloadCallback createOwnerTransferPayloadCB;\r
+ OTMSelectMethodCallback selectOTMCB;\r
};\r
\r
/**\r
return OC_STACK_OK;
}
+OicSecOxm_t selectOTMcb(const OicSecOxm_t* otmList, const uint32_t len)
+{
+ return otmList[len-1];
+}
+
#ifdef MULTIPLE_OWNER
static int changeMultipleOwnershipTrnasferMode(void)
{
SetDisplayNumCB(NULL, displayNumCB);
SetUserConfirmCB(NULL, confirmNumCB);
SetInputStateCB(NULL, notifyInputStateCB);
+ SetSelectOTMCB(selectOTMcb);
// set callback for checking peer certificate information
OCSetPeerCertCallback(NULL, peerCertCallback);
NOT_ALLOWED_OXM};
#endif
+static OTMSelectMethodCallback g_selectOTMCB = NULL;
+
OCStackResult OTMSetOTCallback(OicSecOxm_t oxm, OTMCallbackData_t* callbacks)
{
OCStackResult res = OC_STACK_INVALID_PARAM;
return res;
}
+void SetSelectOTMCB(OTMSelectMethodCallback selectOTMcb)
+{
+ g_selectOTMCB = selectOTMcb;
+ return;
+}
+
/**
* Internal API to convert OxM value to index of oxm allow table.
*/
{
case SUPER_OWNER:
{
+ if (g_selectOTMCB)
+ {
+ uint32_t methNum = 0;
+ OicSecOxm_t list[10] = {0};
+
for (size_t i = 0; i < numberOfMethods; i++)
{
selectedOxmIdx = GetOxmAllowTableIdx(supportedMethods[i]);
OIC_LOG(WARNING, TAG, "Invalid oxm index to access OxM allow table");
continue;
}
-#ifdef MULTIPLE_OWNER
+ #ifdef MULTIPLE_OWNER
+ if (ALLOWED_OXM == g_OxmAllowStatus[selectedOxmIdx] &&
+ OXM_IDX_PRECONFIG_PIN != selectedOxmIdx)
+ #else
+
+ if (ALLOWED_OXM == g_OxmAllowStatus[selectedOxmIdx])
+ #endif //MULTIPLE_OWNER
+ {
+ list[methNum] = supportedMethods[i];
+ methNum++;
+ }
+ }
+ *selectedMethod = g_selectOTMCB(list, methNum);
+ isOxmSelected = true;
+ }
+ else
+ {
+ for (size_t i = 0; i < numberOfMethods; i++)
+ {
+ selectedOxmIdx = GetOxmAllowTableIdx(supportedMethods[i]);
+ if (OXM_IDX_COUNT <= selectedOxmIdx)
+ {
+ OIC_LOG(WARNING, TAG, "Invalid oxm index to access OxM allow table");
+ continue;
+ }
+ #ifdef MULTIPLE_OWNER
if (ALLOWED_OXM == g_OxmAllowStatus[selectedOxmIdx] &&
OXM_IDX_PRECONFIG_PIN != selectedOxmIdx)
-#else
+ #else
if (ALLOWED_OXM == g_OxmAllowStatus[selectedOxmIdx])
-#endif //MULTIPLE_OWNER
+ #endif //MULTIPLE_OWNER
{
*selectedMethod = supportedMethods[i];
isOxmSelected = true;
}
}
}
+ }
break;
#ifdef MULTIPLE_OWNER
case SUB_OWNER:
SetResult(otmCtx, res);
return res;
}
- OIC_LOG_V(DEBUG, TAG, "Selected provisoning method = %d", selectedDevice->doxm->oxmSel);
+ OIC_LOG_V(DEBUG, TAG, "Selected provisioning method = %d", selectedDevice->doxm->oxmSel);
res = OTMSetOTCallback(selectedDevice->doxm->oxmSel, &otmCtx->otmCallback);
if(OC_STACK_OK != res)
//Select the OxM to performing ownership transfer
selectedDevice->doxm->oxmSel = method;
- OIC_LOG_V(DEBUG, TAG, "Selected provisoning method = %d", selectedDevice->doxm->oxmSel);
+ OIC_LOG_V(DEBUG, TAG, "Selected provisioning method = %d", selectedDevice->doxm->oxmSel);
res = OTMSetOTCallback(selectedDevice->doxm->oxmSel, &otmCtx->otmCallback);
if(OC_STACK_OK != res)