1*ee2bd8adSUnive Tien #include "aggregate_update_manager.hpp"
2*ee2bd8adSUnive Tien
3*ee2bd8adSUnive Tien namespace pldm::fw_update
4*ee2bd8adSUnive Tien {
5*ee2bd8adSUnive Tien
handleRequest(mctp_eid_t eid,uint8_t command,const pldm_msg * request,size_t reqMsgLen)6*ee2bd8adSUnive Tien Response AggregateUpdateManager::handleRequest(
7*ee2bd8adSUnive Tien mctp_eid_t eid, uint8_t command, const pldm_msg* request, size_t reqMsgLen)
8*ee2bd8adSUnive Tien {
9*ee2bd8adSUnive Tien Response response;
10*ee2bd8adSUnive Tien response = UpdateManager::handleRequest(eid, command, request, reqMsgLen);
11*ee2bd8adSUnive Tien auto responseMsg = new (response.data()) pldm_msg;
12*ee2bd8adSUnive Tien if (responseMsg->payload[0] != PLDM_FWUP_COMMAND_NOT_EXPECTED)
13*ee2bd8adSUnive Tien {
14*ee2bd8adSUnive Tien return response;
15*ee2bd8adSUnive Tien }
16*ee2bd8adSUnive Tien for (auto& [_, updateManager] : updateManagers)
17*ee2bd8adSUnive Tien {
18*ee2bd8adSUnive Tien response =
19*ee2bd8adSUnive Tien updateManager->handleRequest(eid, command, request, reqMsgLen);
20*ee2bd8adSUnive Tien if (responseMsg->payload[0] != PLDM_FWUP_COMMAND_NOT_EXPECTED)
21*ee2bd8adSUnive Tien {
22*ee2bd8adSUnive Tien return response;
23*ee2bd8adSUnive Tien }
24*ee2bd8adSUnive Tien }
25*ee2bd8adSUnive Tien return response;
26*ee2bd8adSUnive Tien }
27*ee2bd8adSUnive Tien
eraseUpdateManager(const SoftwareIdentifier & softwareIdentifier)28*ee2bd8adSUnive Tien void AggregateUpdateManager::eraseUpdateManager(
29*ee2bd8adSUnive Tien const SoftwareIdentifier& softwareIdentifier)
30*ee2bd8adSUnive Tien {
31*ee2bd8adSUnive Tien updateManagers.erase(softwareIdentifier);
32*ee2bd8adSUnive Tien descriptorMap.erase(softwareIdentifier);
33*ee2bd8adSUnive Tien componentInfoMap.erase(softwareIdentifier);
34*ee2bd8adSUnive Tien }
35*ee2bd8adSUnive Tien
eraseUpdateManagerIf(std::function<bool (const SoftwareIdentifier &)> && predicate)36*ee2bd8adSUnive Tien void AggregateUpdateManager::eraseUpdateManagerIf(
37*ee2bd8adSUnive Tien std::function<bool(const SoftwareIdentifier&)>&& predicate)
38*ee2bd8adSUnive Tien {
39*ee2bd8adSUnive Tien for (auto it = updateManagers.begin(); it != updateManagers.end();)
40*ee2bd8adSUnive Tien {
41*ee2bd8adSUnive Tien if (predicate(it->first))
42*ee2bd8adSUnive Tien {
43*ee2bd8adSUnive Tien descriptorMap.erase(it->first);
44*ee2bd8adSUnive Tien componentInfoMap.erase(it->first);
45*ee2bd8adSUnive Tien it = updateManagers.erase(it);
46*ee2bd8adSUnive Tien }
47*ee2bd8adSUnive Tien else
48*ee2bd8adSUnive Tien {
49*ee2bd8adSUnive Tien ++it;
50*ee2bd8adSUnive Tien }
51*ee2bd8adSUnive Tien }
52*ee2bd8adSUnive Tien }
53*ee2bd8adSUnive Tien
54*ee2bd8adSUnive Tien } // namespace pldm::fw_update
55