OCStackResult OCSecure::provisionInit(const std::string& dbPath) { OCStackResult result; auto cLock = OCPlatform_impl::Instance().csdkLock().lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); result = OCInitPM(dbPath.c_str()); } 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; }