diff options
Diffstat (limited to 'softoff/mainapp.cpp')
-rw-r--r-- | softoff/mainapp.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/softoff/mainapp.cpp b/softoff/mainapp.cpp index 38b6984..f5fbf18 100644 --- a/softoff/mainapp.cpp +++ b/softoff/mainapp.cpp @@ -13,32 +13,60 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include <systemd/sd-event.h> #include <phosphor-logging/log.hpp> #include "softoff.hpp" #include "config.h" +#include "timer.hpp" using namespace phosphor::logging; int main(int argc, char** argv) { + // systemd event handler + sd_event* events = nullptr; + // Get a handle to system dbus. auto bus = sdbusplus::bus::new_default(); // Add systemd object manager. sdbusplus::server::manager::manager(bus, SOFTOFF_OBJPATH); + // sd_event object + auto r = sd_event_default(&events); + if (r < 0) + { + log<level::ERR>("Failure to create sd_event handler", + entry("ERROR=%s", strerror(-r))); + return -1; + } + + // Attach the bus to sd_event to service user requests + bus.attach_event(events, SD_EVENT_PRIORITY_NORMAL); + // Create the SoftPowerOff object. - phosphor::ipmi::SoftPowerOff object(bus, SOFTOFF_OBJPATH); + phosphor::ipmi::SoftPowerOff powerObj(bus, events, SOFTOFF_OBJPATH); /** @brief Claim the bus */ bus.request_name(SOFTOFF_BUSNAME); - /** @brief Wait for client requests */ - while(true) + /** @brief Wait for client requests until this application has processed + * at least one successful SoftPowerOff + */ + while(!powerObj.isCompleted() && !powerObj.isTimerExpired()) { - // Handle dbus message / signals discarding unhandled - bus.process_discard(); - bus.wait(); + // -1 denotes wait for ever + r = sd_event_run(events, (uint64_t)-1); + if (r < 0) + { + log<level::ERR>("Failure in processing request", + entry("ERROR=%s", strerror(-r))); + break; + } } + + // Cleanup the event handler + events = sd_event_unref(events); + return 0; } |