host-bmc PDR flow: support refreshEntireRepository

Support the refreshEntireRepository format of the
pldmPDRRepositoryChgEvent event, to fetch all PDRs of the host.

Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Change-Id: Ic91806e35c34b6fb9421df6be7e801d0c8c7c866
diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index 3c8d54e..f8594d6 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -85,7 +85,7 @@
         });
 }
 
-void HostPDRHandler::fetchPDR(std::vector<uint32_t>&& recordHandles)
+void HostPDRHandler::fetchPDR(PDRRecordHandles&& recordHandles)
 {
     pdrRecordHandles.clear();
     pdrRecordHandles = std::move(recordHandles);
@@ -107,7 +107,17 @@
     auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
     bool merged = false;
 
-    for (auto recordHandle : pdrRecordHandles)
+    uint32_t nextRecordHandle{};
+    uint32_t recordHandle{};
+    bool isFormatRecHandles = false;
+    if (!pdrRecordHandles.empty())
+    {
+        recordHandle = pdrRecordHandles.front();
+        pdrRecordHandles.pop_front();
+        isFormatRecHandles = true;
+    }
+
+    do
     {
         auto instanceId = requester.getInstanceId(mctp_eid);
 
@@ -138,7 +148,6 @@
         }
 
         uint8_t completionCode{};
-        uint32_t nextRecordHandle{};
         uint32_t nextDataTransferHandle{};
         uint8_t transferFlag{};
         uint16_t respCount{};
@@ -194,8 +203,19 @@
                     pldm_pdr_add(repo, pdr.data(), respCount, 0, true);
                 }
             }
+
+            recordHandle = nextRecordHandle;
+            if (!pdrRecordHandles.empty())
+            {
+                recordHandle = pdrRecordHandles.front();
+                pdrRecordHandles.pop_front();
+            }
+            else if (isFormatRecHandles)
+            {
+                break;
+            }
         }
-    }
+    } while (recordHandle);
 
     if (merged)
     {