[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