Add messages to track the file transfer commands
This patch adds messages to track the file transfer commands. This
will be useful for testing.
Tested:
Unit tested
Google-Bug-Id: 445945270
Change-Id: Idbda5ead2d0d5e652b4dffe26ad15e1c152a5063
Signed-off-by: Kasun Athukorala <kasunath@google.com>
diff --git a/libpldmresponder/file_transfer.cpp b/libpldmresponder/file_transfer.cpp
index 371a90f..ab403ce 100644
--- a/libpldmresponder/file_transfer.cpp
+++ b/libpldmresponder/file_transfer.cpp
@@ -105,7 +105,7 @@
});
}
-std::optional<uint16_t> Handler::getFreeFileDescriptor(uint16_t fileIdentifier)
+std::optional<uint16_t> Handler::getFreeFileDescriptor()
{
uint16_t startValue = this->nextFileDescriptor;
@@ -121,15 +121,6 @@
}
}
- this->fileDescriptors.emplace(
- this->nextFileDescriptor,
- FileDescriptor{.fp = nullptr,
- .tid = 0,
- .fileSize = 0,
- .startingOffset = 0,
- .sectionLength = 0,
- .prevChecksum = 0,
- .fileIdentifier = fileIdentifier});
return this->nextFileDescriptor;
}
@@ -150,12 +141,12 @@
}
uint16_t fileIdentifier = decodedReq.file_identifier;
- std::optional<uint16_t> fdOrRet = getFreeFileDescriptor(fileIdentifier);
+ std::optional<uint16_t> fdOrRet = getFreeFileDescriptor();
if (!fdOrRet.has_value())
{
error(
- "No free file descriptors available for FileIdentifier: '{FILE_ID}'",
- "FILE_ID", fileIdentifier);
+ "No free file descriptors available for tid:`{TID}` FileIdentifier: '{FILE_ID}'",
+ "TID", tid, "FILE_ID", fileIdentifier);
return CmdHandler::ccOnlyResponse(request,
PLDM_FILE_CC_UNABLE_TO_OPEN_FILE);
}
@@ -170,18 +161,22 @@
int ret = platformHandler->getFilePointer(fileIdentifier, &fp, &fileSize);
if (ret != 0)
{
- removeFileDescriptor(fdOrRet.value());
error("Requested FileIdentifier: '{FILE_ID}' not found in PDR",
"FILE_ID", fileIdentifier);
return CmdHandler::ccOnlyResponse(request,
PLDM_FILE_CC_INVALID_FILE_IDENTIFIER);
}
- // Save the open file information
- FileDescriptor& fileDescriptor = fileDescriptors[fdOrRet.value()];
- fileDescriptor.tid = tid;
- fileDescriptor.fp = fp;
- fileDescriptor.fileSize = fileSize;
+ fileDescriptors.emplace(
+ fdOrRet.value(),
+ FileDescriptor{.fp = fp,
+ .tid = tid,
+ .index = fdOrRet.value(),
+ .fileSize = fileSize,
+ .startingOffset = 0,
+ .sectionLength = 0,
+ .prevChecksum = 0,
+ .fileIdentifier = fileIdentifier});
size_t respPayloadLength = PLDM_DF_OPEN_RESP_BYTES;
Response response(sizeof(pldm_msg_hdr) + respPayloadLength, 0);
@@ -197,9 +192,13 @@
{
removeFileDescriptor(fdOrRet.value());
fclose(fp);
+ error("Failed to encode DfOpen response. Err: '{ERROR}'", "ERROR", rc);
return CmdHandler::ccOnlyResponse(request, PLDM_ERROR);
}
+ info("DfOpen received. tid:{TID} fi:{FI} fd:{FD}", "TID", tid, "FI",
+ fileIdentifier, "FD", fdOrRet.value());
+
return response;
}
@@ -245,6 +244,7 @@
responsePtr, &respPayloadLength);
if (rc != 0)
{
+ error("Failed to encode DfClose response. Err: '{ERROR}'", "ERROR", rc);
return CmdHandler::ccOnlyResponse(request, PLDM_ERROR);
}
@@ -253,6 +253,8 @@
fclose(it->second.fp);
removeFileDescriptor(fileDescriptor);
+ info("DfClose received. tid:{TID} fd:{FD}", "TID", tid, "FD",
+ fileDescriptor);
return response;
}
@@ -379,6 +381,22 @@
return CmdHandler::ccOnlyResponse(request, PLDM_ERROR);
}
+ if (transferFlag == PLDM_START)
+ {
+ info("Transferring DfRead first part. tid:{TID} fd:{FD}", "TID",
+ fileDescriptor.tid, "FD", fileDescriptor.index);
+ }
+ else if (transferFlag == PLDM_START_AND_END)
+ {
+ info("Transferring DfRead first and last part. tid:{TID} fd:{FD}",
+ "TID", fileDescriptor.tid, "FD", fileDescriptor.index);
+ }
+ else if (transferFlag == PLDM_END)
+ {
+ info("Transferring DfRead last part. tid:{TID} fd:{FD}", "TID",
+ fileDescriptor.tid, "FD", fileDescriptor.index);
+ }
+
fileDescriptor.prevChecksum = checksum;
return response;
}
diff --git a/libpldmresponder/file_transfer.hpp b/libpldmresponder/file_transfer.hpp
index e92c79b..a5ed520 100644
--- a/libpldmresponder/file_transfer.hpp
+++ b/libpldmresponder/file_transfer.hpp
@@ -23,6 +23,7 @@
{
FILE* fp;
pldm_tid_t tid;
+ uint32_t index;
uint32_t fileSize;
uint32_t startingOffset;
uint32_t sectionLength;
@@ -54,7 +55,7 @@
/**
* @brief Returns a free file descriptor
*/
- std::optional<uint16_t> getFreeFileDescriptor(uint16_t fileIdentifier);
+ std::optional<uint16_t> getFreeFileDescriptor();
/**
* @brief Removes a file descriptor from fileDescriptors