[patch] connection information dialog, updated.

2005-06-30 Thread Robert Love
Here is a slightly more stetic version of the connection information
dialog, rediffed against current CVS.

Any consensus on this?  It is pretty simple and definitely needed, in my
opinion.  May I commit?

Robert Love

? gnome/applet/wireless-applet.gladep
Index: gnome/applet/applet.c
===
RCS file: /cvs/gnome/NetworkManager/gnome/applet/applet.c,v
retrieving revision 1.17
diff -u -u -r1.17 applet.c
--- gnome/applet/applet.c	23 Jun 2005 20:34:57 -	1.17
+++ gnome/applet/applet.c	26 Jun 2005 04:09:09 -
@@ -33,6 +33,7 @@
 
 #include string.h
 #include stdlib.h
+#include unistd.h
 #include sys/types.h
 #include sys/wait.h
 #include ctype.h
@@ -41,6 +42,12 @@
 #include math.h
 #include dirent.h
 #include time.h
+#include sys/ioctl.h
+#include sys/socket.h
+#include netinet/in.h
+#include arpa/inet.h
+#include sys/un.h
+#include net/if.h
 
 #include gtk/gtk.h
 #include glib/gi18n.h
@@ -159,8 +166,181 @@
 	return obj;
 }
 
+static GtkWidget * get_label (GtkWidget *info_dialog, GladeXML *xml, const char *name)
+{
+	GtkWidget *label;
+
+	if (xml != NULL)
+	{
+		label = glade_xml_get_widget (xml, name);
+		g_object_set_data (G_OBJECT (info_dialog), name, label);
+	}
+	else
+		label = g_object_get_data (G_OBJECT (info_dialog), name);
+
+	return label;
+}
+
+static void nmwa_show_socket_err (GtkWidget *info_dialog, const char *err)
+{
+	GtkWidget *error_dialog;
+	char *msg;
+	
+	msg = g_strdup_printf (span weight=\bold\ size=\larger\%s/span\n\n%s,
+	   _(Error displaying connection information: ), err);
+	error_dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (info_dialog),
+			 0, GTK_MESSAGE_ERROR,
+			 GTK_BUTTONS_OK, msg);
+	gtk_dialog_run (GTK_DIALOG (error_dialog));
+	gtk_widget_destroy (error_dialog);
+	g_free (msg);
+}
+
+static gboolean nmwa_update_info (NMWirelessApplet *applet)
+{
+	GtkWidget *info_dialog;
+	char *addr = NULL, *mask = NULL, *broadcast = NULL;
+	char *dest = NULL, *mac = NULL, *iface_and_type = NULL;
+	GtkWidget *label;
+	struct ifreq ifr;
+	int fd, flags;
+	gboolean ret_val = TRUE;
+	const char *iface;
+	NetworkDevice *dev;
+	gboolean ret = TRUE;
+
+	info_dialog = glade_xml_get_widget (applet-info_dialog_xml, info_dialog);
+	if (!info_dialog)
+	{
+		char *err = g_strdup (_(Could not find some required resources (the glade file)!));
+		nmwa_show_socket_err (info_dialog, err);
+		g_free (err);
+		return FALSE;
+	}
+
+	dev = nmwa_get_first_active_device (applet-gui_device_list);
+	iface = network_device_get_iface (dev);
+	if (!dev || !iface)
+	{
+		char *err = g_strdup (_(No active connections!));
+		nmwa_show_socket_err (info_dialog, err);
+		g_free (err);
+		return FALSE;
+	}
+
+	fd = socket (AF_INET, SOCK_DGRAM, 0);
+	if (fd  0)
+	{
+		char *err = g_strdup (_(Could not open socket!));
+		nmwa_show_socket_err (info_dialog, err);
+		g_free (err);
+		return FALSE;
+	}
+
+	ifr.ifr_addr.sa_family = AF_INET;
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (ioctl (fd, SIOCGIFADDR, ifr) == 0)
+		addr = g_strdup (inet_ntoa (((struct sockaddr_in *) ifr.ifr_addr)-sin_addr));
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (ioctl (fd, SIOCGIFFLAGS, ifr)  0)
+	{
+		char *err = g_strdup (_(SIOCGIFFLAGS failed on socket!));
+		nmwa_show_socket_err (info_dialog, err);
+		g_free (err);
+		ret = FALSE;
+		goto out;
+	}
+	flags = ifr.ifr_flags;
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (flags  IFF_BROADCAST  ioctl (fd, SIOCGIFBRDADDR, ifr) == 0)
+		broadcast = g_strdup (inet_ntoa (((struct sockaddr_in *) ifr.ifr_broadaddr)-sin_addr));
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (ioctl (fd, SIOCGIFNETMASK, ifr) == 0)
+		mask = g_strdup (inet_ntoa (((struct sockaddr_in *) ifr.ifr_addr)-sin_addr));
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (flags  IFF_POINTOPOINT  ioctl (fd, SIOCGIFDSTADDR, ifr) == 0)
+		dest = g_strdup (inet_ntoa (((struct sockaddr_in *) ifr.ifr_dstaddr)-sin_addr));
+
+	g_strlcpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name));
+	if (ioctl (fd, SIOCGIFHWADDR, ifr) == 0)
+		mac = g_strdup_printf (%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X,
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[0],
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[1],
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[2],
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[3],
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[4],
+		   (unsigned char) ifr.ifr_hwaddr.sa_data[5]);
+
+	label = get_label (info_dialog, applet-info_dialog_xml, label-interface);
+	gtk_label_set_text (GTK_LABEL (label), iface);
+	if (network_device_is_wired (dev))
+		iface_and_type = g_strdup_printf (_(Wired Ethernet (%s)), iface);
+	else
+		iface_and_type = g_strdup_printf (_(Wireless Ethernet (%s)), iface);	
+	gtk_label_set_text (GTK_LABEL (label), iface_and_type);
+
+	label = get_label (info_dialog, applet-info_dialog_xml, label-ip-address);
+	

Re: [patch] connection information dialog, updated.

2005-06-30 Thread Robert Love
On Thu, 2005-06-30 at 14:31 -0400, Dan Williams wrote:
 On Thu, 2005-06-30 at 12:36 -0400, Robert Love wrote:
  char *err = g_strdup (_(SIOCGIFFLAGS failed on socket!));
 
 Figure out a better error message for this that doesn't reference
 sockets or IFFLAGS, and then feel free to commit :)

Such demands!

I dove to the depths of my creativity and found a better error message.

Applied.  Also applied the wake-from-sleep interface patch.

Thanks,

Robert Love


___
NetworkManager-list mailing list
NetworkManager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list