summaryrefslogtreecommitdiffstats
path: root/softoff/mainapp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'softoff/mainapp.cpp')
-rw-r--r--softoff/mainapp.cpp40
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;
}
OpenPOWER on IntegriCloud