pldm: Refector PDR repo based on the new PDR APIs

The related APIs for PDR operations is implemented in
pldm/libpldm/pdr.h and pldm/libpldm/pdr.c, we need to use this instead
of pdr::Repo(defined in libpldmresponder/pdr.hpp).
pdr::Repo is now a C++ wrapper around the PDR APIs in libpldm.

Tested with unit tests, with JSON files:
 https://gist.github.com/lxwinspur/2c3fd68cdb35e06480c4a5f7890e3a06#file-effecter_pdr-json.

 $ pldmtool platform GetPDR -d 0
 Encode request successfully
 Request Message:
 08 01 80 02 51 00 00 00 00 00 00 00 00 01 80 00 00 00
 Success in creating the socket : RC = 3
 Success in connecting to socket : RC = 0
 Success in sending message type as pldm to mctp : RC = 0
 Write to socket successful : RC = 18
 Total length:18
 Loopback response message:
 08 01 80 02 51 00 00 00 00 00 00 00 00 01 80 00 00 00
 On first recv(),response == request : RC = 0
 Total length: 46
 Shutdown Socket successful :  RC = 0
 Response Message:
 08 01 00 02 51 00 02 00 00 00 00 00 00 00 01 1d 00 01 00 00 00 01 0b 00 00 13 00 00 00 01 00 21 00 00 00 00 00 00 00 00 00 01 c4 00 01 06
 Parsed Response Msg:
 nextRecordHandle: 2
 responseCount: 29
 recordHandle: 1
 PDRHeaderVersion: 1
 PDRType: 11
 recordChangeNumber: 0
 dataLength: 19
 PLDMTerminusHandle: 0
 effecterID: 1
 entityType: 33
 entityInstanceNumber: 0
 containerID: 0
 effecterSemanticID: 0
 effecterInit: 0
 effecterDescriptionPDR: false
 compositeEffecterCount: 1
 stateSetID: 196
 possibleStatesSize: 1
 possibleStates: 6

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I0c41f888b2e36a5a49968dff190ad8d53255b9ed
diff --git a/libpldmresponder/platform.cpp b/libpldmresponder/platform.cpp
index 3f93ff4..4d297f0 100644
--- a/libpldmresponder/platform.cpp
+++ b/libpldmresponder/platform.cpp
@@ -36,41 +36,40 @@
         return CmdHandler::ccOnlyResponse(request, rc);
     }
 
-    uint32_t nextRecordHandle{};
     uint16_t respSizeBytes{};
     uint8_t* recordData = nullptr;
     try
     {
-        pdr::Repo& pdrRepo = pdr::get(PDR_JSONS_DIR);
-        nextRecordHandle = pdrRepo.getNextRecordHandle(recordHandle);
-        pdr::Entry e;
+        pdr_utils::RepoInterface& pdrRepo = pdr::getRepo(PDR_JSONS_DIR);
+        pdr_utils::PdrEntry e;
+        auto record = pdr::getRecordByHandle(pdrRepo, recordHandle, e);
+        if (record == NULL)
+        {
+            return CmdHandler::ccOnlyResponse(
+                request, PLDM_PLATFORM_INVALID_RECORD_HANDLE);
+        }
+
         if (reqSizeBytes)
         {
-            e = pdrRepo.at(recordHandle);
-            respSizeBytes = e.size();
+            respSizeBytes = e.size;
             if (respSizeBytes > reqSizeBytes)
             {
                 respSizeBytes = reqSizeBytes;
             }
-            recordData = e.data();
+            recordData = e.data;
         }
         response.resize(sizeof(pldm_msg_hdr) + PLDM_GET_PDR_MIN_RESP_BYTES +
                             respSizeBytes,
                         0);
         responsePtr = reinterpret_cast<pldm_msg*>(response.data());
         rc = encode_get_pdr_resp(request->hdr.instance_id, PLDM_SUCCESS,
-                                 nextRecordHandle, 0, PLDM_START, respSizeBytes,
-                                 recordData, 0, responsePtr);
+                                 e.handle.nextRecordHandle, 0, PLDM_START,
+                                 respSizeBytes, recordData, 0, responsePtr);
         if (rc != PLDM_SUCCESS)
         {
             return ccOnlyResponse(request, rc);
         }
     }
-    catch (const std::out_of_range& e)
-    {
-        return CmdHandler::ccOnlyResponse(request,
-                                          PLDM_PLATFORM_INVALID_RECORD_HANDLE);
-    }
     catch (const std::exception& e)
     {
         std::cerr << "Error accessing PDR, HANDLE=" << recordHandle