OCStackResult OCSecureResource::unlinkDevices(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 = OCUnlinkDevices(static_cast<void*>(context), devPtr, device2.getDevPtr(), &OCSecureResource::callbackWrapper); } else { oclog() <<"Mutex not found"; result = OC_STACK_ERROR; } return result; }
static int unlinkPairwise(void) { // check |own_list| for unlinking pairwise devices if(!g_own_list || 2>g_own_cnt) { printf(" > Owned Device List, to Unlink the Pairwise, is Empty\n"); printf(" > Please Register Unowned Devices first, with [20] Menu\n"); return 0; // normal case } // select two devices for unlinking pairwise devices int dev_num[2] = {0}; if(selectTwoDiffNum(&(dev_num[0]), &(dev_num[1]), g_own_cnt, "for Unlinking Devices")) { OIC_LOG(ERROR, TAG, "selectTwoDiffNum error return"); return -1; } // call |OCUnlinkDevices| API actually // calling this API with callback actually acts like blocking // for error checking, the return value saved and printed g_doneCB = false; printf(" Unlinking Selected Pairwise Devices..\n"); OCStackResult rst = OCUnlinkDevices((void*) g_ctx, getDevInst((const OCProvisionDev_t*) g_own_list, dev_num[0]), getDevInst((const OCProvisionDev_t*) g_own_list, dev_num[1]), unlinkDevicesCB); if(OC_STACK_OK != rst) { OIC_LOG_V(ERROR, TAG, "OCUnlinkDevices API error: %d", rst); return -1; } if(waitCallbackRet()) // input |g_doneCB| flag implicitly { OIC_LOG(ERROR, TAG, "OCProvisionCredentials callback error"); return -1; } // display the pairwise-unlinked result printf(" > Unlinked Selected Pairwise Devices\n"); printf(" > Please Check Device's Status for the Unlinked Result, with [33] Menu\n"); return 0; }
TEST(OCUnlinkDevicesTest, NullCallback) { OCProvisionDev_t dev1; OCProvisionDev_t dev2; EXPECT_EQ(OC_STACK_INVALID_PARAM, OCUnlinkDevices(NULL, &dev1, &dev2, NULL)); }
TEST(OCUnlinkDevicesTest, NullDevice2) { OCProvisionDev_t dev1; EXPECT_EQ(OC_STACK_INVALID_PARAM, OCUnlinkDevices(NULL, &dev1, NULL, provisioningCB)); }