diff options
author | Janusz Kozerski <j.kozerski@samsung.com> | 2015-07-10 16:01:21 +0200 |
---|---|---|
committer | Janusz Kozerski <j.kozerski@samsung.com> | 2015-07-31 12:39:37 +0200 |
commit | 6e54044762b0e194ec18092159f39e5084c1da2c (patch) | |
tree | e73bdee4341e6cb83f7acb624918181bfe41bf76 /src | |
parent | 0eabc88017a1cc862f3bc6d5f1ff329f3c3a3996 (diff) | |
download | cert-checker-6e54044762b0e194ec18092159f39e5084c1da2c.tar.gz cert-checker-6e54044762b0e194ec18092159f39e5084c1da2c.tar.bz2 cert-checker-6e54044762b0e194ec18092159f39e5084c1da2c.zip |
Get online status from connman at startup.
* Fix DBus proxy pointer
Change-Id: Iad1cfe8e6a02136e5a899b50560a586265c5a322
Diffstat (limited to 'src')
-rw-r--r-- | src/include/cchecker/logic.h | 3 | ||||
-rw-r--r-- | src/logic.cpp | 79 |
2 files changed, 60 insertions, 22 deletions
diff --git a/src/include/cchecker/logic.h b/src/include/cchecker/logic.h index 8627c1d..cf1c63d 100644 --- a/src/include/cchecker/logic.h +++ b/src/include/cchecker/logic.h @@ -84,8 +84,9 @@ class Logic { void add_app_to_buffer_and_database(const app_t &app); void remove_app_from_buffer_and_database(const app_t &app); + void set_connman_online_state(); void pkgmgr_callback_internal(GVariant *parameters, pkgmgr_event_t event); - error_t register_dbus_signal_handler(GDBusProxy *proxy, + error_t register_dbus_signal_handler(GDBusProxy **proxy, const char *name, const char *object_path, const char *interface_name, diff --git a/src/logic.cpp b/src/logic.cpp index 45800e9..63c2e15 100644 --- a/src/logic.cpp +++ b/src/logic.cpp @@ -122,7 +122,7 @@ error_t Logic::setup() // Add pkgmgr install callback LogDebug("register pkgmgr install event callback start"); - if (register_dbus_signal_handler(m_proxy_pkgmgr_install, + if (register_dbus_signal_handler(&m_proxy_pkgmgr_install, "org.tizen.slp.pkgmgr_status", "/org/tizen/slp/pkgmgr/install", "org.tizen.slp.pkgmgr.install", @@ -134,7 +134,7 @@ error_t Logic::setup() // Add pkgmgr uninstall callback LogDebug("register pkgmgr uninstall event callback start"); - if (register_dbus_signal_handler(m_proxy_pkgmgr_uninstall, + if (register_dbus_signal_handler(&m_proxy_pkgmgr_uninstall, "org.tizen.slp.pkgmgr_status", "/org/tizen/slp/pkgmgr/uninstall", "org.tizen.slp.pkgmgr.uninstall", @@ -146,7 +146,7 @@ error_t Logic::setup() // Add connman callback LogDebug("register connman event callback start"); - if (register_dbus_signal_handler(m_proxy_connman, + if (register_dbus_signal_handler(&m_proxy_connman, "net.connman", "/", "net.connman.Manager", @@ -156,10 +156,12 @@ error_t Logic::setup() } LogDebug("register connman event callback success"); + set_connman_online_state(); + return NO_ERROR; } -error_t Logic::register_dbus_signal_handler(GDBusProxy *proxy, +error_t Logic::register_dbus_signal_handler(GDBusProxy **proxy, const char *name, const char *object_path, const char *interface_name, @@ -174,7 +176,7 @@ error_t Logic::register_dbus_signal_handler(GDBusProxy *proxy, GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_NONE; // Obtain a connection to the System Bus - proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, + *proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, flags, NULL, /* GDBusInterfaceInfo */ name, @@ -183,7 +185,7 @@ error_t Logic::register_dbus_signal_handler(GDBusProxy *proxy, NULL, /* GCancellable */ &error); - if (proxy == NULL) { + if (*proxy == NULL) { if (error) { LogError("Error creating D-Bus proxy for /'" << interface_name <<"/': " << error->message); g_error_free(error); @@ -194,7 +196,7 @@ error_t Logic::register_dbus_signal_handler(GDBusProxy *proxy, } // Connect to g-signal to receive signals from proxy - if (g_signal_connect(proxy, "g-signal", G_CALLBACK(callback), this) < 1) { + if (g_signal_connect(*proxy, "g-signal", G_CALLBACK(callback), this) < 1) { LogError("g_signal_connect error while connecting " << interface_name); return REGISTER_CALLBACK_ERROR; } @@ -202,6 +204,51 @@ error_t Logic::register_dbus_signal_handler(GDBusProxy *proxy, return NO_ERROR; } +void Logic::set_connman_online_state() +{ + GError *error = NULL; + GVariant *response; + + if (m_proxy_connman == NULL) { + LogError("connman proxy is NULL"); + return; + } + + response = g_dbus_proxy_call_sync (m_proxy_connman, + "GetProperties", + NULL, // GetProperties gets no parameters + G_DBUS_CALL_FLAGS_NONE, + -1, // Default timeout + NULL, + &error); + + if (error) { + LogError("Error while calling connman GetProperties() Dbus API: " << error->message); + g_error_free(error); + return; + } + + if (response == NULL) { + // This should never happen + return; + } + + gchar *resp_g = g_variant_print(response, TRUE); + std::string resp_s(resp_g); + LogDebug("response: " << resp_s); + g_free(resp_g); + + // Response should look like this: + // ({'State': <'online'>, 'OfflineMode': <false>, 'SessionMode': <false>},) + if (resp_s.find("'State': <'online'>", 0) != std::string::npos) { + LogDebug("Connman has returned: online"); + set_online(true); + } + + // free memory + g_variant_unref(response); +} + // FIXME: pkgmgr callback doesn't receive signals with successful installation/uninstallation. // For now it will be replaced by low-level signal handling from DBUS. void Logic::pkgmgr_install_callback(GDBusProxy */*proxy*/, @@ -252,15 +299,10 @@ void Logic::pkgmgr_callback_internal(GVariant *parameters, return; } - guint32 uid; - gchar *pkgid = NULL; - gchar *state = NULL; - gchar *status = NULL; - - uid = g_variant_get_uint32(g_variant_get_child_value(parameters, 0)); - pkgid = g_variant_dup_string(g_variant_get_child_value(parameters, 3), NULL); - state = g_variant_dup_string(g_variant_get_child_value(parameters, 4), NULL); - status = g_variant_dup_string(g_variant_get_child_value(parameters, 5), NULL); + guint32 uid = g_variant_get_uint32(g_variant_get_child_value(parameters, 0)); + const gchar *pkgid = g_variant_get_string(g_variant_get_child_value(parameters, 3), NULL); + const gchar *state = g_variant_get_string(g_variant_get_child_value(parameters, 4), NULL); + const gchar *status = g_variant_get_string(g_variant_get_child_value(parameters, 5), NULL); // FIXME: No information about app_id in the signal. Use stub. app_t app(TEMP_APP_ID, pkgid, uid, {}); @@ -281,10 +323,6 @@ void Logic::pkgmgr_callback_internal(GVariant *parameters, } else LogDebug("Wrong state (" << std::string(state) << ") or status (" << std::string(status) << ")"); - - g_free(pkgid); - g_free(state); - g_free(status); } void Logic::connman_callback(GDBusProxy */*proxy*/, @@ -308,7 +346,6 @@ void Logic::connman_callback(GDBusProxy */*proxy*/, if (params_str == "('State', <'online'>)") { LogDebug("Device online"); logic->set_online(true); - logic->m_to_process.notify_one(); } else if (params_str == "('State', <'offline'>)") { |