From 75258f7bbd5fa79cd82d16f5362dc81efba0512b Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Thu, 13 May 2021 14:34:29 -0700 Subject: [PATCH] Initial --- apikeys.db | 1 + build | 2 +- openapi/apikey.db | 2 +- openapi/ucentralfws.yaml | 2 + src/RESTAPI_objects.cpp | 5 +- src/RESTAPI_objects.h | 5 +- src/storage_firmwares.cpp | 97 ++++++++++++++++++++-------------- src/storage_latestfirmware.cpp | 44 +++++++-------- src/storage_tables.cpp | 12 +++-- src/uFWManager.cpp | 5 +- src/uNotificationMgr.cpp | 30 +++-------- src/uNotificationMgr.h | 2 +- src/uStorageService.h | 18 +++---- test_scripts/t1.sh | 2 +- 14 files changed, 120 insertions(+), 107 deletions(-) diff --git a/apikeys.db b/apikeys.db index 47bf2c0..0f78dec 100644 --- a/apikeys.db +++ b/apikeys.db @@ -1 +1,2 @@ 95551b278368a27de446365d12b5b51da791947cf39b15d9bd1111de6aa053d9:ALL:CI-John:CI Key for John's CI +59507518c956ac654dbb9a0c5fdbebe32d10c3f0aa68ae0e9000af89e03d4ad9:CALLBACK:tester1:Test home system diff --git a/build b/build index bf0d87a..62f9457 100644 --- a/build +++ b/build @@ -1 +1 @@ -4 \ No newline at end of file +6 \ No newline at end of file diff --git a/openapi/apikey.db b/openapi/apikey.db index b246146..a93dd5e 100644 --- a/openapi/apikey.db +++ b/openapi/apikey.db @@ -1,5 +1,5 @@ 0T1jZ0zO9fkvWI8pk722ZAeSKmqey1jiDXNafRlpdiy4lletCCaVAgWdSH5LD5f8:John'CI -t2dEOc88OIxVDb94mw7SLcLocgnCzZzzFoQ4JJv3OCU9UO6Ou5ds5Dh4CfBnHgrk +t2dEOc88OIxVDb94mw7SLcLocgnCzZzzFoQ4JJv3OCU9UO6Ou5ds5Dh4CfBnHgrk:Tester1 QC9xI7UjhM9WCZfG5CDbI07xiWRMnrHRphH6UNliz1d3i6XTeTMM5yLmVtpwwXuY g1wszktv1hMV6HRQqb62TAmfvY0WU0hm8INntr3pUf60xagj3OekIWQfeqJnvIwW 67rae5YeRJsbuOIJIKHl6zHtksuQBv4GDvnCjHO8QedQpBRWLeD2igJpYB9Pr3CN diff --git a/openapi/ucentralfws.yaml b/openapi/ucentralfws.yaml index a2b3840..ca8ac82 100644 --- a/openapi/ucentralfws.yaml +++ b/openapi/ucentralfws.yaml @@ -93,6 +93,8 @@ components: type: string s3uri: type: string + latest: + type: boolean FirmwareDetailsList: type: object diff --git a/src/RESTAPI_objects.cpp b/src/RESTAPI_objects.cpp index 1ad5671..0b67842 100644 --- a/src/RESTAPI_objects.cpp +++ b/src/RESTAPI_objects.cpp @@ -30,7 +30,8 @@ namespace uCentral::Objects { Obj.set("size", Size); Obj.set("digest", Digest); Obj.set("s3uri", S3URI); - Obj.set("deviceType", DeviceType); + Obj.set("Compatible", Compatible); + Obj.set("latest", (bool) (Latest ? true : false) ); EmbedDocument("firmwareLatestDoc",Obj,FirmwareLatestDoc); } @@ -64,7 +65,7 @@ namespace uCentral::Objects { } void LatestFirmware::to_json(Poco::JSON::Object &Obj) const { - Obj.set("deviceType", DeviceType); + Obj.set("Compatible", Compatible); Obj.set("uuid", UUID); Obj.set("lastUpdated", RESTAPIHandler::to_RFC3339(LastUpdated)); } diff --git a/src/RESTAPI_objects.h b/src/RESTAPI_objects.h index e6490a3..3e7de6d 100644 --- a/src/RESTAPI_objects.h +++ b/src/RESTAPI_objects.h @@ -36,7 +36,7 @@ namespace uCentral::Objects { std::string Description; std::string Owner; std::string Location; - std::string DeviceType; + std::string Compatible; std::string Uploader; std::string Digest; std::string FirmwareFileName; @@ -48,6 +48,7 @@ namespace uCentral::Objects { uint64_t Uploaded; uint64_t DownloadCount; uint64_t Size; + uint64_t Latest; void to_json(Poco::JSON::Object &Obj) const; }; @@ -66,7 +67,7 @@ namespace uCentral::Objects { }; struct LatestFirmware { - std::string DeviceType; + std::string Compatible; std::string UUID; uint64_t LastUpdated; void to_json(Poco::JSON::Object &Obj) const; diff --git a/src/storage_firmwares.cpp b/src/storage_firmwares.cpp index 9af815c..d387018 100644 --- a/src/storage_firmwares.cpp +++ b/src/storage_firmwares.cpp @@ -45,7 +45,7 @@ namespace uCentral::Storage { std::string FirmwareLatestDoc; std::string Owner; std::string Location; - std::string DeviceType; + std::string Compatible; std::string Uploader; std::string Digest; std::string S3URI; @@ -53,6 +53,7 @@ namespace uCentral::Storage { uint64_t Size; uint64_t Uploaded; uint64_t FirmwareDate; + uint64_t Latest; */ typedef Poco::Tuple< @@ -71,6 +72,7 @@ namespace uCentral::Storage { uint64_t, uint64_t, uint64_t, + uint64_t, uint64_t > FirmwareRecordTuple; typedef std::vector FirmwareRecordList; @@ -89,7 +91,7 @@ namespace uCentral::Storage { "Description VARCHAR(128), " "Owner VARCHAR(128), " "Location TEXT, ", - "DeviceType VARCHAR(128), " + "Compatible VARCHAR(128), " "Uploader VARCHAR(128), " "Digest TEXT, " "FirmwareFileName TEXT, " @@ -100,20 +102,32 @@ namespace uCentral::Storage { "FirmwareDate BIGINT, " "Uploaded BIGINT, " "DownloadCount BIGINT, " - "Size BIGINT, " + "Size BIGINT, + "Latest BIGINT" */ + + // find the older software and change to latest = 0 + if(F.Latest) + { + Poco::Data::Statement Update(Sess); + std::string st{"UPDATE Firmwares SET Latest=0 WHERE Compatible=? AND Latest=1"}; + Update << ConvertParams(st), + Poco::Data::Keywords::use(F.Compatible); + Update.execute(); + } + std::string st{"INSERT INTO Firmwares (" - "UUID, Description, Owner, Location, DeviceType, Uploader, Digest, " + "UUID, Description, Owner, Location, Compatible, Uploader, Digest, " "FirmwareFileName, FirmwareVersion, FirmwareHash, FirmwareLatestDoc, " - "S3URI, FirmwareDate, Uploaded, DownloadCount, Size " - ") VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"}; + "S3URI, FirmwareDate, Uploaded, DownloadCount, Size, Latest " + ") VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"}; Insert << ConvertParams(st), Poco::Data::Keywords::use(F.UUID), Poco::Data::Keywords::use(F.Description), Poco::Data::Keywords::use(F.Owner), Poco::Data::Keywords::use(F.Location), - Poco::Data::Keywords::use(F.DeviceType), + Poco::Data::Keywords::use(F.Compatible), Poco::Data::Keywords::use(F.Uploader), Poco::Data::Keywords::use(F.Digest), Poco::Data::Keywords::use(F.FirmwareFileName), @@ -124,7 +138,8 @@ namespace uCentral::Storage { Poco::Data::Keywords::use(F.FirmwareDate), Poco::Data::Keywords::use(F.Uploaded), Poco::Data::Keywords::use(F.DownloadCount), - Poco::Data::Keywords::use(F.Size); + Poco::Data::Keywords::use(F.Size), + Poco::Data::Keywords::use(F.Latest); Insert.execute(); FirmwareVersion_++; return true; @@ -141,16 +156,16 @@ namespace uCentral::Storage { Poco::Data::Statement Update(Sess); std::string st{"UPDATE Firmwares " - "Description, Owner, Location, DeviceType, Uploader, Digest, " - "FirmwareFileName, FirmwareVersion, FirmwareHash, FirmwareLatestDoc, " - "S3URI, FirmwareDate, Uploaded, DownloadCount, Size " + " Description, Owner, Location, Compatible, Uploader, Digest, " + " FirmwareFileName, FirmwareVersion, FirmwareHash, FirmwareLatestDoc, " + " S3URI, FirmwareDate, Uploaded, DownloadCount, Size" " WHERE UUID=?"}; Update << ConvertParams(st), Poco::Data::Keywords::use(F.Description), Poco::Data::Keywords::use(F.Owner), Poco::Data::Keywords::use(F.Location), - Poco::Data::Keywords::use(F.DeviceType), + Poco::Data::Keywords::use(F.Compatible), Poco::Data::Keywords::use(F.Uploader), Poco::Data::Keywords::use(F.Digest), Poco::Data::Keywords::use(F.FirmwareFileName), @@ -161,7 +176,7 @@ namespace uCentral::Storage { Poco::Data::Keywords::use(F.FirmwareDate), Poco::Data::Keywords::use(F.Uploaded), Poco::Data::Keywords::use(F.DownloadCount), - Poco::Data::Keywords::use(F.Size); + Poco::Data::Keywords::use(F.Size), Poco::Data::Keywords::use(F.UUID); Update.execute(); FirmwareVersion_++; @@ -198,29 +213,30 @@ namespace uCentral::Storage { Poco::Data::Statement Select(Sess); std::string st{"SELECT " - "UUID, Description, Owner, Location, DeviceType, Uploader, Digest, " + "UUID, Description, Owner, Location, Compatible, Uploader, Digest, " "FirmwareFileName, FirmwareVersion, FirmwareHash, FirmwareLatestDoc, " - "S3URI, FirmwareDate, Uploaded, DownloadCount, Size " + "S3URI, FirmwareDate, Uploaded, DownloadCount, Size, Latest " " FROM Firmwares WHERE UUID=?"}; Select << ConvertParams(st), - Poco::Data::Keywords::into(F.UUID), - Poco::Data::Keywords::into(F.Description), - Poco::Data::Keywords::into(F.Owner), - Poco::Data::Keywords::into(F.Location), - Poco::Data::Keywords::into(F.DeviceType), - Poco::Data::Keywords::into(F.Uploader), - Poco::Data::Keywords::into(F.Digest), - Poco::Data::Keywords::into(F.FirmwareFileName), - Poco::Data::Keywords::into(F.FirmwareVersion), - Poco::Data::Keywords::into(F.FirmwareHash), - Poco::Data::Keywords::into(F.FirmwareLatestDoc), - Poco::Data::Keywords::into(F.S3URI), - Poco::Data::Keywords::into(F.FirmwareDate), - Poco::Data::Keywords::into(F.Uploaded), - Poco::Data::Keywords::into(F.DownloadCount), - Poco::Data::Keywords::into(F.Size); - Poco::Data::Keywords::use(UUID); + Poco::Data::Keywords::into(F.UUID), + Poco::Data::Keywords::into(F.Description), + Poco::Data::Keywords::into(F.Owner), + Poco::Data::Keywords::into(F.Location), + Poco::Data::Keywords::into(F.Compatible), + Poco::Data::Keywords::into(F.Uploader), + Poco::Data::Keywords::into(F.Digest), + Poco::Data::Keywords::into(F.FirmwareFileName), + Poco::Data::Keywords::into(F.FirmwareVersion), + Poco::Data::Keywords::into(F.FirmwareHash), + Poco::Data::Keywords::into(F.FirmwareLatestDoc), + Poco::Data::Keywords::into(F.S3URI), + Poco::Data::Keywords::into(F.FirmwareDate), + Poco::Data::Keywords::into(F.Uploaded), + Poco::Data::Keywords::into(F.DownloadCount), + Poco::Data::Keywords::into(F.Size), + Poco::Data::Keywords::into(F.Latest), + Poco::Data::Keywords::use(UUID); Select.execute(); return !F.UUID.empty(); @@ -238,9 +254,9 @@ namespace uCentral::Storage { Poco::Data::Statement Select(Sess); std::string st{"SELECT " - "UUID, Description, Owner, Location, DeviceType, Uploader, Digest, " + "UUID, Description, Owner, Location, Compatible, Uploader, Digest, " "FirmwareFileName, FirmwareVersion, FirmwareHash, FirmwareLatestDoc, " - "S3URI, FirmwareDate, Uploaded, DownloadCount, Size " + "S3URI, FirmwareDate, Uploaded, DownloadCount, Size, Latest " " FROM Firmwares"}; Select << ConvertParams(st), @@ -254,7 +270,7 @@ namespace uCentral::Storage { .Description= i.get<1>(), .Owner= i.get<2>(), .Location= i.get<3>(), - .DeviceType= i.get<4>(), + .Compatible= i.get<4>(), .Uploader= i.get<5>(), .Digest= i.get<6>(), .FirmwareFileName= i.get<7>(), @@ -265,7 +281,8 @@ namespace uCentral::Storage { .FirmwareDate= i.get<12>(), .Uploaded= i.get<13>(), .DownloadCount= i.get<14>(), - .Size= i.get<15>() + .Size= i.get<15>(), + .Latest = (bool) (i.get<16>()!=0) }; Firmwares.push_back(F); } @@ -280,7 +297,7 @@ namespace uCentral::Storage { /* - "DeviceType VARCHAR(128), " + "Compatible VARCHAR(128), " "Uploader VARCHAR(128), " "FirmwareVersion VARCHAR(128), " "S3URI TEXT )", @@ -296,6 +313,7 @@ namespace uCentral::Storage { std::string, uint64_t, uint64_t, + uint64_t, uint64_t > FirmwareManifestTuple; typedef std::vector FirmwareManifestList; @@ -308,7 +326,7 @@ namespace uCentral::Storage { Poco::Data::Session Sess = Pool_->get(); Poco::Data::Statement Select(Sess); - std::string st{"SELECT DeviceType,Uploader,FirmwareVersion,S3URI,Uploaded,Size,FirmwareDate FROM Firmwares"}; + std::string st{"SELECT Compatible,Uploader,FirmwareVersion,S3URI,Uploaded,Size,FirmwareDate,Latest FROM Firmwares"}; Select << ConvertParams(st), Poco::Data::Keywords::into(Records); @@ -318,13 +336,14 @@ namespace uCentral::Storage { for(const auto &i:Records) { Poco::JSON::Object Obj; - Obj.set("deviceType", i.get<0>()); + Obj.set("compatible", i.get<0>()); Obj.set("uploader",i.get<1>()); Obj.set("version",i.get<2>()); Obj.set("uri",i.get<3>()); Obj.set("uploaded",RESTAPIHandler::to_RFC3339(i.get<4>())); Obj.set("size",i.get<5>()); Obj.set("date", RESTAPIHandler::to_RFC3339(i.get<6>())); + Obj.set("latest", (bool) (i.get<7>() != 0)); Elements.add(Obj); } diff --git a/src/storage_latestfirmware.cpp b/src/storage_latestfirmware.cpp index ad221f4..d437fc8 100644 --- a/src/storage_latestfirmware.cpp +++ b/src/storage_latestfirmware.cpp @@ -6,16 +6,16 @@ namespace uCentral::Storage { - bool AddLatestFirmware(std::string & DeviceType, std::string &UUID) { - return Service::instance()->AddLatestFirmware(DeviceType, UUID); + bool AddLatestFirmware(std::string & Compatible, std::string &UUID) { + return Service::instance()->AddLatestFirmware(Compatible, UUID); } - bool GetLatestFirmware(std::string & DeviceType, uCentral::Objects::LatestFirmware &L) { - return Service::instance()->GetLatestFirmware(DeviceType, L); + bool GetLatestFirmware(std::string & Compatible, uCentral::Objects::LatestFirmware &L) { + return Service::instance()->GetLatestFirmware(Compatible, L); } - bool DeleteLatestFirmware(std::string & DeviceType) { - return Service::instance()->DeleteLatestFirmware(DeviceType); + bool DeleteLatestFirmware(std::string & Compatible) { + return Service::instance()->DeleteLatestFirmware(Compatible); } bool GetLatestFirmwareList(uint64_t From, uint64_t HowMany, std::vector & LatestFirmwareList) { @@ -28,36 +28,36 @@ namespace uCentral::Storage { uint64_t> LatestFirmwareRecordTuple; typedef std::vector LatestFirmwareRecordList; - bool Service::AddLatestFirmware(std::string & DeviceType, std::string &UUID) { + bool Service::AddLatestFirmware(std::string & Compatible, std::string &UUID) { try { Poco::Data::Session Sess = Pool_->get(); Poco::Data::Statement Select(Sess); std::string TmpUUID; - std::string st{"SELECT UUID From LatestFirmwares WHERE DeviceType=?"}; + std::string st{"SELECT UUID From LatestFirmwares WHERE Compatible=?"}; Select << ConvertParams(st) , Poco::Data::Keywords::into(TmpUUID), - Poco::Data::Keywords::use(DeviceType); + Poco::Data::Keywords::use(Compatible); Select.execute(); uint64_t LastUpdated = time(nullptr); if(TmpUUID.empty()) { Poco::Data::Statement Insert(Sess); - std::string st1{"INSERT INTO LatestFirmwares (DeviceType, UUID, LastUpdated) VALUES(?,?,?)"}; + std::string st1{"INSERT INTO LatestFirmwares (Compatible, UUID, LastUpdated) VALUES(?,?,?)"}; Insert << ConvertParams(st1), - Poco::Data::Keywords::use(DeviceType), + Poco::Data::Keywords::use(Compatible), Poco::Data::Keywords::use(UUID), Poco::Data::Keywords::use(LastUpdated); Insert.execute(); } else { Poco::Data::Statement Update(Sess); - std::string st1{"UPDATE LatestFirmwares SET UUID=?, LastUpdated=? WHERE DeviceType=?"}; + std::string st1{"UPDATE LatestFirmwares SET UUID=?, LastUpdated=? WHERE Compatible=?"}; Update << ConvertParams(st1), Poco::Data::Keywords::use(UUID), Poco::Data::Keywords::use(LastUpdated), - Poco::Data::Keywords::use(DeviceType); + Poco::Data::Keywords::use(Compatible); Update.execute(); } return true; @@ -67,19 +67,19 @@ namespace uCentral::Storage { return false; } - bool Service::GetLatestFirmware(std::string & DeviceType, uCentral::Objects::LatestFirmware &L) { + bool Service::GetLatestFirmware(std::string & Compatible, uCentral::Objects::LatestFirmware &L) { try { Poco::Data::Session Sess = Pool_->get(); Poco::Data::Statement Select(Sess); std::string TmpUUID; - std::string st{"SELECT DeviceType, UUID, LastUpdated From LatestFirmwares WHERE DeviceType=?"}; + std::string st{"SELECT Compatible, UUID, LastUpdated From LatestFirmwares WHERE Compatible=?"}; Select << ConvertParams(st) , - Poco::Data::Keywords::into(L.DeviceType), + Poco::Data::Keywords::into(L.Compatible), Poco::Data::Keywords::into(L.UUID), Poco::Data::Keywords::into(L.LastUpdated), - Poco::Data::Keywords::use(DeviceType); + Poco::Data::Keywords::use(Compatible); Select.execute(); return !L.UUID.empty(); @@ -90,16 +90,16 @@ namespace uCentral::Storage { return false; } - bool Service::DeleteLatestFirmware(std::string & DeviceType) { + bool Service::DeleteLatestFirmware(std::string & Compatible) { try { Poco::Data::Session Sess = Pool_->get(); Poco::Data::Statement Delete(Sess); std::string TmpUUID; - std::string st{"DELETE From LatestFirmwares WHERE DeviceType=?"}; + std::string st{"DELETE From LatestFirmwares WHERE Compatible=?"}; Delete << ConvertParams(st), - Poco::Data::Keywords::use(DeviceType); + Poco::Data::Keywords::use(Compatible); Delete.execute(); return true; } catch (const Poco::Exception &E) { @@ -114,7 +114,7 @@ namespace uCentral::Storage { Poco::Data::Session Sess = Pool_->get(); Poco::Data::Statement Select(Sess); - std::string st{"SELECT DeviceType, UUID FROM LatestFirmwares"}; + std::string st{"SELECT Compatible, UUID FROM LatestFirmwares"}; Select << ConvertParams(st), Poco::Data::Keywords::into(Records), @@ -123,7 +123,7 @@ namespace uCentral::Storage { for(const auto &i:Records) { uCentral::Objects::LatestFirmware L{ - .DeviceType = i.get<0>(), + .Compatible = i.get<0>(), .UUID = i.get<1>() }; LatestFirmwareList.push_back(L); diff --git a/src/storage_tables.cpp b/src/storage_tables.cpp index 9794342..2fc7a09 100644 --- a/src/storage_tables.cpp +++ b/src/storage_tables.cpp @@ -44,7 +44,7 @@ namespace uCentral::Storage { location: type: string format: uri - deviceType: + Compatible: type: string downloadCount: type: integer @@ -69,7 +69,7 @@ namespace uCentral::Storage { "Description VARCHAR(128), " "Owner VARCHAR(128), " "Location TEXT, " - "DeviceType VARCHAR(128), " + "Compatible VARCHAR(128), " "Uploader VARCHAR(128), " "Uploaded BIGINT, " "DownloadCount BIGINT, " @@ -80,7 +80,9 @@ namespace uCentral::Storage { "FirmwareVersion VARCHAR(128), " "FirmwareHash VARCHAR(32), " "FirmwareLatestDoc TEXT, " - "S3URI TEXT )", + "S3URI TEXT, " + "Latest BIGINT" + ")", Poco::Data::Keywords::now; return 0; } catch(const Poco::Exception &E) { @@ -143,7 +145,7 @@ namespace uCentral::Storage { LatestFirmware: type: object properties: - deviceType: + Compatible: type: string uuid: type: string @@ -157,7 +159,7 @@ namespace uCentral::Storage { Poco::Data::Session Sess = Pool_->get(); Sess << "CREATE TABLE IF NOT EXISTS LatestFirmwares (" - "DeviceType VARCHAR(128) PRIMARY KEY, " + "Compatible VARCHAR(128) PRIMARY KEY, " "UUID TEXT, " "LastUpdated BIGINT" ")", diff --git a/src/uFWManager.cpp b/src/uFWManager.cpp index dbd3c5c..2ae18f3 100644 --- a/src/uFWManager.cpp +++ b/src/uFWManager.cpp @@ -96,7 +96,7 @@ namespace uCentral::FWManager { } try { - Poco::File JSONFileName(Path + "/" + JobEntry.UUID + "/latest.json"); + Poco::File JSONFileName(Path + "/" + JobEntry.UUID + "/latest-upgrade.json"); if (JSONFileName.exists() && JSONFileName.isFile()) { std::ifstream in(JSONFileName.path(),std::ios_base::in); @@ -130,11 +130,12 @@ namespace uCentral::FWManager { F.Size = ImageFileName.getSize(); F.DownloadCount = 0; F.Uploaded = time(nullptr); - F.DeviceType = ds["compatible"].toString(); + F.Compatible = ds["compatible"].toString(); F.FirmwareVersion = ds["revision"].toString(); F.FirmwareFileName = ds["image"].toString(); F.Uploader = JobEntry.Entry.Description; F.S3URI = "https://s3-" + S3Region_ + ".amazonaws.com/" + S3BucketName_ + "/" + ImageName; + F.Latest = 1; if(uCentral::Storage::AddFirmware(F)) { Logger_.information( diff --git a/src/uNotificationMgr.cpp b/src/uNotificationMgr.cpp index 524393b..e03dfe2 100644 --- a/src/uNotificationMgr.cpp +++ b/src/uNotificationMgr.cpp @@ -1,6 +1,8 @@ // // Created by stephane bourque on 2021-05-11. // +#include +#include #include "uNotificationMgr.h" #include "uStorageService.h" @@ -66,17 +68,12 @@ namespace uCentral::NotificationMgr { Updated_ = false; if(uCentral::Storage::FirmwareVersion()!=ManifestVersion_) { - Poco::JSON::Object Manifest; - uCentral::Storage::BuildFirmwareManifest(Manifest, ManifestVersion_); + uCentral::Storage::BuildFirmwareManifest(Manifest, ManifestVersion_); std::stringstream OS; Poco::JSON::Stringifier stringifier; - stringifier.condense(Manifest, OS); - - std::cout << "Manifest" << std::endl; - std::cout << OS.str() << std::endl; CurrentManifest_ = OS.str(); } @@ -96,6 +93,10 @@ namespace uCentral::NotificationMgr { std::vector Callbacks; + std::ofstream File( "latest_manifest.json" , std::ofstream::out | std::ofstream::trunc); + File << CurrentManifest_; + File.close(); + // build the list of callbacks or update the existing callers. if(uCentral::Storage::GetCallbacks(0,200,Callbacks)) { for(const auto & i:Callbacks) { @@ -112,18 +113,12 @@ namespace uCentral::NotificationMgr { } } - std::cout << __LINE__ << std::endl; - if(EndPoints_.empty()) return; - std::cout << __LINE__ << std::endl; for(auto & host:EndPoints_) { - std::cout << __LINE__ << std::endl; if(host.second.LastVersion!=ManifestVersion_) { - std::cout << __LINE__ << std::endl; if(SendManifest(host.second.Caller)) { - std::cout << __LINE__ << std::endl; host.second.LastVersion = ManifestVersion_; host.second.LasContact = time(nullptr); } @@ -133,19 +128,12 @@ namespace uCentral::NotificationMgr { bool DoRequest(Poco::Net::HTTPSClientSession& Session, Poco::Net::HTTPRequest& Request, Poco::Net::HTTPResponse& Response, const std::string & Doc) { - std::cout << __LINE__ << std::endl; std::stringstream Body(Doc); Request.setContentType("application/json"); - std::cout << __LINE__ << std::endl; Request.setContentLength(Doc.length()); - std::cout << __LINE__ << std::endl; std::ostream& OS = Session.sendRequest(Request); - std::cout << __LINE__ << std::endl; - // Poco::StreamCopier::copyStream(Body, OS); - std::cout << __LINE__ << " Wrote bytes:" << Poco::StreamCopier::copyStream(Body, OS) << std::endl; - + Poco::StreamCopier::copyStream(Body, OS); Session.receiveResponse(Response); - std::cout << __LINE__ << std::endl; return (Response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK); } @@ -160,8 +148,6 @@ namespace uCentral::NotificationMgr { Uri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1); Request.add("X-API-KEY", Host.Token); - std::cout << __LINE__ << Uri.toString() << std::endl; - Poco::Net::HTTPResponse Response; return DoRequest(Session, Request, Response, CurrentManifest_); } diff --git a/src/uNotificationMgr.h b/src/uNotificationMgr.h index 7332f3a..cb81139 100644 --- a/src/uNotificationMgr.h +++ b/src/uNotificationMgr.h @@ -48,7 +48,7 @@ namespace uCentral::NotificationMgr { std::map EndPoints_; std::string CurrentManifest_; - uint64_t ManifestVersion_; + uint64_t ManifestVersion_=0; int Start() override; void Stop() override; diff --git a/src/uStorageService.h b/src/uStorageService.h index f8e5ad0..ebe9d9f 100644 --- a/src/uStorageService.h +++ b/src/uStorageService.h @@ -37,9 +37,9 @@ namespace uCentral::Storage { bool BuildFirmwareManifest(Poco::JSON::Object & Manifest, uint64_t &Version); uint64_t FirmwareVersion(); - bool AddLatestFirmware(std::string & DeviceType, std::string &UUID); - bool GetLatestFirmware(std::string & DeviceType, uCentral::Objects::LatestFirmware &L); - bool DeleteLatestFirmware(std::string & DeviceType); + bool AddLatestFirmware(std::string & Compatible, std::string &UUID); + bool GetLatestFirmware(std::string & Compatible, uCentral::Objects::LatestFirmware &L); + bool DeleteLatestFirmware(std::string & Compatible); bool GetLatestFirmwareList(uint64_t From, uint64_t HowMany, std::vector & LatestFirmwareList); @@ -67,9 +67,9 @@ namespace uCentral::Storage { friend bool GetFirmware(std::string & UUID, uCentral::Objects::Firmware & C); friend bool GetFirmwares(uint64_t From, uint64_t HowMany, std::vector & Firmwares); - friend bool AddLatestFirmware(std::string & DeviceType, std::string &UUID); - friend bool GetLatestFirmware(std::string & DeviceType, uCentral::Objects::LatestFirmware &L); - friend bool DeleteLatestFirmware(std::string & DeviceType); + friend bool AddLatestFirmware(std::string & Compatible, std::string &UUID); + friend bool GetLatestFirmware(std::string & Compatible, uCentral::Objects::LatestFirmware &L); + friend bool DeleteLatestFirmware(std::string & Compatible); friend bool GetLatestFirmwareList(uint64_t From, uint64_t HowMany, std::vector & LatestFirmwareList); @@ -106,9 +106,9 @@ namespace uCentral::Storage { bool BuildFirmwareManifest(Poco::JSON::Object & Manifest, uint64_t & Version); uint64_t FirmwareVersion(); - bool AddLatestFirmware(std::string & DeviceType, std::string &UUID); - bool GetLatestFirmware(std::string & DeviceType, uCentral::Objects::LatestFirmware &L); - bool DeleteLatestFirmware(std::string & DeviceType); + bool AddLatestFirmware(std::string & Compatible, std::string &UUID); + bool GetLatestFirmware(std::string & Compatible, uCentral::Objects::LatestFirmware &L); + bool DeleteLatestFirmware(std::string & Compatible); bool GetLatestFirmwareList(uint64_t From, uint64_t HowMany, std::vector & LatestFirmwareList); int Start() override; diff --git a/test_scripts/t1.sh b/test_scripts/t1.sh index e60c700..a4e098c 100755 --- a/test_scripts/t1.sh +++ b/test_scripts/t1.sh @@ -3,6 +3,6 @@ key="0T1jZ0zO9fkvWI8pk722ZAeSKmqey1jiDXNafRlpdiy4lletCCaVAgWdSH5LD5f8" curl -v -H "X-API-KEY: $key" \ - -F upload=@latest.json \ + -F upload=@latest-upgrade.json \ -F upload=@20210508-linksys_ea8300-uCentral-trunk-43e1a2d-upgrade.bin \ https://local.dpaas.arilia.com:15065