remove legacy ipmid_get_sd_bus_connection calls

The new way is to use the shared_ptr to the sdbusplus::asio::
connection. A shared pointer is cheaper to instantiate than
a dbus object. This also paves the way to eventually replace
many of the blocking dbus calls with yielding or async dbus
calls.

Change-Id: Iea326782266d769457851aabf98e2e582d1bf81e
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/src/smbiosmdrv2.cpp b/src/smbiosmdrv2.cpp
index bce8929..80e8620 100644
--- a/src/smbiosmdrv2.cpp
+++ b/src/smbiosmdrv2.cpp
@@ -15,15 +15,14 @@
 */
 
 #include <errno.h>
-#include <ipmid/api.h>
 
 #include <commandutils.hpp>
 #include <cstdint>
+#include <ipmid/api.hpp>
 #include <ipmid/utils.hpp>
 #include <phosphor-ipmi-host/ipmid.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus.hpp>
 #include <smbiosmdrv2.hpp>
 #include <string>
 #include <vector>
@@ -36,7 +35,6 @@
 constexpr const uint16_t LAST_AGENT_ID = 0xFFFF;
 
 static void register_netfn_smbiosmdrv2_functions() __attribute__((constructor));
-static sdbusplus::bus::bus bus(ipmid_get_sd_bus_connection());
 
 int gentLookup(const uint16_t& agentId, const std::string& service)
 {
@@ -47,10 +45,11 @@
         return LAST_AGENT_INDEX;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "AgentLookup");
     method.append(agentId);
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -65,11 +64,12 @@
 int findLockHandle(const uint16_t& lockHandle, const std::string& service)
 {
     int idIndex = -1;
-    sdbusplus::message::message method = bus.new_method_call(
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "FindLockHandle");
     method.append(lockHandle);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -87,10 +87,11 @@
                            sdbusplus::message::variant<uint8_t>& value,
                            const std::string& service)
 {
-    sdbusplus::message::message method = bus.new_method_call(
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, DBUS_PROPERTIES, "Get");
     method.append(MDRV2_INTERFACE, name);
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -106,7 +107,8 @@
                const std::string& service)
 {
     int idIndex = -1;
-    sdbusplus::message::message method = bus.new_method_call(
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "FindIdIndex");
     std::vector<uint8_t> info;
     for (int index = 0; index < len; index++)
@@ -115,7 +117,7 @@
     }
     method.append(info);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -147,7 +149,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -158,10 +161,10 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "AgentStatus");
     method.append(requestData->dirVersion);
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -199,7 +202,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -222,12 +226,12 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "GetDir");
 
     method.append(requestData->dirIndex);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -282,7 +286,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -304,12 +309,12 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "GetDataInfo");
 
     method.append(idIndex);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -349,7 +354,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -371,12 +377,12 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "LockData");
 
     method.append((uint8_t)idIndex, requestData->timeout);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         if (reply.get_errno() == EBUSY)
@@ -426,7 +432,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -446,11 +453,11 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "UnLockData");
     method.append((uint8_t)idIndex);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         if (reply.get_errno() == EBUSY)
@@ -498,7 +505,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -518,12 +526,12 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "GetDataBlock");
     method.append((uint8_t)idIndex, requestData->xferOffset,
                   requestData->xferLength);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -594,7 +602,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -612,7 +621,7 @@
         return IPMI_CC_STORGE_LEAK;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "SendDir");
     method.append(requestData->dirVersion, requestData->dirIndex,
                   requestData->returnedEntries, requestData->remainingEntries);
@@ -624,7 +633,7 @@
     }
     method.append(idVector);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -661,7 +670,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -672,10 +682,10 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "GetDataOffer");
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         if (reply.get_errno() == EBUSY)
@@ -729,7 +739,8 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -751,14 +762,14 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "SendDataInfo");
 
     method.append((uint8_t)idIndex, requestData->validFlag,
                   requestData->dataLength, requestData->dataVersion,
                   requestData->timeStamp);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -813,7 +824,8 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -835,7 +847,7 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "DataStart");
 
     for (uint8_t infoIndex = 0; infoIndex < sizeof(DataIdStruct); infoIndex++)
@@ -846,7 +858,7 @@
                   requestData->xferAddress, requestData->xferLength,
                   requestData->timeout);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         int errNumber = reply.get_errno();
@@ -902,7 +914,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -922,11 +935,11 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "DataDone");
     method.append((uint8_t)idIndex);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         if (reply.get_errno() == EBUSY)
@@ -971,7 +984,8 @@
 
     *data_len = 0;
 
-    std::string service = ipmi::getService(bus, MDRV2_INTERFACE, MDRV2_PATH);
+    std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
+    std::string service = ipmi::getService(*bus, MDRV2_INTERFACE, MDRV2_PATH);
 
     int agentIndex = agentLookup(requestData->agentId, service);
     if (agentIndex == -1)
@@ -991,12 +1005,12 @@
         return IPMI_CC_PARM_OUT_OF_RANGE;
     }
 
-    sdbusplus::message::message method = bus.new_method_call(
+    sdbusplus::message::message method = bus->new_method_call(
         service.c_str(), MDRV2_PATH, MDRV2_INTERFACE, "SendDataBlock");
     method.append((uint8_t)idIndex, requestData->xferOffset,
                   requestData->xferLength, requestData->checksum);
 
-    sdbusplus::message::message reply = bus.call(method);
+    sdbusplus::message::message reply = bus->call(method);
     if (reply.is_method_error())
     {
         int errNumber = reply.get_errno();