+static void _service_signal_cb(GDBusConnection *connection,
+ const gchar *name, const gchar *path,
+ const gchar *interface, const gchar *sig,
+ GVariant *param, gpointer user_data)
+{
+ gchar *sigvalue = NULL;
+ GVariant *variant = NULL;
+ stc_s *stc = (stc_s *)stc_get_manager();
+ ret_msg_if(stc == NULL, "failed to get stc data");
+
+ if (path == NULL || param == NULL)
+ goto done;
+
+ g_variant_get(param, "(sv)", &sigvalue, &variant);
+ if (sigvalue == NULL)
+ goto done;
+
+ if (g_strcmp0(sig, CONNMAN_SIGNAL_PROPERTY_CHANGED) != 0)
+ goto done;
+
+ if (g_strcmp0(sigvalue, "State") == 0 &&
+ g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING)) {
+ const gchar *state = NULL;
+
+ state = g_variant_get_string(variant, NULL);
+ if (g_strcmp0(state, "ready") == 0 ||
+ g_strcmp0(state, "online") == 0) {
+ GSList *comp = g_slist_find_custom(g_connection_list,
+ path, __conn_list_comp);
+ if (!comp)
+ __append_connected_profile(stc->connection, path);
+ } else if (g_strcmp0(state, "idle") == 0 ||
+ g_strcmp0(state, "disconnect") == 0) {
+ GSList *comp = g_slist_find_custom(g_connection_list,
+ path, __conn_list_comp);
+ if (comp && comp->data)
+ __remove_disconnected_profile(stc->connection, comp->data);
+ }
+ } else if (g_strcmp0(sigvalue, "Roaming") == 0) {
+ //LCOV_EXCL_START
+ GSList *comp = g_slist_find_custom(g_connection_list,
+ path, __conn_list_comp);
+
+ if (comp) {
+ stc_connection_s *conn = comp->data;
+ gboolean roaming = 0;
+
+ if (g_variant_is_of_type(variant, G_VARIANT_TYPE_BOOLEAN)) {
+ roaming = g_variant_get_boolean(variant);
+ conn->roaming = roaming;
+ }
+ }
+ //LCOV_EXCL_STOP
+ } else {
+ ;//Do nothing
+ }
+done:
+ if (sigvalue)
+ g_free(sigvalue);
+
+ if (variant)
+ g_variant_unref(variant);
+
+ return;
+}
+
+stc_error_e stc_connection_monitor_init(stc_s *stc)