summaryrefslogtreecommitdiffstats
path: root/perl-install/network/modem.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/network/modem.pm')
-rw-r--r--perl-install/network/modem.pm241
1 files changed, 84 insertions, 157 deletions
diff --git a/perl-install/network/modem.pm b/perl-install/network/modem.pm
index f1ef4d9f7..fd2f54c50 100644
--- a/perl-install/network/modem.pm
+++ b/perl-install/network/modem.pm
@@ -1,176 +1,103 @@
-package network::modem; # $Id$
+package network::modem;
-use strict;
use common;
use any;
use modules;
use detect_devices;
use mouse;
use network::tools;
+use vars qw(@ISA @EXPORT);
+use MDK::Common::Globals "network", qw($in $prefix);
+use Data::Dumper;
+@ISA = qw(Exporter);
+@EXPORT = qw(pppConfig);
-sub ppp_configure_raw {
- my ($in, $netc, $modem) = @_;
- $netc->{DOMAINNAME2} = $modem->{domain};
- $in->do_pkgs->install('ppp') if !$::testing;
- $in->do_pkgs->install('kdenetwork-kppp') if $in->do_pkgs->is_installed('kdebase');
- any::devfssymlinkf($modem, 'modem') if $modem->{device} ne "/dev/modem";
-
- my %toreplace;
- $toreplace{$_} = $modem->{$_} foreach qw(connection phone login passwd auth domain dns1 dns2);
- $toreplace{kpppauth} = ${{ 'Script-based' => 0, 'PAP' => 1, 'Terminal-based' => 2, }}{$modem->{auth}};
- $toreplace{kpppauth} = ${{ 'Script-based' => 0, 'PAP' => 1, 'Terminal-based' => 2, 'CHAP' => 3 }}{$modem->{auth}};
- $toreplace{phone} =~ s/[a-zA-Z]//g;
- $toreplace{dnsserver} = join ',', map { $modem->{$_} } "dns1", "dns2";
- $toreplace{dnsserver} .= $toreplace{dnsserver} && ',';
-
- #- using peerdns or dns1,dns2 avoid writing a /etc/resolv.conf file.
- $toreplace{peerdns} = "yes";
-
- $toreplace{connection} ||= 'DialupConnection';
- $toreplace{domain} ||= 'localdomain';
- $toreplace{intf} ||= 'ppp0';
- $toreplace{papname} = ($modem->{auth} eq 'PAP' || $modem->{auth} eq 'CHAP') && $toreplace{login};
-
- #- build ifcfg-ppp0.
- my $various = <<END;
-DEVICE="$toreplace{intf}"
-ONBOOT="no"
-USERCTL="no"
-MODEMPORT="/dev/modem"
-LINESPEED="115200"
-PERSIST="yes"
-DEFABORT="yes"
-DEBUG="yes"
-INITSTRING="ATZ"
-DEFROUTE="yes"
-HARDFLOWCTL="yes"
-ESCAPECHARS="no"
-PPPOPTIONS=""
-PAPNAME="$toreplace{papname}"
-REMIP=""
-NETMASK=""
-IPADDR=""
-MRU=""
-MTU=""
-DISCONNECTTIMEOUT="5"
-RETRYTIMEOUT="60"
-BOOTPROTO="none"
-PEERDNS="$toreplace{peerdns}"
-END
- output("$::prefix/etc/sysconfig/network-scripts/ifcfg-ppp0",
- $various,
- map { qq(DNS$_=$toreplace{"dns$_"}\n) } grep { $toreplace{"dns$_"} } 1..2);
-
- #- build chat-ppp0.
- my @chat = <<END;
-'ABORT' 'BUSY'
-'ABORT' 'ERROR'
-'ABORT' 'NO CARRIER'
-'ABORT' 'NO DIALTONE'
-'ABORT' 'Invalid Login'
-'ABORT' 'Login incorrect'
-'' 'ATZ'
-END
- if ($modem->{special_command}) {
- push @chat, <<END;
-'OK' '$modem->{special_command}'
-END
+sub configure {
+ my ($netcnx, $mouse, $netc, $intf) = @_;
+ $netcnx->{type} = 'modem';
+ my $modem = $netcnx->{$netcnx->{type}};
+# $netcnx->{$netcnx->{type}} = {};
+ $modem->{device} = $netc->{autodetect}{modem};
+# modem_step_1:
+# $modem->{login} = ($modem->{auth} eq 'PAP' ||$modem->{auth} eq 'CHAP') && $intf->{ppp0}{PAPNAME};
+# $netcnx->{$netcnx->{type}}->{connection} = ($netcnx->{$netcnx->{type}}->{auth} eq 'PAP' || $netcnx->{$netcnx->{type}}->{auth} eq 'CHAP') && $intf->{ppp0}{PAPNAME};
+# $modem->{device} = readlink "$prefix/dev/modem";
+ foreach (cat_("/usr/share/config/kppprc")) {
+ /^DNS=(.*)$/ and ($modem->{dns1}, $modem->{dns2}) = split(',', $1);
}
- push @chat, <<END;
-'OK' 'ATDT$toreplace{phone}'
-'CONNECT' ''
-END
- if ($modem->{auth} eq 'Terminal-based' || $modem->{auth} eq 'Script-based') {
- push @chat, <<END;
-'ogin:--ogin:' '$toreplace{login}'
-'ord:' '$toreplace{passwd}'
-END
+ my $secret = network::tools::read_secret_backend();
+ foreach (@$secret) {
+ $modem->{passwd} = $_->{passwd} if $_->{login} eq $modem->{login};
}
- push @chat, <<END;
-'TIMEOUT' '5'
-'~--' ''
-END
- my $chat_file = "$::prefix/etc/sysconfig/network-scripts/chat-ppp0";
- output_with_perm($chat_file, 0600, @chat);
- if ($modem->{auth} eq 'PAP' || $modem->{auth} eq 'CHAP') {
- #- need to create a secrets file for the connection.
- my $secrets = "$::prefix/etc/ppp/" . lc($modem->{auth}) . "-secrets";
- my @l = cat_($secrets);
- my $replaced = 0;
- do { $replaced ||= 1
- if s/^\s*"?$toreplace{login}"?\s+ppp0\s+(\S+)/"$toreplace{login}" ppp0 "$toreplace{passwd}"/ } foreach @l;
- if ($replaced) {
- output($secrets, @l);
- } else {
- append_to_file($secrets, qq($toreplace{login} ppp0 "$toreplace{passwd}"\n));
+ foreach (cat_("/etc/sysconfig/network-scripts/chat-ppp0")) {
+ if (/.*ATDT(\d*).*/) {
+ $modem->{phone} = $1;
+ last;
}
- #- restore access right to secrets file, just in case.
- chmod 0600, $secrets;
}
+ pppConfig($modem, $mouse, $netc, $intf) or return;
+ write_cnx_script($netc, "modem",
+q(
+/sbin/route del default
+ifup ppp0
+),
+q(ifdown ppp0
+killall pppd
+), $netcnx->{type});
+ 1;
+}
- #- install kppprc file according to used configuration.
- mkdir_p("$::prefix/usr/share/config");
+sub pppConfig {
+ my ($modem, $mouse, $netc, $_intf) = @_;
+ $mouse ||= {};
- output("$::prefix/usr/share/config/kppprc", c::to_utf8(<<END));
-# KDE Config File
-[Account0]
-ExDNSDisabled=0
-AutoName=0
-ScriptArguments=
-AccountingEnabled=0
-DialString=ATDT
-Phonenumber=$toreplace{phone}
-IPAddr=0.0.0.0
-Domain=$toreplace{domain}
-Name=$toreplace{connection}
-VolumeAccountingEnabled=0
-pppdArguments=
-Password=$toreplace{passwd}
-BeforeDisconnect=
-Command=
-ScriptCommands=
-Authentication=$toreplace{kpppauth}
-DNS=$toreplace{dnsserver}
-SubnetMask=0.0.0.0
-AccountingFile=
-DefaultRoute=1
-Username=$toreplace{login}
-Gateway=0.0.0.0
-StorePassword=1
-DisconnectCommand=
-[Modem]
-BusyWait=0
-Enter=CR
-FlowControl=CRTSCTS
-Volume=0
-Timeout=60
-UseCDLine=0
-UseLockFile=1
-Device=/dev/modem
-Speed=115200
-[Graph]
-InBytes=0,0,255
-Text=0,0,0
-Background=255,255,255
-Enabled=true
-OutBytes=255,0,0
-[General]
-QuitOnDisconnect=0
-ShowLogWindow=0
-DisconnectOnXServerExit=1
-DefaultAccount=$toreplace{connection}
-iconifyOnConnect=1
-Hint_QuickHelp=0
-AutomaticRedial=0
-PPPDebug=0
-NumberOfAccounts=1
-ShowClock=1
-DockIntoPanel=0
-pppdTimeout=30
-END
- network::network::proxy_configure($::o->{miscellaneous});
+ $mouse->{device} ||= readlink "$prefix/dev/mouse";
+ $::isInstall and $in->set_help('selectSerialPort');
+ $modem->{device} ||= $in->ask_from_listf('', N("Please choose which serial port your modem is connected to."),
+ \&mouse::serial_port2text,
+ [ grep { $_ ne $mouse->{device} } (mouse::serial_ports(), if_(-e '/dev/modem', '/dev/modem')) ]) || return;
+
+ my @cnx_list;
+ my $secret = network::tools::read_secret_backend();
+ foreach (@$secret) {
+ push @cnx_list, $_->{server};
+ }
+ $::isStandalone || $in->set_help('configureNetworkISP');
+ $in->ask_from('', N("Dialup options"), [
+{ label => N("Connection name"), val => \$modem->{connection} },
+{ label => N("Phone number"), val => \$modem->{phone} },
+{ label => N("Login ID"), val => \$modem->{login} },
+{ label => N("Password"), val => \$modem->{passwd}, hidden => 1 },
+{ label => N("Authentication"), val => \$modem->{auth}, list => [ N_("PAP"), N_("Terminal-based"), N_("Script-based"), N_("CHAP") ] },
+{ label => N("Domain name"), val => \$modem->{domain} },
+{ label => N("First DNS Server (optional)"), val => \$modem->{dns1} },
+{ label => N("Second DNS Server (optional)"), val => \$modem->{dns2} },
+ ]) or return;
+ $netc->{DOMAINNAME2} = $modem->{domain};
+ any::pppConfig($in, $modem, $prefix);
+ $netc->{$_} = 'ppp0' foreach 'NET_DEVICE', 'NET_INTERFACE';
+ 1;
+}
+
+#- TODO: add choice between hcf/hsf
+sub winmodemConfigure {
+ my ($netc) = @_;
+ my $type;
+
+ foreach (keys %{$netc->{autodetect}{winmodem}}) {
+ my $temp;
+ /Hcf/ and $temp = "hcf";
+ /Hsf/ and $temp = "hsf";
+ $temp and $in->do_pkgs->what_provides("${temp}linmodem") and $type = "${temp}linmodem";
+ }
+
+ $type || $in->ask_warn(N("Warning"), N("Your modem isn't supported by the system.
+Take a look at http://www.linmodems.org")) && return 1;
+ my $e = $in->ask_from_list(N("Title"), N("\"%s\" based winmodem detected, do you want to install needed software ?", $type), [N("Install rpm"), N("Do nothing")]) or return 0;
+ $e =~ /rpm/ ? $in->do_pkgs->install($type) : return 1;
+ 1;
}
1;