OCStackResult OCSecureResource::provisionCredentials(const Credential &cred, const OCSecureResource &device2, ResultCallBack resultCallback) { if(!resultCallback) { oclog() << "Result calback can't be null"; return OC_STACK_INVALID_PARAM; } OCStackResult result; auto cLock = m_csdkLock.lock(); if(cLock) { ProvisionContext* context = new ProvisionContext(resultCallback); std::lock_guard<std::recursive_mutex> lock(*cLock); result = OCProvisionCredentials(static_cast<void*>(context), cred.getCredentialType(), cred.getCredentialKeySize(), devPtr, device2.getDevPtr(), &OCSecureResource::callbackWrapper); } else { oclog() <<"Mutex not found"; result = OC_STACK_ERROR; } return result; }
static int provisionCred(void) { // check |own_list| for provisioning pairwise credentials if(!g_own_list || 2>g_own_cnt) { printf(" > Owned Device List, to Provision Credentials, is Empty\n"); printf(" > Please Register Unowned Devices first, with [20] Menu\n"); return 0; // normal case } // select two devices for provisioning pairwise credentials int dev_num[2] = {0}; if(selectTwoDiffNum(&(dev_num[0]), &(dev_num[1]), g_own_cnt, "for Linking CRED(s)")) { OIC_LOG(ERROR, TAG, "selectTwoDiffNum error return"); return -1; } printf(" Select PSK length..\n"); printf(" 1 - 128bit(Default)\n"); printf(" 2 - 256bit\n"); int sizeOption = 0; for(int ret=0; 1!=ret; ) { ret = scanf("%d",&sizeOption); for( ; 0x20<=getchar(); ); // for removing overflow garbages // '0x20<=code' is character region } size_t size = 0; switch(sizeOption) { case 1: { size = OWNER_PSK_LENGTH_128; break; } case 2: { size = OWNER_PSK_LENGTH_256; break; } default: { size = OWNER_PSK_LENGTH_128; break; } } // call |OCProvisionCredentials| API actually // calling this API with callback actually acts like blocking // for error checking, the return value saved and printed g_doneCB = false; printf(" Provisioning Selected Pairwise Credentials..\n"); OCStackResult rst = OCProvisionCredentials((void*) g_ctx, SYMMETRIC_PAIR_WISE_KEY, size, getDevInst((const OCProvisionDev_t*) g_own_list, dev_num[0]), getDevInst((const OCProvisionDev_t*) g_own_list, dev_num[1]), provisionCredCB); if(OC_STACK_OK != rst) { OIC_LOG_V(ERROR, TAG, "OCProvisionCredentials API error: %d", rst); return -1; } if(waitCallbackRet()) // input |g_doneCB| flag implicitly { OIC_LOG(ERROR, TAG, "OCProvisionCredentials callback error"); return -1; } // display the CRED-provisioned result printf(" > Provisioned Selected Pairwise Crendentials\n"); printf(" > Please Check Device's Status for the Linked Result, with [33] Menu\n"); return 0; }