#!/usr/bin/perl

require '/var/smoothwall/header.pl';

my %pppsettings;

# read vars back from file.
&readhash("${swroot}/ppp/settings", \%pppsettings);

if ($pppsettings{'COMPORT'} =~ /ttyS[0-3]/)
{
	$lockfile = "/var/lock/LCK..${pppsettings{'COMPORT'}}";
	if (! -e $lockfile)
	{
		&log("Dialing $pppsettings{'PROFILENAME'}."); 
		&domodemdial();
	}
}
else
{
	&doisdndial();
}   

sub domodemdial
{
	my $pppoptions = '';
	my $loginscript = '';

	my $device = "/dev/${pppsettings{'COMPORT'}}";

	if ($pppsettings{'DNS'} eq 'Automatic') {
		$pppoptions = "$pppoptions usepeerdns"; }

	if ($pppsettings{'AUTH'} eq 'standard-login-script') {
		$loginscript = 'standardloginscript'; }
	elsif ($pppsettings{'AUTH'} eq 'demon-login-script') {
		$loginscript = 'demonloginscript'; }
	else {
		$loginscript = $pppsettings{'LOGINSCRIPT'}; }

	if ($pppsettings{'PERSISTANT'} eq 'on') {
		$pppoptions = "$pppoptions persist"; }
	else
	{
		if ($pppsettings{'TIMEOUT'} != 0)
		{
			$seconds = $pppsettings{'TIMEOUT'} * 60;
			$pppoptions = "$pppoptions idle $seconds";
		}
	}
	
	$extrapppoptions = 'novj novjccomp holdoff 1';

	$args = "debug lock modem crtscts $device $pppsettings{'DTERATE'} \
		kdebug 0 noipdefault defaultroute user \
		$pppsettings{'USERNAME'} maxfail $pppsettings{'MAXRETRIES'} 
		connect /etc/ppp/dialer $pppoptions $extrapppoptions";

	$args =~ s/[ \n\r\t]+/ /g;

	@commandlist = split / /, $args;

	@commands = ('/usr/sbin/pppd', @commandlist);

	system @commands;
}

sub doisdndial
{
	my $pppoptions;
        my $seconds;

 	$seconds = $pppsettings{'TIMEOUT'} * 60;

        $lockfile = "/var/run/ipppd.ippp0.pid";
	if (open(FILE, $lockfile))
	{
         	$pid = <FILE>;
	        close FILE;
 		system "kill $pid";
	}
 	system("/sbin/ifconfig ippp0 down >/dev/nulll");
 	system("/usr/sbin/isdnctrl delif ippp0 >/dev/null");
	system("/usr/sbin/isdnctrl readconf /etc/isdn/isdn.conf >/dev/null");
	system("/usr/sbin/isdnctrl addphone ippp0 out $pppsettings{'TELEPHONE'} /dev/null");
	system("/usr/sbin/isdnctrl huptimeout ippp0 $seconds >/dev/null");

	system("/usr/sbin/ipppd noipdefault defaultroute user $pppsettings{'USERNAME'} /dev/ippp0 >/dev/null");

 	system("/usr/sbin/isdnctrl dial ippp0 >/dev/null");
}