#include <system_info.h>
#include <klay/filesystem.h>
+#include <klay/dbus/signal.h>
+#include <klay/audit/logger.h>
+
#include "policy-client.h"
namespace {
-const std::string SIGNAL_INTERFACE = "DevicePolicyManager::subscribeSignal";
+const std::string SIGNAL_OBJECT_PATH = "/org/tizen/DevicePolicyManger/PIL";
+const std::string SIGNAL_EVENT_INTERFACE = "org.tizen.DevicePolicyManager.PIL.Event";
const std::string POLICY_MANAGER_ADDRESS = "/tmp/.device-policy-manager.sock";
int DevicePolicyClient::subscribeSignal(const std::string& name,
const SignalHandler& handler,
- void* data)
+ void* data) noexcept
{
- auto dispatch = [handler, data](const std::string &name, const std::string &object) {
- handler(name.c_str(), object.c_str(), data);
- };
-
- if (!maintenanceMode) {
+ if (!maintenanceMode)
return 0;
- }
try {
- return client->subscribe<std::string, std::string>(SIGNAL_INTERFACE, name, dispatch);
+ auto dispatch = [name, handler, data](dbus::Variant variant) {
+ char *state = NULL;
+ variant.get("(s)", &state);
+
+ handler(name.c_str(), state, data);
+ };
+
+ dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+ return receiver.subscribe(name, dispatch);
} catch (runtime::Exception& e) {
- std::cout << e.what() << std::endl;
+ ERROR(e.what());
return -1;
}
}
-int DevicePolicyClient::unsubscribeSignal(int id)
+int DevicePolicyClient::unsubscribeSignal(int id) noexcept
{
- if (!maintenanceMode) {
+ if (!maintenanceMode)
return 0;
- }
- return client->unsubscribe("", id);
+ try {
+ dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+ receiver.unsubscribe(id);
+ return 0;
+ } catch (runtime::Exception& e) {
+ ERROR(e.what());
+ return -1;
+ }
}
int connect(const std::string& address) noexcept;
void disconnect() noexcept;
- int subscribeSignal(const std::string& name, const SignalHandler& handler, void* data);
- int unsubscribeSignal(int subscriberId);
+ int subscribeSignal(const std::string& name,
+ const SignalHandler& handler,
+ void* data) noexcept;
+ int unsubscribeSignal(int subscriberId) noexcept;
template<typename Type, typename... Args>
Type methodCall(const std::string& method, Args&&... args)