| #include "common/instance_id.hpp" | 
 | #include "common/utils.hpp" | 
 | #include "softoff.hpp" | 
 |  | 
 | #include <phosphor-logging/lg2.hpp> | 
 |  | 
 | PHOSPHOR_LOG2_USING; | 
 |  | 
 | int main() | 
 | { | 
 |     // Get a default event loop | 
 |     auto event = sdeventplus::Event::get_default(); | 
 |  | 
 |     // Get a handle to system D-Bus. | 
 |     auto& bus = pldm::utils::DBusHandler::getBus(); | 
 |  | 
 |     // Obtain the instance database | 
 |     pldm::InstanceIdDb instanceIdDb; | 
 |  | 
 |     // Attach the bus to sd_event to service user requests | 
 |     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL); | 
 |  | 
 |     pldm::SoftPowerOff softPower(bus, event.get(), instanceIdDb); | 
 |  | 
 |     if (softPower.isError()) | 
 |     { | 
 |         error( | 
 |             "Failure in gracefully shutdown by remote terminus, exiting pldm-softpoweroff app"); | 
 |         return -1; | 
 |     } | 
 |  | 
 |     if (softPower.isCompleted()) | 
 |     { | 
 |         error( | 
 |             "Remote terminus current state is not Running, exiting pldm-softpoweroff app"); | 
 |         return 0; | 
 |     } | 
 |  | 
 |     // Send the gracefully shutdown request to the host and | 
 |     // wait the host gracefully shutdown. | 
 |     if (softPower.hostSoftOff(event)) | 
 |     { | 
 |         error( | 
 |             "Failure in sending soft off request to the remote terminus. Exiting pldm-softpoweroff app"); | 
 |         return -1; | 
 |     } | 
 |  | 
 |     if (softPower.isTimerExpired() && softPower.isReceiveResponse()) | 
 |     { | 
 |         pldm::utils::reportError( | 
 |             "xyz.openbmc_project.PLDM.Error.SoftPowerOff.HostSoftOffTimeOut"); | 
 |         error( | 
 |             "ERROR! Waiting for the host soft off timeout. Exit the pldm-softpoweroff"); | 
 |         return -1; | 
 |     } | 
 |  | 
 |     return 0; | 
 | } |