OCStackResult OCSecure::setOwnerTransferCallbackData(OicSecOxm_t oxm, OTMCallbackData_t* callbackData, InputPinCallback inputPin) { if(NULL == callbackData || oxm >= OIC_OXM_COUNT) { oclog() <<"Invalid callbackData or OXM type"; return OC_STACK_INVALID_PARAM; } if((OIC_RANDOM_DEVICE_PIN == oxm) && !inputPin) { oclog() <<"for OXM type DEVICE_PIN, inputPin callback can't be null"; return OC_STACK_INVALID_PARAM; } OCStackResult result; auto cLock = OCPlatform_impl::Instance().csdkLock().lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); result = OCSetOwnerTransferCallbackData(oxm, callbackData); if(result == OC_STACK_OK && (OIC_RANDOM_DEVICE_PIN == oxm)) { SetInputPinCB(inputPin); } } else { oclog() <<"Mutex not found"; result = OC_STACK_ERROR; } return result; }
// function(s) for provisioning client using C-level provisioning API static int initProvisionClient(void) { // initialize persistent storage for SVR DB static OCPersistentStorage pstStr = { .open = fopen_prvnMng, .read = fread, .write = fwrite, .close = fclose, .unlink = unlink }; if(OC_STACK_OK != OCRegisterPersistentStorageHandler(&pstStr)) { OIC_LOG(ERROR, TAG, "OCRegisterPersistentStorageHandler error"); return -1; } // initialize OC stack and provisioning manager if(OC_STACK_OK != OCInit(NULL, 0, OC_CLIENT_SERVER)) { OIC_LOG(ERROR, TAG, "OCStack init error"); return -1; } if (access(PRVN_DB_FILE_NAME, F_OK) != -1) { printf("************************************************************\n"); printf("************Provisioning DB file already exists.************\n"); printf("************************************************************\n"); } else { printf("*************************************************************\n"); printf("************No provisioning DB file, creating new************\n"); printf("*************************************************************\n"); } if(OC_STACK_OK != OCInitPM(PRVN_DB_FILE_NAME)) { OIC_LOG(ERROR, TAG, "OC_PM init error"); return -1; } // register callback function(s) to each OxM OTMCallbackData_t otmcb = { .loadSecretCB = LoadSecretJustWorksCallback, .createSecureSessionCB = CreateSecureSessionJustWorksCallback, .createSelectOxmPayloadCB = CreateJustWorksSelectOxmPayload, .createOwnerTransferPayloadCB = CreateJustWorksOwnerTransferPayload }; if(OC_STACK_OK != OCSetOwnerTransferCallbackData(OIC_JUST_WORKS, &otmcb)) { OIC_LOG(ERROR, TAG, "OCSetOwnerTransferCallbackData error: OIC_JUST_WORKS"); return -1; } otmcb.loadSecretCB = InputPinCodeCallback; otmcb.createSecureSessionCB = CreateSecureSessionRandomPinCallback; otmcb.createSelectOxmPayloadCB = CreatePinBasedSelectOxmPayload; otmcb.createOwnerTransferPayloadCB = CreatePinBasedOwnerTransferPayload; if(OC_STACK_OK != OCSetOwnerTransferCallbackData(OIC_RANDOM_DEVICE_PIN, &otmcb)) { OIC_LOG(ERROR, TAG, "OCSetOwnerTransferCallbackData error: OIC_RANDOM_DEVICE_PIN"); return -1; } SetInputPinCB(inputPinCB); return 0; }