network-manager-applet r552 - in branches/network-manager-applet-0-6: . src



Author: tambeti
Date: Fri Feb 22 21:51:47 2008
New Revision: 552
URL: http://svn.gnome.org/viewvc/network-manager-applet?rev=552&view=rev

Log:
2008-02-22  Tambet Ingo  <tambet gmail com>

        Implement prepopulating of the passphrase dialog with the last
known good
        values. Especially helpful for WPA-EAP which has a lot of
widgets to fill.

        * src/passphrase-dialog.c (populate_dialog): Implement.

        * src/nm-wired-dialog.c (populate_dialog): Implement.

        * src/wireless-security-manager.c: Store wireless options in a
        * hash to store
        their types.
        (wsm_get_option_by_type): Implement.

        * src/nm-gconf-wso.c (nm_gconf_wso_populate_wso): Implement.

        * src/nm-gconf-wso-wpa-psk.c
        * (nm_gconf_wso_wpa_psk_get_wpa_version): Implement.

        * src/nm-gconf-wso-wpa-eap.c
        * (nm_gconf_wso_wpa_eap_get_wpa_version): Implement.

        * src/wireless-security-option.c
        * (wso_populate_from_dbus_params): Implement.

        * src/wso-wpa-psk.c (populate_from_dbus_func): Implement.

        * src/wso-wpa-eap.c (populate_from_dbus_func): Implement.

        * src/wso-leap.c (widget_create_func): Comment out the
        * "show_password" button
        signal handler. For some unknown reason, it totally breaks the
LEAP dialog.
        (populate_from_dbus_func): Implement.



Modified:
   branches/network-manager-applet-0-6/ChangeLog
   branches/network-manager-applet-0-6/src/applet.glade
   branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c
   branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h
   branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c
   branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h
   branches/network-manager-applet-0-6/src/nm-gconf-wso.c
   branches/network-manager-applet-0-6/src/nm-gconf-wso.h
   branches/network-manager-applet-0-6/src/nm-wired-dialog.c
   branches/network-manager-applet-0-6/src/passphrase-dialog.c
   branches/network-manager-applet-0-6/src/wireless-security-manager.c
   branches/network-manager-applet-0-6/src/wireless-security-manager.h
   branches/network-manager-applet-0-6/src/wireless-security-option.c
   branches/network-manager-applet-0-6/src/wireless-security-option.h
   branches/network-manager-applet-0-6/src/wso-leap.c
   branches/network-manager-applet-0-6/src/wso-private.h
   branches/network-manager-applet-0-6/src/wso-wpa-eap.c
   branches/network-manager-applet-0-6/src/wso-wpa-psk.c

Modified: branches/network-manager-applet-0-6/src/applet.glade
==============================================================================
--- branches/network-manager-applet-0-6/src/applet.glade	(original)
+++ branches/network-manager-applet-0-6/src/applet.glade	Fri Feb 22 21:51:47 2008
@@ -2171,7 +2171,35 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkHBox" id="hbox9">
+	    <widget class="GtkLabel" id="label48">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"></property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox17">
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">5</property>
@@ -2216,6 +2244,7 @@
 	      <property name="top_attach">2</property>
 	      <property name="bottom_attach">3</property>
 	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 	</widget>

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c	Fri Feb 22 21:51:47 2008
@@ -436,6 +436,14 @@
 	gnome_keyring_attribute_list_free (attributes);
 }
 
+gboolean
+nm_gconf_wso_wpa_eap_get_wpa_version (NMGConfWSOWPA_EAP *self)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	return self->priv->wpa_version;
+}
+
 static void
 nm_gconf_wso_wpa_eap_init (NMGConfWSOWPA_EAP *self)
 {

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h	Fri Feb 22 21:51:47 2008
@@ -59,4 +59,6 @@
 
 NMGConfWSOWPA_EAP * nm_gconf_wso_wpa_eap_new_deserialize_gconf (GConfClient *client, NMNetworkType type, const char *network, int we_cipher);
 
+gboolean nm_gconf_wso_wpa_eap_get_wpa_version (NMGConfWSOWPA_EAP *gconf_wso);
+
 #endif	/* NM_GCONF_WSO_WPA_EAP_H */

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c	Fri Feb 22 21:51:47 2008
@@ -135,6 +135,14 @@
 	return TRUE;
 }
 
+gboolean
+nm_gconf_wso_wpa_psk_get_wpa_version (NMGConfWSOWPA_PSK *self)
+{
+	g_return_val_if_fail (self != NULL, FALSE);
+
+	return self->priv->wpa_version;
+}
+
 static void
 nm_gconf_wso_wpa_psk_init (NMGConfWSOWPA_PSK * self)
 {

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h	Fri Feb 22 21:51:47 2008
@@ -58,4 +58,6 @@
 
 NMGConfWSOWPA_PSK * nm_gconf_wso_wpa_psk_new_deserialize_gconf (GConfClient *client, NMNetworkType type, const char *network, int we_cipher);
 
+gboolean nm_gconf_wso_wpa_psk_get_wpa_version (NMGConfWSOWPA_PSK *self);
+
 #endif	/* NM_GCONF_WSO_WPA_PSK_H */

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso.c	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso.c	Fri Feb 22 21:51:47 2008
@@ -202,6 +202,34 @@
 	return gconf_wso;
 }
 
+/* HACK: to convert the NMGConfWSO -> WirelessSecurityOption,
+ * we serialize the NMGConfWSO to a dbus message and then let
+ * the WSO to deserialize it.
+ */
+gboolean
+nm_gconf_wso_populate_wso (NMGConfWSO *self, WirelessSecurityOption *opt)
+{
+	DBusMessage *message;
+	DBusMessageIter iter;
+	gboolean success = FALSE;
+
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (opt != NULL, FALSE);
+
+	message = dbus_message_new_method_call (NMI_DBUS_SERVICE, NMI_DBUS_PATH, NMI_DBUS_INTERFACE, "foobar");
+	dbus_message_iter_init_append (message, &iter);
+
+	if (nm_gconf_wso_serialize_dbus (self, &iter)) {
+		dbus_message_iter_init (message, &iter);
+
+		success = wso_populate_from_dbus_params (opt, &iter);
+	}
+
+	dbus_message_unref (message);
+
+	return success;
+}
+
 void
 nm_gconf_wso_set_we_cipher (NMGConfWSO *self,
                             int we_cipher)

Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso.h	(original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso.h	Fri Feb 22 21:51:47 2008
@@ -80,6 +80,8 @@
 
 NMGConfWSO * nm_gconf_wso_new_from_wso (WirelessSecurityOption *opt, const char *ssid);
 
+gboolean nm_gconf_wso_populate_wso (NMGConfWSO *self, WirelessSecurityOption *opt);
+
 int nm_gconf_wso_get_we_cipher (NMGConfWSO *self);
 
 const char * nm_gconf_wso_get_key (NMGConfWSO *self);

Modified: branches/network-manager-applet-0-6/src/nm-wired-dialog.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-wired-dialog.c	(original)
+++ branches/network-manager-applet-0-6/src/nm-wired-dialog.c	Fri Feb 22 21:51:47 2008
@@ -11,6 +11,7 @@
 #include "nm-utils.h"
 #include "NetworkManager.h"
 #include "wso-wpa-eap.h"
+#include "nm-gconf-wso-wpa-eap.h"
 
 
 #define WIRED_DIALOG_INFO_TAG "wired-dialog-info-tag"
@@ -215,6 +216,27 @@
 	gtk_window_present (GTK_WINDOW (dialog));
 }
 
+static void
+populate_dialog (GtkWidget *dialog, GConfClient *gconf_client, const char *network_id)
+{
+	char *escaped_network;
+	NMGConfWSO *gconf_wso;
+
+	if (!network_id)
+		return;
+
+	escaped_network = gconf_escape_key (network_id, strlen (network_id));
+	gconf_wso = nm_gconf_wso_new_deserialize_gconf (gconf_client, NETWORK_TYPE_WIRED, escaped_network);
+	g_free (escaped_network);
+
+	if (gconf_wso && NM_IS_GCONF_WSO_WPA_EAP (gconf_wso)) {
+		WiredDialogInfo *info;
+
+		info = g_object_get_data (G_OBJECT (dialog), WIRED_DIALOG_INFO_TAG);
+		nm_gconf_wso_populate_wso (gconf_wso, info->opt);
+	}
+}
+
 void
 nma_wired_dialog_ask_password (NMApplet *applet,
 						 const char *network_id,
@@ -236,6 +258,8 @@
 
 	g_signal_connect (dialog, "response", G_CALLBACK (ask_password_response), NULL);
 
+	populate_dialog (dialog, applet->gconf_client, network_id);
+
 	gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
 	gtk_widget_realize (dialog);
 	gdk_x11_window_set_user_time (dialog->window, gdk_x11_get_server_time (dialog->window));

Modified: branches/network-manager-applet-0-6/src/passphrase-dialog.c
==============================================================================
--- branches/network-manager-applet-0-6/src/passphrase-dialog.c	(original)
+++ branches/network-manager-applet-0-6/src/passphrase-dialog.c	Fri Feb 22 21:51:47 2008
@@ -25,6 +25,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <iwlib.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 #include <glib.h>
@@ -39,6 +40,10 @@
 #include "NetworkManager.h"
 #include "wireless-security-manager.h"
 
+#include "nm-gconf-wso-wpa-eap.h"
+#include "nm-gconf-wso-wpa-psk.h"
+#include "nm-gconf-wso-leap.h"
+
 typedef struct {
 	NMApplet *applet;
 	DBusMessage *message;
@@ -162,6 +167,44 @@
 }
 
 
+static void
+populate_dialog (GConfClient *gconf_client, const char *essid, WirelessSecurityManager *wsm)
+{
+	char *escaped_network;
+	NMGConfWSO *gconf_wso;
+	WirelessSecurityOption *wso = NULL;
+
+	if (!essid)
+		return;
+
+	escaped_network = gconf_escape_key (essid, strlen (essid));
+	gconf_wso = nm_gconf_wso_new_deserialize_gconf (gconf_client, NETWORK_TYPE_ALLOWED, escaped_network);
+	g_free (escaped_network);
+
+	if (!gconf_wso)
+		/* Not in GConf yet */
+		return;
+
+	if (NM_IS_GCONF_WSO_WPA_EAP (gconf_wso)) {
+		if (nm_gconf_wso_wpa_eap_get_wpa_version (NM_GCONF_WSO_WPA_EAP (gconf_wso)) == IW_AUTH_WPA_VERSION_WPA)
+			wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA_EAP);
+		else
+			wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA2_EAP);
+	} else if (NM_IS_GCONF_WSO_WPA_PSK (gconf_wso)) {
+		if (nm_gconf_wso_wpa_psk_get_wpa_version (NM_GCONF_WSO_WPA_PSK (gconf_wso)) == IW_AUTH_WPA_VERSION_WPA)
+			wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA_PSK);
+		else
+			wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA2_PSK);
+	} else if (NM_IS_GCONF_WSO_LEAP (gconf_wso))
+		wso = wsm_get_option_by_type (wsm, WSO_TYPE_LEAP);
+
+	/* FIXME: Handle WEPs */
+
+	if (wso)
+		nm_gconf_wso_populate_wso (gconf_wso, wso);
+}
+
+
 /*
  * nmi_passphrase_dialog_new
  *
@@ -253,6 +296,8 @@
 
 	g_signal_connect (dialog, "response", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_response_received), info);
 
+	populate_dialog (applet->gconf_client, wireless_network_get_essid (net), wsm);
+
 	/* Bash focus-stealing prevention in the face */
 	gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
 	gtk_widget_realize (GTK_WIDGET (dialog));

Modified: branches/network-manager-applet-0-6/src/wireless-security-manager.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-manager.c	(original)
+++ branches/network-manager-applet-0-6/src/wireless-security-manager.c	Fri Feb 22 21:51:47 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* NetworkManager Wireless Applet -- Display wireless access points and allow user control
  *
  * Dan Williams <dcbw redhat com>
@@ -41,7 +43,7 @@
 struct WirelessSecurityManager
 {
 	char *	glade_file;
-	GSList *	options;
+	GHashTable *options;
 };
 
 
@@ -53,11 +55,18 @@
 
 	wsm = g_malloc0 (sizeof (WirelessSecurityManager));
 	wsm->glade_file = g_strdup (glade_file);
+	wsm->options = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) wso_free);
 
 	return wsm;
 }
 
 
+static gboolean
+remove_all (gpointer key, gpointer value, gpointer user_data)
+{
+	return TRUE;
+}
+
 gboolean wsm_set_capabilities (WirelessSecurityManager *wsm, guint32 capabilities)
 {
 	WirelessSecurityOption *		opt;
@@ -66,27 +75,25 @@
 	g_return_val_if_fail (wsm != NULL, FALSE);
 
 	/* Free previous options */
-	g_slist_foreach (wsm->options, (GFunc) wso_free, NULL);
-	g_slist_free (wsm->options);
-	wsm->options = NULL;
+	g_hash_table_foreach_remove (wsm->options, remove_all, NULL);
 
 	if (capabilities & NM_802_11_CAP_PROTO_NONE)
 	{
 		opt = wso_none_new (wsm->glade_file);
 		if (opt)
-			wsm->options = g_slist_append (wsm->options, opt);
+			g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_NONE), opt);
 	}
 
 	if (capabilities & NM_802_11_CAP_PROTO_WEP)
 	{
 		if ((opt = wso_wep_passphrase_new (wsm->glade_file)))
-			wsm->options = g_slist_append (wsm->options, opt);
+			g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_PASSPHRASE), opt);
 
 		if ((opt = wso_wep_hex_new (wsm->glade_file)))
-			wsm->options = g_slist_append (wsm->options, opt);
+			g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_HEX), opt);
 
 		if ((opt = wso_wep_ascii_new (wsm->glade_file)))
-			wsm->options = g_slist_append (wsm->options, opt);
+			g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_ASCII), opt);
 	}
 
 	if (capabilities & NM_802_11_CAP_PROTO_WPA)
@@ -94,12 +101,12 @@
 		if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
 		{
 			if ((opt = wso_wpa_eap_new (wsm->glade_file, capabilities, FALSE)))
-				wsm->options = g_slist_append (wsm->options, opt);
+				g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA_EAP), opt);
 		}
 		if (capabilities & NM_802_11_CAP_KEY_MGMT_PSK)
 		{
 			if ((opt = wso_wpa_psk_new (wsm->glade_file, capabilities, FALSE)))
-				wsm->options = g_slist_append (wsm->options, opt);
+				g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA_PSK), opt);
 		}
 	}
 
@@ -108,19 +115,19 @@
 		if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
 		{
 			if ((opt = wso_wpa_eap_new (wsm->glade_file, capabilities, TRUE)))
-				wsm->options = g_slist_append (wsm->options, opt);
+				g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA2_EAP), opt);
 		}
 		if (capabilities & NM_802_11_CAP_KEY_MGMT_PSK)
 		{
 			if ((opt = wso_wpa_psk_new (wsm->glade_file, capabilities, TRUE)))
-				wsm->options = g_slist_append (wsm->options, opt);
+				g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA2_PSK), opt);
 		}
 	}
 
 	if ((opt = wso_leap_new (wsm->glade_file, capabilities)))
-		wsm->options = g_slist_append (wsm->options, opt);
+		g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_LEAP), opt);
 
-	if (!wsm->options)
+	if (g_hash_table_size (wsm->options) == 0)
 	{
 		nm_warning ("capabilities='%x' and did not match any protocals, not even none!", capabilities);
 		ret = FALSE;
@@ -131,27 +138,57 @@
 
 #define NAME_COLUMN	0
 #define OPT_COLUMN	1
+
+static void
+add_wso_type (gpointer key, gpointer val, gpointer user_data)
+{
+	GSList **list = (GSList **) user_data;
+
+	*list = g_slist_prepend (*list, key);
+}
+
+static int
+sort_wso_types (gconstpointer a, gconstpointer b)
+{
+	int aa = GPOINTER_TO_INT (a);
+	int bb = GPOINTER_TO_INT (b);
+
+	if (aa < bb)
+		return -1;
+	if (aa > bb)
+		return 1;
+
+	return 0;
+}
+
 void wsm_update_combo (WirelessSecurityManager *wsm, GtkComboBox *combo)
 {
-	GtkListStore *	model;
-	GSList *		elt;
+	GtkListStore *model;
+	GSList *iter;
+	GSList *wso_types = NULL;
 
 	g_return_if_fail (wsm != NULL);
 	g_return_if_fail (combo != NULL);
 
-	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
+	/* All this messing around with wso_types list is for sorting.
+	   We can't just sort the model since the model itself doesn't
+	   have enough information for sorting. */
 
-	for (elt = wsm->options; elt; elt = elt->next)
-	{
-		WirelessSecurityOption * opt = (WirelessSecurityOption *) (elt->data);
-		GtkTreeIter			iter;
+	g_hash_table_foreach (wsm->options, add_wso_type, &wso_types);
+	wso_types = g_slist_sort (wso_types, sort_wso_types);
+
+	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
 
-		g_assert (opt);
+	for (iter = wso_types; iter; iter = iter->next) {
+		WirelessSecurityOption *opt = (WirelessSecurityOption *) g_hash_table_lookup (wsm->options, iter->data);
+		GtkTreeIter iter;
 
 		gtk_list_store_append (model, &iter);
 		gtk_list_store_set (model, &iter, NAME_COLUMN, wso_get_name (opt), OPT_COLUMN, opt, -1);
 	}
 
+	g_slist_free (wso_types);
+
 	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (model));
 	gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
 }
@@ -210,13 +247,19 @@
 }
 
 
+WirelessSecurityOption * wsm_get_option_by_type (WirelessSecurityManager *wsm, WSOType type)
+{
+	g_return_val_if_fail (wsm != NULL, NULL);
+
+	return (WirelessSecurityOption *) g_hash_table_lookup (wsm->options, GINT_TO_POINTER (type));
+}
+
 void wsm_free (WirelessSecurityManager *wsm)
 {
 	g_return_if_fail (wsm != NULL);
 
 	g_free (wsm->glade_file);
-	g_slist_foreach (wsm->options, (GFunc) wso_free, NULL);
-	g_slist_free (wsm->options);
+	g_hash_table_destroy (wsm->options);
 	memset (wsm, 0, sizeof (WirelessSecurityManager));
 	g_free (wsm);
 }

Modified: branches/network-manager-applet-0-6/src/wireless-security-manager.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-manager.h	(original)
+++ branches/network-manager-applet-0-6/src/wireless-security-manager.h	Fri Feb 22 21:51:47 2008
@@ -28,6 +28,17 @@
 
 typedef struct WirelessSecurityManager WirelessSecurityManager;
 
+typedef enum {
+  WSO_TYPE_NONE,
+  WSO_TYPE_WEP_PASSPHRASE,
+  WSO_TYPE_WEP_HEX,
+  WSO_TYPE_WEP_ASCII,
+  WSO_TYPE_WPA_EAP,
+  WSO_TYPE_WPA_PSK,
+  WSO_TYPE_WPA2_EAP,
+  WSO_TYPE_WPA2_PSK,
+  WSO_TYPE_LEAP
+} WSOType;
 
 WirelessSecurityManager *	wsm_new (const char * glade_file);
 
@@ -45,4 +56,6 @@
 
 WirelessSecurityOption *		wsm_get_option_for_active (WirelessSecurityManager *wsm, GtkComboBox *combo);
 
+WirelessSecurityOption * wsm_get_option_by_type (WirelessSecurityManager *wsm, WSOType type);
+
 #endif	/* WIRELESS_SECURITY_MANAGER_H */

Modified: branches/network-manager-applet-0-6/src/wireless-security-option.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-option.c	(original)
+++ branches/network-manager-applet-0-6/src/wireless-security-option.c	Fri Feb 22 21:51:47 2008
@@ -81,6 +81,28 @@
 	return (*(opt->append_dbus_params_func))(opt, ssid, message);
 }
 
+gboolean
+wso_populate_from_dbus_params (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+	gboolean success = TRUE;
+
+	g_return_val_if_fail (opt != NULL, FALSE);
+	g_return_val_if_fail (iter != NULL, FALSE);
+
+	if (opt->append_dbus_params_func) {
+		int cipher;
+
+		/* Remove the cipher */
+		g_return_val_if_fail (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_INT32, FALSE);
+		dbus_message_iter_get_basic (iter, &cipher);
+		dbus_message_iter_next (iter);
+
+		success = opt->populate_from_dbus_func (opt, iter);
+	}
+
+	return success;
+}
+
 void wso_free (WirelessSecurityOption * opt)
 {
 	/* Free the option-specific data first */

Modified: branches/network-manager-applet-0-6/src/wireless-security-option.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-option.h	(original)
+++ branches/network-manager-applet-0-6/src/wireless-security-option.h	Fri Feb 22 21:51:47 2008
@@ -39,6 +39,8 @@
 
 gboolean		wso_append_dbus_params (WirelessSecurityOption *opt, const char *ssid, DBusMessage *message);
 
+gboolean		wso_populate_from_dbus_params (WirelessSecurityOption *opt, DBusMessageIter *iter);
+
 void			wso_free (WirelessSecurityOption * opt);
 
 #endif	/* WIRELESS_SECURITY_OPTION_H */

Modified: branches/network-manager-applet-0-6/src/wso-leap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-leap.c	(original)
+++ branches/network-manager-applet-0-6/src/wso-leap.c	Fri Feb 22 21:51:47 2008
@@ -117,8 +117,9 @@
 	entry = glade_xml_get_widget (opt->uixml, "leap_password_entry");
 	g_signal_connect (G_OBJECT (entry), "changed", validate_cb, user_data);
 
-	widget = glade_xml_get_widget (opt->uixml, "leap_show_password");
-	g_signal_connect (widget, "clicked", GTK_SIGNAL_FUNC (show_password_cb), entry);
+	/* FIXME: ugh, this breaks everything and I have no idea why */
+/* 	widget = glade_xml_get_widget (opt->uixml, "leap_show_password"); */
+/* 	g_signal_connect (widget, "clicked", GTK_SIGNAL_FUNC (show_password_cb), entry); */
 
 	/* set-up key_mgmt combo box */
 
@@ -143,6 +144,54 @@
 }
 
 
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+	char *username = NULL;
+	char *password = NULL;
+	char *key_mgmt = NULL;
+	GtkWidget *w;
+
+	if (!nmu_security_deserialize_leap (iter, &username, &password, &key_mgmt))
+		return FALSE;
+
+	if (username) {
+		w = glade_xml_get_widget (opt->uixml, "leap_username_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), username);
+	}
+
+	if (password) {
+		w = glade_xml_get_widget (opt->uixml, "leap_password_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), password);
+	}
+
+	if (key_mgmt) {
+		GtkTreeModel *model;
+		GtkTreeIter iter;
+		gboolean valid;
+
+		w = glade_xml_get_widget (opt->uixml, "leap_key_mgmt_combobox");
+		model = gtk_combo_box_get_model (GTK_COMBO_BOX (w));
+
+		valid = gtk_tree_model_get_iter_first (model, &iter);
+		while (valid) {
+			gchar *row = NULL;
+
+			gtk_tree_model_get (model, &iter, 1, &row, -1);
+			if (row && strcmp (row, key_mgmt) == 0) {
+				gtk_combo_box_set_active_iter (GTK_COMBO_BOX (w), &iter);
+				valid = FALSE;
+			} else 
+				valid = gtk_tree_model_iter_next (model, &iter);
+
+			g_free (row);
+		}
+	}
+
+	return TRUE;
+}
+
+
 WirelessSecurityOption *
 wso_leap_new (const char *glade_file,
               int capabilities)
@@ -158,6 +207,7 @@
 	opt->validate_input_func = validate_input_func;
 	opt->widget_create_func = widget_create_func;
 	opt->append_dbus_params_func = append_dbus_params_func;
+	opt->populate_from_dbus_func = populate_from_dbus_func;
 
 	if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
 	{

Modified: branches/network-manager-applet-0-6/src/wso-private.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-private.h	(original)
+++ branches/network-manager-applet-0-6/src/wso-private.h	Fri Feb 22 21:51:47 2008
@@ -66,6 +66,8 @@
 	 * dbus message describing this particular security option
 	 */
 	gboolean		(*append_dbus_params_func)(WirelessSecurityOption *opt, const char *ssid, DBusMessage *message);
+
+	gboolean		(*populate_from_dbus_func)(WirelessSecurityOption *opt, DBusMessageIter *iter);
 };
 
 

Modified: branches/network-manager-applet-0-6/src/wso-wpa-eap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-wpa-eap.c	(original)
+++ branches/network-manager-applet-0-6/src/wso-wpa-eap.c	Fri Feb 22 21:51:47 2008
@@ -220,6 +220,99 @@
 }
 
 
+typedef struct {
+	GtkComboBox *combo;
+	gint value;
+} ComboSelectInfo;
+
+static gboolean
+combo_select (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
+{
+	ComboSelectInfo *info = user_data;
+	GValue val = { 0, };
+	gint i;
+
+	gtk_tree_model_get_value (model, iter, 1, &val);
+	i = g_value_get_int (&val);
+
+	if (i == info->value) {
+		gtk_combo_box_set_active_iter (info->combo, iter);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+	char *identity = NULL;
+	char *passwd = NULL;
+	char *anon_identity = NULL;
+	char *private_key_passwd = NULL;
+	char *private_key_file = NULL;
+	char *client_cert_file = NULL;
+	char *ca_cert_file = NULL;
+	int wpa_version;
+	int eap_method;
+	int key_type;
+	GtkWidget *w;
+	ComboSelectInfo info;
+
+	if (!nmu_security_deserialize_wpa_eap (iter, &eap_method, &key_type, &identity, &passwd,
+								    &anon_identity, &private_key_passwd, &private_key_file,
+								    &client_cert_file, &ca_cert_file, &wpa_version))
+		return FALSE;
+
+	w = glade_xml_get_widget (opt->uixml, "wpa_eap_eap_method_combo");
+	info.combo = GTK_COMBO_BOX (w);
+	info.value = eap_method;
+	gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+	w = glade_xml_get_widget (opt->uixml, "wpa_eap_key_type_combo");
+	info.combo = GTK_COMBO_BOX (w);
+	info.value = key_type;
+	gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+	if (identity) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_identity_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), identity);
+	}
+
+	if (passwd) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_passwd_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), passwd);
+	}
+
+	if (anon_identity) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_anon_identity_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), anon_identity);
+	}
+
+	if (private_key_passwd) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_private_key_passwd_entry");
+		gtk_entry_set_text (GTK_ENTRY (w), private_key_passwd);
+	}
+
+	if (client_cert_file && g_file_test (client_cert_file, G_FILE_TEST_EXISTS)) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_client_cert_file_chooser_button");
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), client_cert_file);
+	}
+
+	if (ca_cert_file && g_file_test (ca_cert_file, G_FILE_TEST_EXISTS)) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_ca_cert_file_chooser_button");
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), ca_cert_file);
+	}
+
+	if (private_key_file && g_file_test (private_key_file, G_FILE_TEST_EXISTS)) {
+		w = glade_xml_get_widget (opt->uixml, "wpa_eap_private_key_file_chooser_button");
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), private_key_file);
+	}
+
+	return TRUE;
+}
+
+
 WirelessSecurityOption *
 wso_wpa_eap_new (const char *glade_file,
                  int capabilities,
@@ -230,7 +323,6 @@
 	GtkWidget *			eap_method_combo;
 	GtkWidget *			key_type_combo;
 	GtkWidget *			phase2_type_combo;
-	GtkListStore *			model;
 	GtkTreeModel *			tree_model;
 	GtkTreeIter			iter;
 	GtkCellRenderer *		renderer;
@@ -248,6 +340,7 @@
 	opt->validate_input_func = validate_input_func;
 	opt->widget_create_func = widget_create_func;
 	opt->append_dbus_params_func = append_dbus_params_func;
+	opt->populate_from_dbus_func = populate_from_dbus_func;
 
 	if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
 	{
@@ -256,9 +349,9 @@
 	}
 
 	eap_method_combo = glade_xml_get_widget (opt->uixml, "wpa_eap_eap_method_combo");
-	model = wso_wpa_create_eap_method_model ();
-	gtk_combo_box_set_model (GTK_COMBO_BOX (eap_method_combo), GTK_TREE_MODEL (model));
-	gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+	tree_model = wso_wpa_create_eap_method_model ();
+	gtk_combo_box_set_model (GTK_COMBO_BOX (eap_method_combo), tree_model);
+	gtk_tree_model_get_iter_first (tree_model, &iter);
 	gtk_combo_box_set_active_iter (GTK_COMBO_BOX (eap_method_combo), &iter);
 
 	/* FIXME: Why do we need this here but not in the same place in wso-wpa-psk.c ? */

Modified: branches/network-manager-applet-0-6/src/wso-wpa-psk.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-wpa-psk.c	(original)
+++ branches/network-manager-applet-0-6/src/wso-wpa-psk.c	Fri Feb 22 21:51:47 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* NetworkManager Wireless Applet -- Display wireless access points and allow user control
  *
  * Dan Williams <dcbw redhat com>
@@ -132,6 +134,49 @@
 }
 
 
+typedef struct {
+	GtkComboBox *combo;
+	gint value;
+} ComboSelectInfo;
+
+static gboolean
+combo_select (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
+{
+	ComboSelectInfo *info = user_data;
+	GValue val = { 0, };
+	gint i;
+
+	gtk_tree_model_get_value (model, iter, WPA_KEY_TYPE_CIPHER_COL, &val);
+	i = g_value_get_int (&val);
+
+	if (i == info->value) {
+		gtk_combo_box_set_active_iter (info->combo, iter);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+	char *key = NULL;
+	int key_len;
+	int wpa_version;
+	int key_mgt;
+	ComboSelectInfo info;
+
+  	if (!nmu_security_deserialize_wpa_psk (iter, &key, &key_len, &wpa_version, &key_mgt))
+		return FALSE;
+
+	info.combo = GTK_COMBO_BOX (glade_xml_get_widget (opt->uixml, opt->data->key_type_combo_name));
+	info.value = key_mgt;
+	gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+	return TRUE;
+}
+
+
 static void
 key_type_combo_changed_cb (GtkComboBox *combo,
                            gpointer user_data)
@@ -184,6 +229,7 @@
 	opt->validate_input_func = validate_input_func;
 	opt->widget_create_func = widget_create_func;
 	opt->append_dbus_params_func = append_dbus_params_func;
+	opt->populate_from_dbus_func = populate_from_dbus_func;
 
 	if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
 	{



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]