summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordamien <damien@mandriva.com>2001-10-09 11:15:53 +0000
committerdamien <damien@mandriva.com>2001-10-09 11:15:53 +0000
commit7befd0e218e67479b59a9867d6fad0f17714db42 (patch)
treeb3846c68e8e9c9089745e58b6589e4a04d713c6f
parent0ee135141e9cadcb581c0caf1c9e7d44d57aaa63 (diff)
downloaddrakx-7befd0e218e67479b59a9867d6fad0f17714db42.tar
drakx-7befd0e218e67479b59a9867d6fad0f17714db42.tar.gz
drakx-7befd0e218e67479b59a9867d6fad0f17714db42.tar.bz2
drakx-7befd0e218e67479b59a9867d6fad0f17714db42.tar.xz
drakx-7befd0e218e67479b59a9867d6fad0f17714db42.zip
connection test is now in background, corrects the interface freeze problem
-rw-r--r--perl-install/network/tools.pm42
-rwxr-xr-xperl-install/standalone/draknet25
-rwxr-xr-xperl-install/standalone/net_monitor35
3 files changed, 75 insertions, 27 deletions
diff --git a/perl-install/network/tools.pm b/perl-install/network/tools.pm
index 1d033031e..4fdab586a 100644
--- a/perl-install/network/tools.pm
+++ b/perl-install/network/tools.pm
@@ -6,7 +6,7 @@ use vars qw(@ISA @EXPORT);
use MDK::Common::Globals "network", qw($in $prefix $disconnect_file $connect_prog $connect_file $disconnect_file);
@ISA = qw(Exporter);
-@EXPORT = qw(write_cnx_script write_secret_backend write_initscript ask_connect_now connect_backend disconnect_backend read_providers_backend ask_info2 type2interface connected disconnected);
+@EXPORT = qw(write_cnx_script write_secret_backend write_initscript ask_connect_now connect_backend disconnect_backend read_providers_backend ask_info2 type2interface connected connected_bg connected2 disconnected);
@EXPORT_OK = qw($in);
sub write_cnx_script {
@@ -112,7 +112,43 @@ sub type2interface {
[ lan => 'eth']);
}
-sub connected { gethostbyname("www.mandrakesoft.com") ? 1 : 0 }
+sub connected { gethostbyname("mandrakesoft.com") ? 1 : 0 }
+
+my $kid_pipe;
+sub connected_bg {
+ my ($ref) = @_;
+ if (defined $kid_pipe) {
+ print "GGGGGGGGG\n";
+ local *F;
+ *F = *$kid_pipe;
+ fcntl(F, F_SETFL, O_NONBLOCK) or die "can't fcntl F_SETFL: $!";
+ my $a;
+ if ($a = <F> ) {
+ print "gooood\n";
+ chomp $a;
+ close($kid_pipe) || warn "kid exited $?";
+ undef $kid_pipe;
+ $a eq '1' and $$ref = 1;
+ $a eq '0' and $$ref = 0;
+ }
+ } else {
+ print "BBBBBBBBB\n";
+ $kid_pipe = connected2();
+ }
+ 1;
+}
+
+sub connected2 {
+ my $pid = open(KID_TO_READ, "-|");
+ if ($pid) { # parent
+ return \*KID_TO_READ;
+ } else { # child
+ ($EUID, $EGID) = ($UID, $GID); # suid only
+ my $a = gethostbyname("mandrakesoft.com") ? 1 : 0;
+ print "$a\n";
+ c::_exit(0);
+ }
+}
sub disconnected { }
@@ -169,3 +205,5 @@ exit 0
'0.d/K11internet', '1.d/K11internet', '2.d/K11internet', '3.d/S89internet', '5.d/S89internet', '6.d/K11internet';
};
}
+
+1;
diff --git a/perl-install/standalone/draknet b/perl-install/standalone/draknet
index c6cc5df0f..aa133f42d 100755
--- a/perl-install/standalone/draknet
+++ b/perl-install/standalone/draknet
@@ -184,17 +184,20 @@ my $label5 = new Gtk::Label($netcnx->{type} eq 'lan' ? _("Gateway:") : _("Interf
$table1->attach($label5, 0, 1, 1, 2, 'fill', 'fill',0,0);
my $label6 = new Gtk::Label($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE});
$table1->attach($label6, 1, 2, 1, 2, 'fill', 'fill',0,0);
-my $connected_now;
+my $isconnected = -1;
sub connected_local {
+ print "in connected local\n";
my $w = $in->wait_message('', _("Testing your connection..."), 1);
- $connected_now=connected();
+ Gtk->main_iteration while Gtk->events_pending;
+ $isconnected=connected();
}
my $label7 = new Gtk::Label(_("Status:"));
$table1->attach($label7, 0, 1, 2, 3, 'fill', 'fill',0,0);
-my $label8 = new Gtk::Label($connected_now ? _("Connected") : _("Not connected"));
+my $label8 = new Gtk::Label(_("Testing your connection..."));
$table1->attach($label8, 1, 2, 2, 3, 'fill', 'fill',0,0);
-my $button2 = new Gtk::Button($connected_now ? _("Disconnect...") : _("Connect..."));
+my $button2 = new Gtk::Button(_("Wait please"));
+$button2->set_sensitive(0);
$button2->signal_connect (clicked => sub {
my $dialog = new Gtk::Dialog();
$dialog->signal_connect ( delete_event => sub { Gtk->main_quit(); });
@@ -211,7 +214,7 @@ $button2->signal_connect (clicked => sub {
$bbox_dialog->add($button_ok );
$dialog->show_all;
$dialog->set_modal(1);
- if (!$connected_now) {
+ if (!$isconnected) {
$l->set(_("Starting your connection..."));
Gtk->main_iteration while Gtk->events_pending;
connect_backend();
@@ -347,7 +350,7 @@ $window1->show_all();
$_->hide foreach ($button1, $button3);
Gtk->main_iteration while Gtk->events_pending;
$::isEmbedded and kill USR2, $::CCPID;
-my $tag = Gtk->timeout_add(15000, \&update2);
+my $tag = Gtk->timeout_add(4000, \&update2);
Gtk->main;
Gtk->exit(0);
@@ -401,14 +404,18 @@ sub update {
build_clist();
$clist1->thaw();
$button_del->set_sensitive(network::netconnect::get_profiles() > 1);
+ $isconnected !=-1 or return 1;
+ $label8->set($isconnected ? _("Connected") : _("Not connected"));
+ $button2->child->set($isconnected ? _("Disconnect...") : _("Connect..."));
+ $button2->set_sensitive(1);
1;
}
sub update2 {
+ print "HHHHHH\n";
+ connected_bg(\$isconnected);
update();
- $connected_now = connected();
- $label8->set($connected_now ? _("Connected") : _("Not connected"));
- $button2->child->set($connected_now ? _("Disconnect...") : _("Connect..."));
+ 1;
}
sub quit_global {
$::isEmbedded ? kill(USR1, $::CCPID) : Gtk->exit(0);
diff --git a/perl-install/standalone/net_monitor b/perl-install/standalone/net_monitor
index 693875436..031cbfab2 100755
--- a/perl-install/standalone/net_monitor
+++ b/perl-install/standalone/net_monitor
@@ -72,7 +72,7 @@ $window1->set_border_width(5);
my $colorr = my_gtk::gtkcolor(50400, 655, 20000);
my $colort = my_gtk::gtkcolor(55400, 55400, 655);
my $colora = my_gtk::gtkcolor(655, 50400, 655);
-my $isconnected=0;
+my $isconnected=-1;
my @interfaces;
my $monitor = {};
my $netcnx = {};
@@ -121,7 +121,7 @@ gtkadd($window1,
)
),
0, gtkpack_(new Gtk::HBox(0,5),
- 1, gtksignal_connect(my $button_connect = new Gtk::Button(), clicked => \&connection),
+ 1, gtksignal_connect(my $button_connect = gtkset_sensitive(new Gtk::Button(), 0), clicked => \&connection),
0, new Gtk::VSeparator,
0, gtkpack(new Gtk::VBox(0,5),
gtksignal_connect(new Gtk::Button(_("Logs")), clicked => sub {
@@ -153,19 +153,23 @@ my $gca = new Gtk::Gdk::GC($window1->window);
$gca->set_foreground($colora);
my ($pix_c_map, $pix_c_mask) = gtkcreate_png("net_c.png");
my ($pix_d_map, $pix_d_mask) = gtkcreate_png("net_d.png");
+my ($pix_u_map, $pix_u_mask) = gtkcreate_png("net_u.png");
$button_connect->add(gtkpack__(new Gtk::VBox(0,3),
- my $pix_c = new Gtk::Pixmap($pix_d_map, $pix_d_mask),
- my $label_c = new Gtk::Label(_("Connect to Internet"))
+ my $pix_c = new Gtk::Pixmap($pix_u_map, $pix_u_mask),
+ my $label_c = new Gtk::Label(_("Wait please"))
));
-$statusbar->push(1, _("Not connected"));
+$statusbar->push(1, _("Wait please, testing your connection..."));
$window1->show_all();
#$window1->set_policy (1, 1, 1);
my $time_tag = Gtk->timeout_add(1000, \&rescan);
-my $time_tag2 = Gtk->timeout_add(15000, \&update);
+my $time_tag2 = Gtk->timeout_add(5000, \&update);
+
update();
rescan();
-connection() if ($connect && !$isconnected);
-connection() if ($disconnect && $isconnected);
+while ($isconnected == -1) {
+ Gtk->main_iteration while Gtk->events_pending;
+}
+connection() if ($connect && !$isconnected || $disconnect && $isconnected);
Gtk->main;
Gtk->exit(0);
@@ -194,16 +198,16 @@ sub connection {
my $tag2 = Gtk->timeout_add(10000, sub {
Gtk->timeout_remove($tag);
$statusbar->pop(1);
- $statusbar->push(1, $isconnected2 ? ( connected() ?
+ $statusbar->push(1, $isconnected2 ? ( $isconnected ?
_("Disconnection from Internet failed.") :
_("Disconnection from Internet complete.")) :
- ( connected() ?
+ ( $isconnected ?
_("Connection complete.") :
_("Connection failed.\nVerify your configuration in the Mandrake Control Center."))
);
my $tag3 = Gtk->timeout_add(10000, sub {
$statusbar->pop(1);
- $statusbar->push(1, connected() ? _("Connected") : _("Not connected"));
+ $statusbar->push(1, $isconnected ? _("Connected") : _("Not connected"));
0;
});
$button_connect->set_sensitive(1);
@@ -313,6 +317,7 @@ sub change_color {
}
sub update {
+ connected_bg(\$isconnected);
my @intfs = get_val();
if($combo1->entry->get_text ne ($netcnx->{PROFILE} ? $netcnx->{PROFILE} : "default")) {
$combo1->entry->set_text($netcnx->{PROFILE} ? $netcnx->{PROFILE} : "default");
@@ -372,19 +377,17 @@ sub update {
}
@interfaces = @intfs;
my $netc={};
- my $connected_now = connected();
- if($connected_now == !$isconnected) {
- $isconnected = $isconnected ? 0 : 1;
+ if ($isconnected != -1) {
+ $button_connect->set_sensitive(1);
$label_c->set($isconnected ? _("Disconnect") : _("Connect"));
$statusbar->pop(1);
- $statusbar->push(1, $connected_now ? _("Connected") : _("Not connected"));
+ $statusbar->push(1, $isconnected ? _("Connected") : _("Not connected"));
$isconnected ? $pix_c->set($pix_c_map, $pix_c_mask) : $pix_c->set($pix_d_map, $pix_d_mask);
}
if (!(-e $connect_file && -e $disconnect_file)) {
$button_connect->set_sensitive(0);
$label_c->set("No internet connection configured");
}
- #$time_tag2 = Gtk->timeout_add(5000, \&update);
1;
}