Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fwife.git;a=commitdiff;h=aaf5b25e152abc8aa62b8cc1297e7e25d410b3bf

commit aaf5b25e152abc8aa62b8cc1297e7e25d410b3bf
Author: Elentir <elen...@mailoo.org>
Date:   Tue Jul 28 11:55:31 2009 +0200

improve netconfig plugin

* ask for a dhcp research on networks before configuration
* add button for dsl configuration instead of a dialogbox

diff --git a/src/plugins/netconf.c b/src/plugins/netconf.c
index 51238cc..62009b2 100644
--- a/src/plugins/netconf.c
+++ b/src/plugins/netconf.c
@@ -1,8 +1,8 @@
/*
*  netconf.c for Fwife
- *
+ *
*  Copyright (c) 2008,2009 by Albar Boris <bori...@cegetel.net>
- *
+ *
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
@@ -15,10 +15,10 @@
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
*  USA.
*/
-
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -37,6 +37,13 @@
#include <sys/wait.h>
#include <unistd.h>
#include <libintl.h>
+#include <signal.h>
+#include <setjmp.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>

#include "common.h"

@@ -46,12 +53,18 @@ static GList *interfaceslist=NULL;

extern GtkWidget *assistant;

+/* profile used do write configuration */
+static fwnet_profile_t *newprofile=NULL;
+
+/* Used to timeout a connect */
+static jmp_buf timeout_jump;
+
enum
{
COLUMN_NET_IMAGE,
COLUMN_NET_NAME,
COLUMN_NET_DESC,
-       COLUMN_NET_TYPE
+       COLUMN_NET_TYPE
};

plugin_t plugin =
@@ -78,6 +91,74 @@ plugin_t *info()
return &plugin;
}

+void timeout(int sig)
+{
+    longjmp( timeout_jump, 1 ) ;
+}
+
+int tryconnect()
+{
+       int sControl;
+       char *host = "www.frugalware.org";
+       int port = 80;
+       int timeouttime = 2;
+       struct sockaddr_in sin;
+       struct hostent* phe;
+
+       memset(&sin,0,sizeof(sin));
+       sin.sin_family = AF_INET;
+       sin.sin_port = htons(port);
+
+       if ((signed)(sin.sin_addr.s_addr = inet_addr(host)) == -1)
+       {
+               if ((phe = gethostbyname(host)) == NULL)
+               {
+                       return -1;
+               }
+               memcpy((char *)&sin.sin_addr, phe->h_addr, phe->h_length);
+       }
+       sControl = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+       if (sControl == -1)
+       {
+               return -1;
+       }
+
+       signal(SIGALRM, timeout) ;
+    alarm(timeouttime) ;
+    if (setjmp(timeout_jump) == 1)
+    {
+               close(sControl);
+               return 1;
+    }
+    else
+    {
+               if (connect(sControl, (struct sockaddr *)&sin, sizeof(sin)) == 
-1)
+               {
+                       close(sControl);
+                       alarm(0);
+                       return -1;
+               }
+    }
+
+       alarm(0);
+       close(sControl);
+       return 0;
+}
+
+int testdhcp(char *iface)
+{
+       system(g_strdup_printf("ifconfig %s up", iface));
+       system(g_strdup_printf("dhcpcd -n -t 2 %s", iface));
+
+       if(tryconnect() != 0) {
+               system(g_strdup_printf("dhcpcd --release %s", iface));
+               system(g_strdup_printf("ifconfig %s down", iface));
+               return -1;
+       }
+
+       return 1;
+}
+
GtkWidget *getNettypeCombo()
{
GtkWidget *combo;
@@ -94,15 +175,15 @@ GtkWidget *getNettypeCombo()
combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
g_object_unref (GTK_TREE_MODEL (store));
gtk_widget_set_size_request(combo, 350, 40);
-
+
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,"text", 0, 
NULL);
-
+
renderer = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,"text", 1, 
NULL);
-
+

for (i = 0; i < 4; i+=2)
{
@@ -111,7 +192,7 @@ GtkWidget *getNettypeCombo()
}

gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
-
+
return combo;
}

@@ -120,7 +201,7 @@ char *ask_nettype()
char *str = NULL;
GtkTreeIter iter;
GtkTreeModel *model;
-
+
GtkWidget *pBoite = gtk_dialog_new_with_buttons(_("Select network type"),
GTK_WINDOW(assistant),
GTK_DIALOG_MODAL,
@@ -131,23 +212,21 @@ char *ask_nettype()
"If you have an internal network card and an assigned IP address, gateway, and 
DNS,\n use 'static' "
"to enter these values.\n"
"If your IP address is assigned by a DHCP server (commonly used by cable modem 
services),\n select 'dhcp'. \n"));
-
+
GtkWidget *combotype = getNettypeCombo();
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), labelinfo, FALSE, FALSE, 
5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), combotype, FALSE, FALSE, 
5);

gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);

-       /* show dialogbox */
switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
{
-               /* OK */
-               case GTK_RESPONSE_OK:
+               case GTK_RESPONSE_OK:
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combotype), &iter);
model = gtk_combo_box_get_model(GTK_COMBO_BOX(combotype));
gtk_tree_model_get (model, &iter, 0, &str, -1);
break;
-                       /* user cancel */
+               /* user cancel */
case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_NONE:
default:
@@ -182,7 +261,7 @@ int configure_wireless(fwnet_interface_t *interface)
gtk_box_pack_start(GTK_BOX(phboxtemp), imagewifi, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(phboxtemp), labelinfo, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), phboxtemp, FALSE, FALSE, 
5);
-
+
phboxtemp = gtk_hbox_new(FALSE, 0);
labeltemp = gtk_label_new(_("Essid : "));
gtk_box_pack_start(GTK_BOX(phboxtemp), labeltemp, FALSE, FALSE, 5);
@@ -210,13 +289,11 @@ int configure_wireless(fwnet_interface_t *interface)
GtkWidget *pEntryWpaDriver = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(phboxtemp), pEntryWpaDriver, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), phboxtemp, FALSE, FALSE, 
5);
-
+
gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);

-       /* show dialogbox */
switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
{
-               /* OK */
case GTK_RESPONSE_OK:
snprintf(interface->essid, FWNET_ESSID_MAX_SIZE, 
(char*)gtk_entry_get_text(GTK_ENTRY(pEntryEssid)));
snprintf(interface->key, FWNET_ENCODING_TOKEN_MAX, 
(char*)gtk_entry_get_text(GTK_ENTRY(pEntryWepKey)));
@@ -249,7 +326,7 @@ int configure_static(fwnet_interface_t *interface)

GtkWidget *labelinfo = gtk_label_new(_("Enter static network parameters :"));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), labelinfo, FALSE, FALSE, 
5);
-
+
phboxtemp = gtk_hbox_new(FALSE, 0);
labeltemp = gtk_label_new(_("IP Address : "));
gtk_box_pack_start(GTK_BOX(phboxtemp), labeltemp, FALSE, FALSE, 5);
@@ -273,20 +350,22 @@ int configure_static(fwnet_interface_t *interface)

gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);

-       /* show dialogbox */
switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
{
-               /* OK */
-               case GTK_RESPONSE_OK:
+               case GTK_RESPONSE_OK:
ipaddr = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryIP));
netmask = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryNetmask));
+
if(strlen(ipaddr))
snprintf(option, 49, "%s netmask %s", ipaddr, netmask);
+
interface->options = g_list_append(interface->options, strdup(option));
-
+
gateway = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryGateway));
+
if(strlen(gateway))
-                               snprintf(interface->gateway, FWNET_GW_MAX_SIZE, 
"default gw %s", gateway);
+                               snprintf(interface->gateway, FWNET_GW_MAX_SIZE, 
"default gw %s", gateway);
+
break;
/* user cancel */
case GTK_RESPONSE_CANCEL:
@@ -300,13 +379,31 @@ int configure_static(fwnet_interface_t *interface)
return 0;
}

-int dsl_config(fwnet_profile_t *profile)
+int dsl_config(GtkWidget *button, gpointer data)
{
GtkWidget *phboxtemp, *labeltemp;
-       int i;
char *uname, *passwd, *passverify, *iface;
+
+       GtkTreeModel *model = NULL;
GtkTreeIter iter;
-       GtkTreeModel *model;
+       GtkTreeSelection *selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(viewif));
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(GTK_TREE_VIEW(viewif)));
+
+       /* check if an interface has been selected */
+       if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
+               gtk_tree_model_get (model, &iter, COLUMN_NET_NAME, &iface, -1);
+       } else {
+               fwife_error(_("You must select an interface in the above 
list."));
+               return 0;
+       }
+
+       switch(fwife_question(g_strdup_printf(_("Do you want to configure a DSL 
connexion associated with the interface %s?"), iface)))
+       {
+               case GTK_RESPONSE_YES:
+                       break;
+               case GTK_RESPONSE_NO:
+                       return 0;
+       }

GtkWidget *pBoite = gtk_dialog_new_with_buttons(_("Configure DSL connexion"),
GTK_WINDOW(assistant),
@@ -317,7 +414,7 @@ int dsl_config(fwnet_profile_t *profile)

GtkWidget *labelinfo = gtk_label_new(_("Enter DSL parameters"));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), labelinfo, FALSE, FALSE, 
5);
-
+
phboxtemp = gtk_hbox_new(FALSE, 0);
labeltemp = gtk_label_new(_("PPPOE username : "));
gtk_box_pack_start(GTK_BOX(phboxtemp), labeltemp, FALSE, FALSE, 5);
@@ -339,68 +436,42 @@ int dsl_config(fwnet_profile_t *profile)
gtk_box_pack_start(GTK_BOX(phboxtemp), pEntryVerify, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), phboxtemp, FALSE, FALSE, 
5);

-       phboxtemp = gtk_hbox_new(FALSE, 0);
-       labeltemp = gtk_label_new(_("Associate with interface : "));
-       gtk_box_pack_start(GTK_BOX(phboxtemp), labeltemp, FALSE, FALSE, 5);
-       GtkWidget *intercombodsl = gtk_combo_box_new_text();
-       gtk_box_pack_start(GTK_BOX(phboxtemp), intercombodsl, FALSE, FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), phboxtemp, FALSE, 
FALSE, 5);
-
-       if(iflist != NULL)
-       {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(intercombodsl), "");
-               for(i=0; i<g_list_length(iflist); i+=2)
-               {
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(intercombodsl), 
(char*)g_list_nth_data(iflist, i));
-               }
-       }
-
-       /* Affichage des elements de la boite de dialogue */
gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);

-       /* On lance la boite de dialogue et on recupere la reponse */
switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
{
-               /* L utilisateur valide */
case GTK_RESPONSE_OK:
uname = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryName));
passwd = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryPass));
passverify = (char*)gtk_entry_get_text(GTK_ENTRY(pEntryVerify));
-
-                       
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(intercombodsl), &iter);
-                       model = 
gtk_combo_box_get_model(GTK_COMBO_BOX(intercombodsl));
-                       gtk_tree_model_get (model, &iter, 0, &iface, -1);
-
+
if(strcmp(passverify, passwd))
{
fwife_error(_("Passwords do not match! Try again."));
gtk_widget_destroy(pBoite);
-                               dsl_config(profile);
+                               dsl_config(button, data);
return 0;
}
else
-                       {
-                               snprintf(profile->adsl_username, PATH_MAX, 
uname);
-                               snprintf(profile->adsl_password, PATH_MAX, 
passwd);
-                               if(strcmp(iface, ""))
-                                       snprintf(profile->adsl_interface, 
IF_NAMESIZE, iface);
+                       {
+                               snprintf(newprofile->adsl_username, PATH_MAX, 
uname);
+                               snprintf(newprofile->adsl_password, PATH_MAX, 
passwd);
+                               snprintf(newprofile->adsl_interface, 
IF_NAMESIZE, iface);
}
break;
-                       /* L utilisateur annule */
case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_NONE:
default:
break;
}

-       /* Destruction de la boite de dialogue */
gtk_widget_destroy(pBoite);
return 0;
}

int add_interface(GtkWidget *button, gpointer data)
{
-       fwnet_interface_t *newinterface = NULL;
+       fwnet_interface_t *newinterface = NULL;
char *ptr = NULL;
char *nettype = NULL;
char *iface = NULL;
@@ -408,15 +479,13 @@ int add_interface(GtkWidget *button, gpointer data)

GtkTreeModel *model = NULL;
GtkTreeIter iter;
-       GtkTreeSelection *selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(viewif));
+       GtkTreeSelection *selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(viewif));
model = gtk_tree_view_get_model(GTK_TREE_VIEW(GTK_TREE_VIEW(viewif)));
-
-       if(gtk_tree_selection_get_selected(selection, &model, &iter))
-       {
-               gtk_tree_model_get (model, &iter, COLUMN_NET_NAME, &iface, -1);
-       }
-       else
-       {
+
+       if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
+               gtk_tree_model_get (model, &iter, COLUMN_NET_NAME, &iface, -1);
+       } else {
+               fwife_error(_("You must select an interface in the above 
list."));
return 0;
}

@@ -436,13 +505,13 @@ int add_interface(GtkWidget *button, gpointer data)
}
}
}
-
+
if((newinterface = (fwnet_interface_t*)malloc(sizeof(fwnet_interface_t))) == 
NULL)
return(-1);
memset(newinterface, 0, sizeof(fwnet_interface_t));
-
+
snprintf(newinterface->name, IF_NAMESIZE, iface);
-
+
nettype = ask_nettype();
if(nettype == NULL)
return -1;
@@ -450,7 +519,7 @@ int add_interface(GtkWidget *button, gpointer data)
if(strcmp(nettype, "lo"))
{
interfaceslist = g_list_append(interfaceslist, strdup(iface));
-               interfaceslist = g_list_append(interfaceslist, newinterface);
+               interfaceslist = g_list_append(interfaceslist, newinterface);
}

if(strcmp(nettype, "lo") && fwnet_is_wireless_device(iface))
@@ -460,23 +529,23 @@ int add_interface(GtkWidget *button, gpointer data)
case GTK_RESPONSE_YES:
configure_wireless(newinterface);
break;
-                       case GTK_RESPONSE_NO:
+                       default:
break;
}
}
-
+
if(!strcmp(nettype, "dhcp"))
{
ptr = fwife_entry(_("Set DHCP hostname"), _("Some network providers require 
that the DHCP hostname be\n"
"set in order to connect.\n If so, they'll have assigned a hostname to your 
machine.\n If you were"
"assigned a DHCP hostname, please enter it below.\n If you do not have a DHCP 
hostname, just"
"hit enter."), NULL);
-
+
if(ptr != NULL && strlen(ptr))
snprintf(newinterface->dhcp_opts, PATH_MAX, "-t 10 -h %s\n", ptr);
else
newinterface->dhcp_opts[0]='\0';
-
+
newinterface->options = g_list_append(newinterface->options, strdup("dhcp"));
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_NET_TYPE, "dhcp", -1);
free(ptr);
@@ -495,30 +564,59 @@ int del_interface(GtkWidget *button, gpointer data)
GtkTreeModel *model = NULL;
GtkTreeIter iter;
char *nameif;
-
-       GtkTreeSelection *selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(viewif));
+
+       GtkTreeSelection *selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(viewif));
model = gtk_tree_view_get_model(GTK_TREE_VIEW(GTK_TREE_VIEW(viewif)));
-
-       if(gtk_tree_selection_get_selected(selection, &model, &iter))
-       {
+
+       if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
gtk_tree_model_get (model, &iter, COLUMN_NET_NAME, &nameif, -1);
GList * elem = g_list_find_custom(interfaceslist, (gconstpointer) nameif, 
cmp_str);
-               gint i = g_list_position(interfaceslist, elem);
+               gint i = g_list_position(interfaceslist, elem);
interfaceslist =  g_list_delete_link (interfaceslist, 
g_list_nth(interfaceslist, i));
interfaceslist =  g_list_delete_link (interfaceslist, 
g_list_nth(interfaceslist, i));
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_NET_TYPE, "", -1);
-               return 0;
}
-       else
-       {
-               return 0;
-       }
+
+       return 0;
}

+int try_autodetect()
+{
+       int i;
+       char *iface;
+       int detected = 0;
+       fwnet_interface_t *newinterface = NULL;
+
+       for(i=0; i<g_list_length(iflist); i+=2)
+       {
+               iface = (char*)g_list_nth_data(iflist, i);
+               if(testdhcp(iface) == 1) {
+                       int ret = fwife_question(g_strdup_printf(_("A valid 
dhcp connection has been dicovered on interface %s. Do you want to use this 
configuration?"), iface));
+                       if(ret == GTK_RESPONSE_YES) {
+                               detected = 1;
+                               system(g_strdup_printf("dhcpcd --release %s", 
iface));
+                               system(g_strdup_printf("ifconfig %s down", 
iface));
+                               if((newinterface = 
(fwnet_interface_t*)malloc(sizeof(fwnet_interface_t))) == NULL)
+                                       return(-1);
+                               memset(newinterface, 0, 
sizeof(fwnet_interface_t));
+                               snprintf(newinterface->name, IF_NAMESIZE, 
iface);
+                               newinterface->dhcp_opts[0]='\0';
+                               newinterface->options = 
g_list_append(newinterface->options, strdup("dhcp"));
+                               interfaceslist = g_list_append(interfaceslist, 
strdup(iface));
+                               interfaceslist = g_list_append(interfaceslist, 
newinterface);
+                       } else {
+                               system(g_strdup_printf("dhcpcd --release %s", 
iface));
+                               system(g_strdup_printf("ifconfig %s down", 
iface));
+                       }
+               }
+       }
+
+       return detected;
+}

GtkWidget *load_gtk_widget()
{
-       GtkWidget *pVBox, *pvboxbut;
+       GtkWidget *pVBox, *phboxbut;
GtkWidget *hboxview;
GtkWidget *info;

@@ -526,22 +624,22 @@ GtkWidget *load_gtk_widget()
GtkTreeModel *model;
GtkTreeViewColumn *col;
GtkCellRenderer *renderer;
-
+
pVBox = gtk_vbox_new(FALSE, 0);
-       pvboxbut = gtk_vbox_new(FALSE, 0);
+       phboxbut = gtk_hbox_new(FALSE, 0);
hboxview = gtk_hbox_new(FALSE, 0);
-
+
info = gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(info), _("<span face=\"Courier New\"><b>You can 
configure all network interfaces you need</b></span>"));
gtk_box_pack_start(GTK_BOX(pVBox), info, FALSE, FALSE, 5);

store = gtk_list_store_new(5, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING, G_TYPE_STRING);
model = GTK_TREE_MODEL(store);
-
+
viewif = gtk_tree_view_new_with_model(model);
g_object_unref (model);
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(viewif), TRUE);
-
+
renderer = gtk_cell_renderer_pixbuf_new();
col = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", 
COLUMN_NET_IMAGE, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(viewif), col);
@@ -554,39 +652,44 @@ GtkWidget *load_gtk_widget()
col = gtk_tree_view_column_new_with_attributes (_("Description"), renderer, 
"text", COLUMN_NET_DESC, NULL);
gtk_tree_view_column_set_expand (col, TRUE);
gtk_tree_view_append_column(GTK_TREE_VIEW(viewif), col);
-
+
renderer = gtk_cell_renderer_text_new();
col = gtk_tree_view_column_new_with_attributes (_("Configuration"), renderer, 
"text", COLUMN_NET_TYPE, NULL);
-       gtk_tree_view_append_column(GTK_TREE_VIEW(viewif), col);
-
-       gtk_box_pack_start(GTK_BOX(hboxview), viewif, TRUE, TRUE, 10);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(viewif), col);
+
GtkWidget *image = 
gtk_image_new_from_file(g_strdup_printf("%s/configure24.png", IMAGEDIR));
GtkWidget *btnsave = gtk_button_new_with_label(_("Configure"));
gtk_button_set_image(GTK_BUTTON(btnsave), image);
-       gtk_box_pack_start(GTK_BOX(pvboxbut), btnsave, FALSE, FALSE, 10);
-       GtkWidget *btndel = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-       gtk_box_pack_start(GTK_BOX(pvboxbut), btndel, FALSE, FALSE, 10);
-       gtk_box_pack_start(GTK_BOX(hboxview), pvboxbut, FALSE, FALSE, 10);
-
-       gtk_box_pack_start(GTK_BOX(pVBox), hboxview, TRUE, TRUE, 5);
+       gtk_box_pack_start(GTK_BOX(phboxbut), btnsave, FALSE, FALSE, 10);
+       GtkWidget *btndel = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+       gtk_box_pack_start(GTK_BOX(phboxbut), btndel, FALSE, FALSE, 10);
+       image = gtk_image_new_from_file(g_strdup_printf("%s/dsl24.png", 
IMAGEDIR));
+       GtkWidget *btndsl = gtk_button_new_with_label(_("DSL Configuration"));
+       gtk_button_set_image(GTK_BUTTON(btndsl), image);
+       gtk_box_pack_start(GTK_BOX(phboxbut), btndsl, FALSE, FALSE, 10);

+       gtk_box_pack_start(GTK_BOX(hboxview), viewif, TRUE, TRUE, 10);
+       gtk_box_pack_start(GTK_BOX(pVBox), hboxview, TRUE, TRUE, 5);
+       gtk_box_pack_start(GTK_BOX(pVBox), phboxbut, FALSE, FALSE, 5);
+
g_signal_connect(G_OBJECT(btnsave), "clicked", G_CALLBACK(add_interface), NULL);
g_signal_connect(G_OBJECT(btndel), "clicked", G_CALLBACK(del_interface), NULL);
-
-       return pVBox;
+       g_signal_connect(G_OBJECT(btndsl), "clicked", G_CALLBACK(dsl_config), 
NULL);
+
+       return pVBox;
}

int prerun(GList **config)
{
-       int i;
+       int i, detected = 0;
GdkPixbuf *connectimg;
GtkWidget *cellview;
GtkTreeIter iter;
-
+
cellview = gtk_cell_view_new ();
connectimg = gtk_widget_render_icon (cellview, GTK_STOCK_NETWORK,
GTK_ICON_SIZE_BUTTON, NULL);
-
+
if(iflist == NULL)
{
iflist = fwnet_iflist();
@@ -594,39 +697,46 @@ int prerun(GList **config)
for(i=0; i<g_list_length(iflist); i+=2)
{
gtk_list_store_append(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(viewif))),
 &iter);
-                       
gtk_list_store_set(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(viewif))),
 &iter, COLUMN_NET_IMAGE, connectimg,
-                                                                               
                                                                                
COLUMN_NET_NAME, (char*)g_list_nth_data(iflist, i),
-                                                                               
                                                                                
COLUMN_NET_DESC, (char*)g_list_nth_data(iflist, i+1),
-                                                                               
                                                                                
COLUMN_NET_TYPE, "",
+                       
gtk_list_store_set(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(viewif))),
 &iter, COLUMN_NET_IMAGE, connectimg,
+                                                                               
                                                                                
COLUMN_NET_NAME, (char*)g_list_nth_data(iflist, i),
+                                                                               
                                                                                
COLUMN_NET_DESC, (char*)g_list_nth_data(iflist, i+1),
+                                                                               
                                                                                
COLUMN_NET_TYPE, "",
-1);
}
}
+
+       free(newprofile);
+       if((newprofile = (fwnet_profile_t*)malloc(sizeof(fwnet_profile_t))) == 
NULL)
+               return(1);
+       memset(newprofile, 0, sizeof(fwnet_profile_t));
+
+       switch(fwife_question(_("Do you want to try an automatic detection of 
your network interfaces?")))
+       {
+               case GTK_RESPONSE_YES:
+                       detected = try_autodetect();
+                       if(detected == 1) {
+                               skip_to_next_plugin();
+                       } else {
+                               fwife_error(_("No valid network configuration 
has been detected, if you have one configure it manually."));
+                       }
+                       break;
+               case GTK_RESPONSE_NO:
+                       break;
+       }

return 0;
}

int run(GList **config)
{
-       int i, ret;
-       fwnet_profile_t *newprofile=NULL;
+       int i, ret;

-       if((newprofile = (fwnet_profile_t*)malloc(sizeof(fwnet_profile_t))) == 
NULL)
-               return(1);
-       memset(newprofile, 0, sizeof(fwnet_profile_t));
-
sprintf(newprofile->name, "default");
for(i = 1; i<g_list_length(interfaceslist); i+=2)
{
newprofile->interfaces = g_list_append(newprofile->interfaces, 
(fwnet_interface_t *) g_list_nth_data(interfaceslist, i));
}
-       switch(fwife_question(_("Do you want to configure a DSL connexion 
now?")))
-       {
-               case GTK_RESPONSE_YES:
-                       dsl_config(newprofile);
-               break;
-               case GTK_RESPONSE_NO:
-               break;
-       }
+
char *host = fwife_entry(_("Hostname"), _("We'll need the name you'd like to 
give your host.\nThe full hostname is needed, such 
as:\n\nfrugalware.example.net\n\nEnter full hostname:"), 
"frugalware.example.net");

pid_t pid = fork();
@@ -643,8 +753,10 @@ int run(GList **config)
{
wait(&ret);
}
-
-       FREE(host);
+
+       free(newprofile);
+       newprofile = NULL;
+       free(host);
return 0;
}

@@ -653,5 +765,3 @@ GtkWidget *load_help_widget()
GtkWidget *helplabel = gtk_label_new(_("Select network interface you want to 
configure then click on add button and follow instructions..."));
return helplabel;
}
-
-
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to