static void trigger_action_dbus_call(ctx::json& action)
{
- std::string bus_name, object, iface, method, user_data;
+ std::string bus_name, object, iface, method;
+ GVariant *param = NULL;
action.get(NULL, CT_RULE_ACTION_DBUS_NAME, &bus_name);
IF_FAIL_VOID_TAG(!bus_name.empty(), _E, "No target bus name");
action.get(NULL, CT_RULE_ACTION_DBUS_METHOD, &method);
IF_FAIL_VOID_TAG(!method.empty(), _E, "No method name");
- if (!action.get(NULL, CT_RULE_ACTION_DBUS_USER_DATA, &user_data)) {
- _E("No user data");
- return;
- }
+ action.get(NULL, CT_RULE_ACTION_DBUS_PARAMETER, ¶m);
- ctx::dbus_server::call(bus_name.c_str(), object.c_str(), iface.c_str(), method.c_str(), user_data.c_str());
+ ctx::dbus_server::call(bus_name.c_str(), object.c_str(), iface.c_str(), method.c_str(), param);
}
void ctx::rule_manager::on_rule_triggered(int rule_id)
HANDLE_GERROR(error);
}
-void ctx::dbus_server_impl::call(const char *dest, const char *obj, const char *iface, const char *method, const char *data)
+void ctx::dbus_server_impl::call(const char *dest, const char *obj, const char *iface, const char *method, GVariant *param)
{
- IF_FAIL_VOID_TAG(dest && obj && iface && method && data, _E, "Parameter null");
+ IF_FAIL_VOID_TAG(dest && obj && iface && method, _E, "Parameter null");
static unsigned int call_count = 0;
++call_count;
- _SI("Call %u: %s, %s, %s.%s, %s", call_count, dest, obj, iface, method, data);
-
- GVariant *param = g_variant_new("(s)", data);
- IF_FAIL_VOID_TAG(param, _E, "Memory allocation failed");
+ _SI("Call %u: %s, %s, %s.%s", call_count, dest, obj, iface, method);
g_dbus_connection_call(dbus_connection, dest, obj, iface, method, param, NULL,
G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, handle_call_result, &call_count);
_instance->publish(dest, req_id, subject, error, data);
}
-void ctx::dbus_server::call(const char *dest, const char *obj, const char *iface, const char *method, const char *data)
+void ctx::dbus_server::call(const char *dest, const char *obj, const char *iface, const char *method, GVariant *param)
{
- _instance->call(dest, obj, iface, method, data);
+ _instance->call(dest, obj, iface, method, param);
}
void release();
void publish(const char *dest, int req_id, const char *subject, int error, const char *data);
- void call(const char *dest, const char *obj, const char *iface, const char *method, const char *data);
+ void call(const char *dest, const char *obj, const char *iface, const char *method, GVariant *param);
int64_t signal_subscribe(const char *sender, const char *path, const char *iface, const char *name, dbus_listener_iface *listener);
void signal_unsubscribe(int64_t subscription_id);
namespace dbus_server {
void publish(const char *dest, int req_id, const char *subject, int error, const char *data);
- void call(const char *dest, const char *obj, const char *iface, const char *method, const char *data);
+ void call(const char *dest, const char *obj, const char *iface, const char *method, GVariant *param);
}
} /* namespace ctx */