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>
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 @@
     /* 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 @@
 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 @@
         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 @@
     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 @@
 
     return false;
 }
+
+static std::unique_ptr<BlobManager> manager;
+
+BlobManager* getBlobManager()
+{
+    if (manager == nullptr)
+    {
+        manager = std::make_unique<BlobManager>();
+    }
+
+    return manager.get();
+}
+
 } // namespace blobs