mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralfms.git
synced 2026-03-20 03:40:59 +00:00
97 lines
2.6 KiB
C++
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;
|
|
}
|
|
|
|
}
|
|
} |