diff options
author | Patrick Venture <venture@google.com> | 2018-09-27 15:11:57 -0700 |
---|---|---|
committer | Patrick Venture <venture@google.com> | 2018-09-27 23:21:36 +0000 |
commit | b3e07e2b63bb37b319f942604b5a94f0f13bc486 (patch) | |
tree | ac59bca6ec82b02d4509fd607f4cb067ad55247e | |
parent | e01c0af722d342962dd57c4de7a610bf0dbb3e6a (diff) | |
download | phosphor-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.hpp | 8 | ||||
-rw-r--r-- | main.cpp | 8 | ||||
-rw-r--r-- | manager.cpp | 14 |
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 @@ -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 |