OCStackResult OCSecureResource::getLinkedDevices(UuidList_t &uuidList) { OCStackResult result; size_t numOfDevices = -1; auto devUuid = devPtr->doxm->deviceID; auto cLock = m_csdkLock.lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); OCUuidList_t* linkedDevs = nullptr, *tmp = nullptr; result = OCGetLinkedStatus(&devUuid, &linkedDevs, &numOfDevices); if (result == OC_STACK_OK) { for (tmp = linkedDevs; tmp; tmp = tmp->next) { uuidList.push_back(tmp->dev); } OCDeleteUuidList(linkedDevs); } } else { oclog() <<"Mutex not found"; result = OC_STACK_ERROR; } return result; }
TEST(OCGetLinkedStatusTest, NULLDeviceID) { OCUuidList_t *list = NULL; size_t noOfDevices = 0; EXPECT_EQ(OC_STACK_INVALID_PARAM, OCGetLinkedStatus(NULL, &list, &noOfDevices)); }
static int checkLinkedStatus(void) { // check |own_list| for checking selected link status on PRVN DB if(!g_own_list || 1>g_own_cnt) { printf(" > Owned Device List, to Check Linked Status on PRVN DB, is Empty\n"); printf(" > Please Register Unowned Devices first, with [20] Menu\n"); return 0; // normal case } // select device for checking selected link status on PRVN DB int dev_num = 0; for( ; ; ) { printf(" > Enter Device Number, for Checking Linked Status on PRVN DB: "); for(int ret=0; 1!=ret; ) { ret = scanf("%d", &dev_num); for( ; 0x20<=getchar(); ); // for removing overflow garbages // '0x20<=code' is character region } if(0<dev_num && g_own_cnt>=dev_num) { break; } printf(" Entered Wrong Number. Please Enter Again\n"); } // call |OCGetLinkedStatus| API actually printf(" Checking Selected Link Status on PRVN DB..\n"); OCUuidList_t* dvid_lst = NULL; size_t dvid_cnt = 0; OCProvisionDev_t* dev = getDevInst((const OCProvisionDev_t*)g_own_list, dev_num); if(!dev || !dev->doxm) { OIC_LOG(ERROR, TAG, "checkLinkedStatus: device instance empty"); goto CKLST_ERROR; } if(OC_STACK_OK != OCGetLinkedStatus( &dev->doxm->deviceID, &dvid_lst, &dvid_cnt)) // allow empty list { OIC_LOG(ERROR, TAG, "OCGetLinkedStatus API error"); goto CKLST_ERROR; } // display the linked status result printf(" > Checked Selected Link Status on PRVN DB\n"); if(!dvid_lst || !dvid_cnt) // |size_t| is unsigned { printf(" Linked Device List is Empty..\n"); return 0; // normal case } if(dvid_cnt != printUuidList((const OCUuidList_t*) dvid_lst)) { OIC_LOG(ERROR, TAG, "printUuidList error return"); goto CKLST_ERROR; } OCDeleteUuidList(dvid_lst); return 0; CKLST_ERROR: OCDeleteUuidList(dvid_lst); return -1; }