summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-09-27 15:11:57 -0700
committerPatrick Venture <venture@google.com>2018-09-27 23:21:36 +0000
commitb3e07e2b63bb37b319f942604b5a94f0f13bc486 (patch)
treeac59bca6ec82b02d4509fd607f4cb067ad55247e
parente01c0af722d342962dd57c4de7a610bf0dbb3e6a (diff)
downloadphosphor-ipmi-blobs-b3e07e2b63bb37b319f942604b5a94f0f13bc486.tar.gz
phosphor-ipmi-blobs-b3e07e2b63bb37b319f942604b5a94f0f13bc486.zip
manager: add getBlobManager as an exported method
getBlobManager will allow a library to get ahold of the BlobManager for registration purposes. Change-Id: I75f41601d10d59293c7752da8307507cc2c88434 Signed-off-by: Patrick Venture <venture@google.com>
-rw-r--r--blobs-ipmid/manager.hpp8
-rw-r--r--main.cpp8
-rw-r--r--manager.cpp14
3 files changed, 25 insertions, 5 deletions
diff --git a/blobs-ipmid/manager.hpp b/blobs-ipmid/manager.hpp
index 8220e0e..14c8b98 100644
--- a/blobs-ipmid/manager.hpp
+++ b/blobs-ipmid/manager.hpp
@@ -250,4 +250,12 @@ class BlobManager : public ManagerInterface
/* Mapping of open blobIds */
std::unordered_map<std::string, int> openFiles;
};
+
+/**
+ * @brief Gets a handle to the BlobManager.
+ *
+ * @return a pointer to the BlobManager instance.
+ */
+BlobManager* getBlobManager();
+
} // namespace blobs
diff --git a/main.cpp b/main.cpp
index a28a232..e0828db 100644
--- a/main.cpp
+++ b/main.cpp
@@ -39,8 +39,6 @@ constexpr auto blobTransferCmd = 128;
namespace blobs
{
-static std::unique_ptr<BlobManager> manager;
-
static ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
uint8_t* replyCmdBuf, size_t* dataLen)
{
@@ -60,7 +58,8 @@ static ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
return IPMI_CC_INVALID;
}
- return processBlobCommand(command, manager.get(), &crc, reqBuf, replyCmdBuf,
+ BlobManager* manager = getBlobManager();
+ return processBlobCommand(command, manager, &crc, reqBuf, replyCmdBuf,
dataLen);
}
@@ -76,9 +75,8 @@ void setupBlobGlobalHandler()
oemRouter->registerHandler(oem::obmcOemNumber, oem::blobTransferCmd,
handleBlobCommand);
- manager = std::make_unique<BlobManager>();
-
#if ENABLE_EXAMPLE
+ BlobManager* manager = getBlobManager();
manager->registerHandler(std::move(std::make_unique<ExampleBlobHandler>()));
#endif
}
diff --git a/manager.cpp b/manager.cpp
index 9a87b4f..5ab7eb3 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -15,6 +15,7 @@
*/
#include <blobs-ipmid/manager.hpp>
+#include <memory>
#include <string>
#include <vector>
@@ -343,4 +344,17 @@ bool BlobManager::getSession(uint16_t* sess)
return false;
}
+
+static std::unique_ptr<BlobManager> manager;
+
+BlobManager* getBlobManager()
+{
+ if (manager == nullptr)
+ {
+ manager = std::make_unique<BlobManager>();
+ }
+
+ return manager.get();
+}
+
} // namespace blobs
OpenPOWER on IntegriCloud