[Asterisk-cvs] astcc astcc.agi,1.6,1.7

markster at lists.digium.com markster at lists.digium.com
Mon Aug 9 15:42:20 CDT 2004


Update of /usr/cvsroot/astcc
In directory localhost.localdomain:/tmp/cvs-serv26004

Modified Files:
	astcc.agi 
Log Message:
Merge oliver's enhancements


Index: astcc.agi
===================================================================
RCS file: /usr/cvsroot/astcc/astcc.agi,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- astcc.agi	30 Jul 2004 18:08:17 -0000	1.6
+++ astcc.agi	9 Aug 2004 19:28:19 -0000	1.7
@@ -5,11 +5,31 @@
 # Copyright (C) 2004, Digium, Inc.
 #
 # Mark Spencer <markster at digium.com
+# Oliver Daudey <traveler at xs4all.nl>
 #
 # This program is Free Software and is distributed under the
 # terms of the GNU General Public License version 2 or later
 # at your option.
 #
+#
+# Usage-example:
+#
+# ;
+# ; Card-number and number to dial derived from command-line.
+# ; Call script with the card-number as first arg and the number
+# ; to dial as the second arg.
+# ;
+# exten => _00XXXXXXXXX,1,DeadAGI(astcc.agi,${CALLERIDNUM},${EXTEN})
+# exten => _00XXXXXXXXX,2,Hangup
+#
+# ;
+# ; Prompt the caller for the card-number and the number to dial.
+# ;
+# exten => 1234,1,Answer
+# exten => 1234,2,DeadAGI(astcc.agi)
+# exten => 1234,3,Hangup
+#
+
 use DBI;
 use Asterisk::AGI;
 
@@ -38,6 +58,8 @@
 	my ($cardinfo) = @_;
 	$dbh->do("UPDATE cards SET used=" . $dbh->quote($cardinfo->{used}) . " WHERE number=" . 
 		$dbh->quote($cardinfo->{number}));
+	$dbh->do("UPDATE cards SET inuse=" . $dbh->quote($cardinfo->{inuse}) . " WHERE number=" . 
+		$dbh->quote($cardinfo->{number}));
 }
 
 sub getcard() {
@@ -151,7 +173,7 @@
 
 sub saycost() {
 	my ($carddata, $numdata, $credit) = @_;
-	my $incsecs, $incmins;
+	my ($incsecs, $incmins);
 	$adjcost = ($numdata->{cost} * (10000 + $carddata->{markup})) / 10000;
 	$adjconn = ($numdata->{connectcost} * (10000 + $carddata->{markup})) / 10000;
 #	print STDERR "Adjusted cost is $adjcost with $adjconn fee\n";
@@ -261,9 +283,33 @@
 	
 }
 
+sub checkinuse() {
+	my ($cardno) = @_;
+	my $carddata = &getcard($cardno);
+	if ($carddata->{inuse}) {
+		$AGI->stream_file("your");
+		$AGI->stream_file("card-number");
+		$AGI->stream_file("is-in-use");
+		$AGI->stream_file("please-try-again");
+		$AGI->stream_file("later");
+		$AGI->stream_file("vm-goodbye");
+		exit(0);
+	}
+return;
+}
+
+sub setinuse() {
+	my ($cardno, $inuse) = @_;
+	my $carddata = &getcard($cardno);
+	$carddata->{inuse} = $inuse;
+	&savedata($carddata);
+	return;
+}
+
 #
 # Answer the line right away
 #
+my ($calleridnum, $phoneno) = @ARGV;
 $AGI->answer();
 #
 # Play a nice tone
@@ -281,14 +327,32 @@
 exit(0) if $res < 0;
 my $cardno;
 my $callerid = $input{callerid};
-while(!$carddata->{number}) {
-	$tries++;
-	print STDERR "Pre-res is \"$res\"\n";
-	if (length($res) > 0) {
-		$cardno = $AGI->get_data("astcc-silence");
-	} else {
-		$cardno = $AGI->get_data("astcc-accountnum");
+if (!$calleridnum && !$phoneno) {
+	while(!$carddata->{number}) {
+		$tries++;
+		print STDERR "Pre-res is \"$res\"\n";
+		if (length($res) > 0) {
+			$cardno = $AGI->get_data("astcc-silence");
+		} else {
+			$cardno = $AGI->get_data("astcc-accountnum");
+		}
+		exit if $cardno < 0;
+		$cardno = $res . $cardno;
+		print STDERR "Card no is $cardno\n";
+		exit(0) if $cardno < 0;
+		$carddata = &getcard($cardno);
+		if (!$carddata->{number}) {
+			$res = &mystreamfile("astcc-badaccount");
+			exit(0) if $res < 0;
+			if ($tries > 2) {
+				$AGI->stream_file("vm-goodbye");
+				exit(0);
+			}
+		}
 	}
+}
+else {
+	$cardno = $calleridnum;
 	exit if $cardno < 0;
 	$cardno = $res . $cardno;
 	print STDERR "Card no is $cardno\n";
@@ -296,45 +360,78 @@
 	$carddata = &getcard($cardno);
 	if (!$carddata->{number}) {
 		$res = &mystreamfile("astcc-badaccount");
-		exit(0) if $res < 0;
-		if ($tries > 2) {
-			$AGI->stream_file("vm-goodbye");
-			exit(0);
-		}
+		$AGI->stream_file("vm-goodbye");
+		exit(0);
 	}
 }
+
 #
 # At this point we have a valid card number.
 #
+&checkinuse($carddata->{number});
+&setinuse($carddata->{number}, 1);
+
 $res = &tell_time($carddata);
 
 if ($credit < 1) {
-	$AGI->streamfile("vm-goodbye");
+	$AGI->stream_file("vm-goodbye");
+	&setinuse($carddata->{number}, 0);
+	exit(0);
+}
+
+if ($res < 0) {
+	&setinuse($carddata->{number}, 0);
 	exit(0);
 }
 
-exit(0) if $res < 0;
 $tries = 0;
-while(!$numdata->{pattern}) {
-	$tries++;
-	print STDERR "Pre-res is \"$res\"\n";
-	if (length($res) > 0) {
-		$phoneno = $AGI->get_data("astcc-silence");
-	} else {
-		$phoneno = $AGI->get_data("astcc-phonenum");
+if (!$phoneno) {
+	while(!$numdata->{pattern}) {
+		$tries++;
+		print STDERR "Pre-res is \"$res\"\n";
+		if (length($res) > 0) {
+			$phoneno = $AGI->get_data("astcc-silence");
+		} else {
+			$phoneno = $AGI->get_data("astcc-phonenum");
+		}
+
+		if ($phoneno < 0) {
+			&setinuse($carddata->{number}, 0);
+			exit;
+		}
+
+		$phoneno = $res . $phoneno;
+		print STDERR "Phone number is $phoneno\n";
+		if ($phoneno < 0) {
+			&setinuse($carddata->{number}, 0);
+			exit(0);
+		}
+		$numdata = &getphone($phoneno);
+		if (!$numdata->{pattern}) {
+			$res = &mystreamfile("astcc-badphone");
+			if ($res < 0) {
+				&setinuse($carddata->{number}, 0);
+				exit(0);
+			}
+			if ($tries > 2) {
+				$AGI->stream_file("vm-goodbye");
+				&setinuse($carddata->{number}, 0);
+				exit(0);
+			}
+		}
+	}
+}
+else {
+	if ($phoneno < 0) {
+		&setinuse($carddata->{number}, 0);
+		exit(0);
 	}
-	exit if $phoneno < 0;
-	$phoneno = $res . $phoneno;
-	print STDERR "Phone number is $phoneno\n";
-	exit(0) if $phoneno < 0;
 	$numdata = &getphone($phoneno);
 	if (!$numdata->{pattern}) {
 		$res = &mystreamfile("astcc-badphone");
-		exit(0) if $res < 0;
-		if ($tries > 2) {
-			$AGI->stream_file("vm-goodbye");
-			exit(0);
-		}
+		$AGI->stream_file("vm-goodbye");
+		&setinuse($carddata->{number}, 0);
+		exit(0);
 	}
 }
 
@@ -347,17 +444,29 @@
 if (($adjconn > $credit) || (($adjconn < 1) && ($adjcost > $credit))){
 	$res = &mystreamfile("astcc-notenough");
 	$AGI->stream_file("vm-goodbye") if (!$res);
+	&setinuse($carddata->{number}, 0);
 	exit(0);
 }
 
-$res = &mystreamfile("astcc-pleasewait");
-exit(0) if $res < 0;
 
 $maxmins = int(($credit - $adjconn) / $adjcost);
+if ($maxmins <= 0.1) {
+	$res = &mystreamfile("astcc-notenough");
+	$AGI->stream_file("vm-goodbye") if (!$res);
+	&setinuse($carddata->{number}, 0);
+	exit(0);
+}
+
+$res = &mystreamfile("astcc-pleasewait");
+
+if ($res < 0) {
+	&setinuse($carddata->{number}, 0);
+	exit(0);
+}
 
 my @trunks = split(/:/, $numdata->{trunks});
 foreach $trunk (@trunks) {
-	$res = &trytrunk($trunk, $phoneno);
+	$res = &trytrunk($trunk, $phoneno, $maxmins);
 	if (!($res eq "CHANUNAVAIL") && !($res eq "CONGESTION")) {
 		# Ooh, something actually happend! 
 		if ($res eq "BUSY") {
@@ -376,10 +485,11 @@
 			&savecdr($cardno, $callerid, $phoneno, $trunk, $res, $answeredtime, $cost);
 			&savedata($carddata);
 		}
+		&setinuse($carddata->{number}, 0);
 		exit(0);
 	}
 }
 $res = &mystreamfile("astcc-unavail");
 &savecdr($cardno, $callerid, $phoneno, $trunk, $res, 0, 0);
+&setinuse($carddata->{number}, 0);
 exit(0);
-




More information about the svn-commits mailing list