+
+void CAResetBlockDataTTL(const CABlockDataID_t *blockID)
+{
+ OIC_LOG_V(DEBUG, TAG, "In %s", __func__);
+
+ oc_mutex_lock(g_context.blockDataListMutex);
+ size_t len = u_arraylist_length(g_context.dataList);
+ for (size_t i = 0; i < len; i++)
+ {
+ CABlockData_t *blockData = (CABlockData_t *) u_arraylist_get(g_context.dataList, i);
+ if (CABlockidMatches(blockData, blockID))
+ {
+ uint64_t now = OICGetCurrentTime(TIME_IN_US);
+ blockData->ttl = now + (BLOCK_DATA_TIMEOUT_SECONDS * USECS_PER_SEC);
+ oc_mutex_unlock(g_context.blockDataListMutex);
+ OIC_LOG_V(DEBUG, TAG, "Out %s", __func__);
+ return;
+ }
+ }
+ oc_mutex_unlock(g_context.blockDataListMutex);
+ OIC_LOG_V(DEBUG, TAG, "Out %s", __func__);
+}
+
+void CACheckAndDeleteTimedOutBlockData()
+{
+ OIC_LOG_V(DEBUG, TAG, "In %s", __func__);
+
+ uint64_t now = OICGetCurrentTime(TIME_IN_US);
+
+ oc_mutex_lock(g_context.blockDataListMutex);
+ for (size_t i = 0; i < u_arraylist_length(g_context.dataList); i++)
+ {
+ CABlockData_t *blockData = (CABlockData_t *) u_arraylist_get(g_context.dataList, i);
+ if (blockData && blockData->ttl < now)
+ {
+ OIC_LOG(INFO, TAG, "Deleting timed-out BlockData");
+ OIC_LOG(DEBUG, TAG, "BlockID is ");
+ OIC_LOG_BUFFER(DEBUG, TAG, (const uint8_t *) blockData->blockDataId->id,
+ blockData->blockDataId->idLength);
+
+ blockData = (CABlockData_t *) u_arraylist_remove(g_context.dataList, i);
+ if (blockData)
+ {
+ // destroy memory
+ CADestroyDataSet(blockData->sentData);
+ CADestroyBlockID(blockData->blockDataId);
+ OICFree(blockData->payload);
+ OICFree(blockData);
+ }
+ }
+ }
+ oc_mutex_unlock(g_context.blockDataListMutex);
+ OIC_LOG_V(DEBUG, TAG, "Out %s", __func__);
+}