static void stage1_prepare_done (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) { NMModemGsm *self = NM_MODEM_GSM (user_data); NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self); GError *error = NULL; priv->call = NULL; if (priv->connect_properties) { g_hash_table_destroy (priv->connect_properties); priv->connect_properties = NULL; } if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, TRUE, NM_DEVICE_STATE_REASON_NONE); else { if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PIN)) ask_for_pin (self, FALSE); else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_WRONG)) ask_for_pin (self, TRUE); else { nm_log_warn (LOGD_MB, "GSM connection failed: (%d) %s", error ? error->code : -1, error && error->message ? error->message : "(unknown)"); g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (error)); } g_error_free (error); } }
static void handle_enable_pin_required (NMModemGsm *self) { NMModemGsmPrivate *priv = NM_MODEM_GSM_GET_PRIVATE (self); const char *pin = NULL; GValue *value; DBusGProxy *proxy; /* See if we have a PIN already */ value = g_hash_table_lookup (priv->connect_properties, "pin"); if (value && G_VALUE_HOLDS_STRING (value)) pin = g_value_get_string (value); /* If we do, send it */ if (pin) { proxy = nm_modem_generic_get_proxy (NM_MODEM_GENERIC (self), MM_OLD_DBUS_INTERFACE_MODEM_GSM_CARD); dbus_g_proxy_begin_call_with_timeout (proxy, "SendPin", stage1_pin_done, self, NULL, 10000, G_TYPE_STRING, pin, G_TYPE_INVALID); } else ask_for_pin (self, FALSE); }
gboolean mobile_helper_get_secrets (NMDeviceModemCapabilities capabilities, SecretsRequest *req, GError **error) { MobileHelperSecretsInfo *info = (MobileHelperSecretsInfo *) req; GtkWidget *widget; GtkEntry *secret_entry = NULL; applet_secrets_request_set_free_func (req, free_secrets_info); if (!req->hints || !g_strv_length (req->hints)) { g_set_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "%s.%d (%s): missing secrets hints.", __FILE__, __LINE__, __func__); return FALSE; } info->secret_name = g_strdup (req->hints[0]); /* Convert the input capabilities mask into a single value */ if (capabilities & NM_DEVICE_MODEM_CAPABILITY_LTE) /* All LTE modems treated as GSM/UMTS for the settings */ info->capability = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS; else if (capabilities & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) info->capability = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS; else if (capabilities & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) info->capability = NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO; else { g_set_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "%s.%d (%s): unknown modem capabilities (0x%X).", __FILE__, __LINE__, __func__, capabilities); return FALSE; } if (!strcmp (info->secret_name, NM_SETTING_GSM_PIN)) { widget = ask_for_pin (&secret_entry); } else if (!strcmp (info->secret_name, NM_SETTING_GSM_PASSWORD) || !strcmp (info->secret_name, NM_SETTING_CDMA_PASSWORD)) widget = applet_mobile_password_dialog_new (req->connection, &secret_entry); else { g_set_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "%s.%d (%s): unknown secrets hint '%s'.", __FILE__, __LINE__, __func__, info->secret_name); return FALSE; } info->dialog = widget; info->secret_entry = secret_entry; if (!widget || !secret_entry) { g_set_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_INTERNAL_ERROR, "%s.%d (%s): error asking for mobile secrets.", __FILE__, __LINE__, __func__); return FALSE; } g_signal_connect (widget, "response", G_CALLBACK (get_secrets_cb), info); gtk_window_set_position (GTK_WINDOW (widget), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_realize (GTK_WIDGET (widget)); gtk_window_present (GTK_WINDOW (widget)); return TRUE; }