Files
archived-wlan-cloud-ucentra…/src/LatestFirmwareCache.cpp

97 lines
2.6 KiB
C++

//
// Created by stephane bourque on 2021-07-13.
//
#include "LatestFirmwareCache.h"
#include "StorageService.h"
namespace OpenWifi {
int LatestFirmwareCache::Start() {
StorageService()->FirmwaresDB().PopulateLatestFirmwareCache();
return 0;
}
void LatestFirmwareCache::Stop() {
}
bool LatestFirmwareCache::AddToCache(const std::string & DeviceType, const std::string &Revision, const std::string &Id, uint64_t TimeStamp) {
std::lock_guard G(Mutex_);
RevisionSet_.insert(Revision);
DeviceSet_.insert(DeviceType);
auto E = Cache_.find(DeviceType);
if((E==Cache_.end()) || (TimeStamp >= E->second.TimeStamp)) {
Cache_[DeviceType] = LatestFirmwareCacheEntry{
.Id=Id,
.TimeStamp=TimeStamp,
.Revision=Revision};
}
if(!IsRC(Revision))
return true;
auto rcE = rcCache_.find(DeviceType);
if((rcE==rcCache_.end()) || (TimeStamp >= rcE->second.TimeStamp)) {
rcCache_[DeviceType] = LatestFirmwareCacheEntry{
.Id=Id,
.TimeStamp=TimeStamp,
.Revision=Revision};
}
return true;
}
bool LatestFirmwareCache::FindLatestFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry ) {
std::lock_guard G(Mutex_);
auto E=Cache_.find(DeviceType);
if(E!=Cache_.end()) {
Entry = E->second;
return true;
}
return false;
}
bool LatestFirmwareCache::FindLatestRCOnlyFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry ) {
std::lock_guard G(Mutex_);
auto E=rcCache_.find(DeviceType);
if(E!=rcCache_.end()) {
Entry = E->second;
return true;
}
return false;
}
bool LatestFirmwareCache::IsLatest(const std::string &DeviceType, const std::string &Revision) {
std::lock_guard G(Mutex_);
auto E=Cache_.find(DeviceType);
if(E!=Cache_.end()) {
return E->second.Revision==Revision;
}
return false;
}
bool LatestFirmwareCache::IsLatestRCOnly(const std::string &DeviceType, const std::string &Revision) {
std::lock_guard G(Mutex_);
auto E=rcCache_.find(DeviceType);
if(E!=rcCache_.end()) {
return E->second.Revision==Revision;
}
return false;
}
void LatestFirmwareCache::DumpCache() {
std::lock_guard G(Mutex_);
for( auto &[Id,E]:Cache_) {
std::cout << "Device: " << Id << " ID:" << E.Id << std::endl;
}
}
}