/** * Initialize pstat resource by loading data from persistent storage. * * @retval OC_STACK_OK for Success, otherwise some error value */ OCStackResult InitPstatResource() { OCStackResult ret = OC_STACK_ERROR; // Read Pstat resource from PS char* jsonSVRDatabase = GetSVRDatabase(); if (jsonSVRDatabase) { // Convert JSON Pstat into binary format gPstat = JSONToPstatBin(jsonSVRDatabase, true); } /* * If SVR database in persistent storage got corrupted or * is not available for some reason, a default pstat is created * which allows user to initiate pstat provisioning again. */ if(!jsonSVRDatabase || !gPstat) { gPstat = GetPstatDefault(); } // Instantiate 'oic.sec.pstat' ret = CreatePstatResource(); OICFree(jsonSVRDatabase); return ret; }
OCStackResult InitPstatResource() { OCStackResult ret = OC_STACK_ERROR; // Read Pstat resource from PS uint8_t *data = NULL; size_t size = 0; OicUuid_t emptyUuid = {.id={0}}; ret = GetSecureVirtualDatabaseFromPS(OIC_JSON_PSTAT_NAME, &data, &size); // If database read failed if (OC_STACK_OK != ret) { OIC_LOG (DEBUG, TAG, "ReadSVDataFromPS failed"); } if (data) { // Read ACL resource from PS ret = CBORPayloadToPstat(data, size, &gPstat); OICFree(data); } /* * If SVR database in persistent storage got corrupted or * is not available for some reason, a default pstat is created * which allows user to initiate pstat provisioning again. */ if ((OC_STACK_OK != ret) || !gPstat) { gPstat = GetPstatDefault(); } VERIFY_NON_NULL(TAG, gPstat, FATAL); //In case of Pstat's device id is empty, fill the device id as doxm's device id. if(0 == memcmp(&gPstat->deviceID, &emptyUuid, sizeof(OicUuid_t))) { OicUuid_t doxmUuid = {.id={0}}; if(OC_STACK_OK == GetDoxmDeviceID(&doxmUuid)) { memcpy(&gPstat->deviceID, &doxmUuid, sizeof(OicUuid_t)); } }