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/include/utils/log_services_utils.hpp b/redfish-core/include/utils/log_services_utils.hpp
new file mode 100644
index 0000000..36bf27e
--- /dev/null
+++ b/redfish-core/include/utils/log_services_utils.hpp
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileCopyrightText: Copyright OpenBMC Authors
+// SPDX-FileCopyrightText: Copyright 2018 Intel Corporation
+
+#pragma once
+
+#include "app.hpp"
+#include "async_resp.hpp"
+#include "error_messages.hpp"
+#include "http_body.hpp"
+#include "http_response.hpp"
+#include "logging.hpp"
+
+#include <asm-generic/errno.h>
+#include <systemd/sd-bus.h>
+#include <unistd.h>
+
+#include <boost/beast/http/field.hpp>
+#include <boost/beast/http/status.hpp>
+#include <boost/beast/http/verb.hpp>
+#include <boost/system/linux_error.hpp>
+#include <boost/url/format.hpp>
+#include <boost/url/url.hpp>
+#include <sdbusplus/message.hpp>
+#include <sdbusplus/message/native_types.hpp>
+#include <sdbusplus/unpack_properties.hpp>
+
+#include <cstdio>
+#include <format>
+#include <memory>
+#include <string>
+
+namespace redfish
+{
+namespace log_services_utils
+{
+
+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");
+}
+} // namespace log_services_utils
+} // namespace redfish
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(