Extract downloadEntryCallback function

As part of a EventLog refactor, extract this function into a
log_services utility.

Tested: Only code extraction. Code compiles.

Change-Id: Iaa7aa583a38587c338280af2a9fff65d3732f301
Signed-off-by: Oliver Brewka <oliver.brewka@9elements.com>
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index a31d738..e1f3fb6 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -27,6 +27,7 @@
 #include "utils/dbus_event_log_entry.hpp"
 #include "utils/dbus_utils.hpp"
 #include "utils/json_utils.hpp"
+#include "utils/log_services_utils.hpp"
 #include "utils/query_param.hpp"
 #include "utils/time_utils.hpp"
 
@@ -595,95 +596,6 @@
         std::format("{}/entry/{}", getDumpPath(dumpType), entryID),
         "xyz.openbmc_project.Object.Delete", "Delete");
 }
-inline bool checkSizeLimit(int fd, crow::Response& res)
-{
-    long long int size = lseek(fd, 0, SEEK_END);
-    if (size <= 0)
-    {
-        BMCWEB_LOG_ERROR("Failed to get size of file, lseek() returned {}",
-                         size);
-        messages::internalError(res);
-        return false;
-    }
-
-    // Arbitrary max size of 20MB to accommodate BMC dumps
-    constexpr long long int maxFileSize = 20LL * 1024LL * 1024LL;
-    if (size > maxFileSize)
-    {
-        BMCWEB_LOG_ERROR("File size {} exceeds maximum allowed size of {}",
-                         size, maxFileSize);
-        messages::internalError(res);
-        return false;
-    }
-    off_t rc = lseek(fd, 0, SEEK_SET);
-    if (rc < 0)
-    {
-        BMCWEB_LOG_ERROR("Failed to reset file offset to 0");
-        messages::internalError(res);
-        return false;
-    }
-    return true;
-}
-inline void downloadEntryCallback(
-    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-    const std::string& entryID, const std::string& downloadEntryType,
-    const boost::system::error_code& ec,
-    const sdbusplus::message::unix_fd& unixfd)
-{
-    if (ec.value() == EBADR)
-    {
-        messages::resourceNotFound(asyncResp->res, "EntryAttachment", entryID);
-        return;
-    }
-    if (ec)
-    {
-        BMCWEB_LOG_ERROR("DBUS response error: {}", ec);
-        messages::internalError(asyncResp->res);
-        return;
-    }
-
-    // Make sure we know how to process the retrieved entry attachment
-    if ((downloadEntryType != "BMC") && (downloadEntryType != "System"))
-    {
-        BMCWEB_LOG_ERROR("downloadEntryCallback() invalid entry type: {}",
-                         downloadEntryType);
-        messages::internalError(asyncResp->res);
-    }
-
-    int fd = -1;
-    fd = dup(unixfd);
-    if (fd < 0)
-    {
-        BMCWEB_LOG_ERROR("Failed to open file");
-        messages::internalError(asyncResp->res);
-        return;
-    }
-    if (!checkSizeLimit(fd, asyncResp->res))
-    {
-        close(fd);
-        return;
-    }
-    if (downloadEntryType == "System")
-    {
-        if (!asyncResp->res.openFd(fd, bmcweb::EncodingType::Base64))
-        {
-            messages::internalError(asyncResp->res);
-            close(fd);
-            return;
-        }
-        asyncResp->res.addHeader(
-            boost::beast::http::field::content_transfer_encoding, "Base64");
-        return;
-    }
-    if (!asyncResp->res.openFd(fd))
-    {
-        messages::internalError(asyncResp->res);
-        close(fd);
-        return;
-    }
-    asyncResp->res.addHeader(boost::beast::http::field::content_type,
-                             "application/octet-stream");
-}
 
 inline void downloadDumpEntry(
     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
@@ -703,7 +615,8 @@
         [asyncResp, entryID,
          dumpType](const boost::system::error_code& ec,
                    const sdbusplus::message::unix_fd& unixfd) {
-            downloadEntryCallback(asyncResp, entryID, dumpType, ec, unixfd);
+            log_services_utils::downloadEntryCallback(asyncResp, entryID,
+                                                      dumpType, ec, unixfd);
         };
 
     dbus::utility::async_method_call(
@@ -739,7 +652,8 @@
         [asyncResp, entryID,
          dumpType](const boost::system::error_code& ec,
                    const sdbusplus::message::unix_fd& unixfd) {
-            downloadEntryCallback(asyncResp, entryID, dumpType, ec, unixfd);
+            log_services_utils::downloadEntryCallback(asyncResp, entryID,
+                                                      dumpType, ec, unixfd);
         };
 
     dbus::utility::async_method_call(