return nullptr;
}
-GVariant *
-ivi::settings::connman_manager::get_services(GError *& error) const
+void
+ivi::settings::connman_manager::get_services(
+ response_callback & response) const
{
- return call_method("GetServices",
- nullptr, // No parameters,
- error);
+ call_method("GetServices", response);
}
-GVariant *
-ivi::settings::connman_manager::call_method(char const * name,
- GVariant * parameters,
- GError *& error) const
+void
+ivi::settings::connman_manager::get_technologies(
+ response_callback & response) const
+{
+ call_method("GetTechnologies", response);
+}
+
+void
+ivi::settings::connman_manager::call_method(
+ char const * name,
+ response_callback & response) const
{
- return call_method("GetServices",
- nullptr, // No parameters,
- error);
- }
-
- GVariant *
- ivi::settings::connman_manager::call_method(char const * name,
- GVariant * parameters,
- GError *& error) const
- {
constexpr gint const timeout = 5000; // milliseconds
+ GError * error = nullptr;
- GVariant * const ret =
+ unique_ptr<GVariant> ret(
g_dbus_proxy_call_sync(connman_.proxy(),
- name, // "GetTechnologies", ...
- parameters,
+ name,
+ nullptr, // No parameters
G_DBUS_CALL_FLAGS_NONE,
timeout,
nullptr, // Not cancellable
- &error);
+ &error));
+
+ unique_ptr<GError> safe_error(error);
+
+ if (ret != nullptr) {
+ response.send_response(
+ [&ret](JsonBuilder * builder)
+ {
+ /**
+ * @todo Can @c json_gvariant_serialize() ever return a nullptr?
+ */
+ JsonNode * const value =
+ json_gvariant_serialize(ret.get());
+
+ json_builder_set_member_name(builder, "value");
+ json_builder_add_value(builder, value);
- if (ret == nullptr)
- g_critical("THE ERROR: %s\n", error->message);
+ // No need to free the JsonNode. The builder will take
+ // ownership of it.
+ });
+ } else if (error != nullptr) {
+ response.send_error(std::string(name) + " failed: " + error->message);
+ }
+}
- return ret;
+guint
+ivi::settings::connman_manager::subscribe_to_signal(
+ GDBusConnection * connection,
+ char const* name,
+ ivi_signal_callback callback,
+ void * user_data)
+{
+ return
+ g_dbus_connection_signal_subscribe(connection,
+ nullptr,
+ connman_.interface_name(),
+ name,
+ connman_.object_path(),
+ nullptr,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ callback,
+ user_data,
+ nullptr);
}
-
// Local Variables:
// mode:c++
// c-basic-offset:2