I continue with the IPv6 support in gnome-network, now I have attached to this mail a patch for the gnome-remote-shell :-) -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Carlos Garcia Campos a.k.a. KaL elkalmail yahoo es carlosgc gnome org Grupo Linups Usuarios de SL/Linux de la UPSAM http://www.linups.org =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= PGP key: http://pgp.rediris.es:11371/pks/lookup?op=get&search=0x523E6462
? gnome-remote-shell.c.diff
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gnome-network/network-utilities/ChangeLog,v
retrieving revision 1.20
diff -u -u -r1.20 ChangeLog
--- ChangeLog 3 Oct 2003 12:33:59 -0000 1.20
+++ ChangeLog 3 Oct 2003 17:09:32 -0000
@@ -1,3 +1,8 @@
+2003-10-03 Carlos Garcia Campos <carlosgc gnome org>
+
+ * gnome-remote-shell.c (check_network_status, validate_host,
+ get_ip_version): added IPv6 support
+
2003-09-03 Emil Soleyman-Zomalan <emil nishra com>
* gnome-remote-shell.c: made it work correctly with any gnome-terminal
Index: gnome-remote-shell.c
===================================================================
RCS file: /cvs/gnome/gnome-network/network-utilities/gnome-remote-shell.c,v
retrieving revision 1.17
diff -u -u -r1.17 gnome-remote-shell.c
--- gnome-remote-shell.c 3 Oct 2003 12:33:59 -0000 1.17
+++ gnome-remote-shell.c 3 Oct 2003 17:09:32 -0000
@@ -39,6 +39,11 @@
#define SSH_PORT 22
#define TELNET_PORT 23
+enum {
+ IPV4,
+ IPV6
+};
+
static GConfClient *conf_client;
static GtkWidget *dialog;
static GtkWidget *ssh_method;
@@ -56,6 +61,7 @@
void port_default_toggled_cb (GtkToggleButton *button, gpointer user_data);
void radio_button_toggled_cb (GtkToggleButton *button, gpointer user_data);
+static gint get_ip_version (const gchar *ip_address);
static gboolean check_network_status (const gchar *host, gint port);
static void activate_shell (void);
static void set_spin_from_config (GtkWidget *spin, const gchar *key, gint default_value);
@@ -113,37 +119,94 @@
}
}
+static gint
+get_ip_version (const gchar *ip_address)
+{
+ struct hostent *host;
+
+ g_return_val_if_fail (ip_address != NULL, -1);
+
+ if (strlen (ip_address) > 0) {
+ host = gethostbyname2 (ip_address, PF_INET6);
+ if (host == NULL) {
+ host = gethostbyname2 (ip_address, AF_INET);
+ if (host == NULL)
+ return -1;
+ else
+ return IPV4;
+
+ return -1;
+ }
+ else
+ return IPV6;
+ }
+
+ return -1;
+}
+
static gboolean
check_network_status (const gchar *host, gint port)
{
struct sockaddr_in *addr;
+ struct sockaddr_in6 *addr6;
struct hostent *hostname;
gint sd;
gchar *msgerror;
- hostname = gethostbyname (host);
-
- addr = (struct sockaddr_in *) g_malloc (sizeof (struct sockaddr_in));
+ switch (get_ip_version (host))
+ {
+ case IPV4:
+ hostname = gethostbyname2 (host, AF_INET);
- sd = socket (AF_INET, SOCK_STREAM, 0);
- addr->sin_family = AF_INET;
- addr->sin_port = g_htons (port);
- addr->sin_addr = *(struct in_addr *) hostname->h_addr;
+ addr = (struct sockaddr_in *) g_malloc (sizeof (struct sockaddr_in));
+
+ sd = socket (AF_INET, SOCK_STREAM, 0);
+ addr->sin_family = AF_INET;
+ addr->sin_port = g_htons (port);
+ addr->sin_addr = *(struct in_addr *) hostname->h_addr;
+
+ errno = 0;
+ if (connect (sd, (struct sockaddr *) addr, sizeof (struct sockaddr_in)) != 0) {
+ msgerror = (gchar *) strerror (errno);
+ msgerror = g_locale_to_utf8 (msgerror, strlen (msgerror), NULL, NULL, NULL);
+ gnome_error_dialog_parented (_(msgerror), GTK_WINDOW (dialog));
+ g_free (addr);
+
+ return FALSE;
+ }
+ shutdown (sd, 2);
- errno = 0;
- if (connect (sd, (struct sockaddr *) addr, sizeof (struct sockaddr_in)) != 0)
- {
- msgerror = (gchar *) strerror (errno);
- msgerror = g_locale_to_utf8 (msgerror, strlen (msgerror), NULL, NULL, NULL);
- gnome_error_dialog_parented (_(msgerror), GTK_WINDOW (dialog));
g_free (addr);
- return FALSE;
- }
- shutdown (sd, 2);
+ break;
+ case IPV6:
+ hostname = gethostbyname2 (host, PF_INET6);
+
+ addr6 = (struct sockaddr_in6 *) g_malloc (sizeof (struct sockaddr_in6));
+
+ sd = socket (PF_INET6, SOCK_STREAM, 0);
+ addr6->sin6_family = PF_INET6;
+ addr6->sin6_port = g_htons (port);
+ addr6->sin6_addr = *(struct in6_addr *) hostname->h_addr;
+
+ errno = 0;
+ if (connect (sd, (struct sockaddr *) addr6, sizeof (struct sockaddr_in6)) != 0) {
+ msgerror = (gchar *) strerror (errno);
+ msgerror = g_locale_to_utf8 (msgerror, strlen (msgerror), NULL, NULL, NULL);
+ gnome_error_dialog_parented (_(msgerror), GTK_WINDOW (dialog));
+ g_free (addr6);
+
+ return FALSE;
+ }
+ shutdown (sd, 2);
- g_free (addr);
+ g_free (addr6);
+ break;
+ case -1:
+ return FALSE;
+ }
+
return TRUE;
}
@@ -181,7 +244,7 @@
return;
}
- if (validate_host(host) == FALSE)
+ if (validate_host (host) == FALSE)
return;
if (check_network_status (host, port) == FALSE)
@@ -350,10 +413,14 @@
{
struct hostent *hostname;
- hostname = gethostbyname(host);
+ hostname = gethostbyname2 (host, PF_INET6);
if (hostname == NULL) {
- gnome_error_dialog_parented (_("The host cannot be found."), GTK_WINDOW (dialog));
- return FALSE;
+ hostname = gethostbyname2 (host, AF_INET);
+ if (hostname == NULL) {
+ gnome_error_dialog_parented (_("The host cannot be found."),
+ GTK_WINDOW (dialog));
+ return FALSE;
+ }
}
return TRUE;
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente