OCStackResult OCSecureResource::provisionACL( const OicSecAcl_t* acl, ResultCallBack resultCallback) { if(!resultCallback || !acl) { oclog() <<"Result callback or ACL 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 = OCProvisionACL(static_cast<void*>(context), devPtr, const_cast<OicSecAcl_t*>(acl), &OCSecureResource::callbackWrapper); } else { oclog() <<"Mutex not found"; result = OC_STACK_ERROR; } return result; }
static int provisionAcl(void) { // check |own_list| for provisioning access control list if(!g_own_list || 1>g_own_cnt) { printf(" > Owned Device List, to Provision ACL, is Empty\n"); printf(" > Please Register Unowned Devices first, with [20] Menu\n"); return 0; // normal case } // select device for provisioning access control list int dev_num = 0; for( ; ; ) { printf(" > Enter Device Number, for Provisioning ACL: "); 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"); } // create ACL for selected device OicSecAcl_t* acl = NULL; acl = createAcl(dev_num); if(!acl) { OIC_LOG(ERROR, TAG, "createAcl error return"); goto PVACL_ERROR; } // call |OCProvisionACL| 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 ACL..\n"); OCProvisionDev_t* dev = getDevInst((const OCProvisionDev_t*) g_own_list, dev_num); if(!dev) { OIC_LOG(ERROR, TAG, "provisionAcl: device instance empty"); goto PVACL_ERROR; } OCStackResult rst = OCProvisionACL((void*) g_ctx, dev, acl, provisionAclCB); if(OC_STACK_OK != rst) { OIC_LOG_V(ERROR, TAG, "OCProvisionACL API error: %d", rst); goto PVACL_ERROR; } if(waitCallbackRet()) // input |g_doneCB| flag implicitly { OIC_LOG(ERROR, TAG, "OCProvisionCredentials callback error"); goto PVACL_ERROR; } OCDeleteACLList(acl); // after here |acl| points nothing // display the ACL-provisioned result printf(" > Provisioned Selected ACL\n"); return 0; PVACL_ERROR: OCDeleteACLList(acl); // after here |acl| points nothing return -1; }