[Astpp-commit] SF.net SVN: astpp:[2326] trunk/freeswitch
Brought to you by:
darrenkw
|
From: <dar...@us...> - 2011-01-05 06:12:20
|
Revision: 2326
http://astpp.svn.sourceforge.net/astpp/?rev=2326&view=rev
Author: darrenkw
Date: 2011-01-05 06:12:12 +0000 (Wed, 05 Jan 2011)
Log Message:
-----------
Replaced XML::Simple
Modified Paths:
--------------
trunk/freeswitch/astpp-callingcards.pl
trunk/freeswitch/astpp-fs-cdr-xml.pl
Modified: trunk/freeswitch/astpp-callingcards.pl
===================================================================
--- trunk/freeswitch/astpp-callingcards.pl 2010-12-31 02:39:20 UTC (rev 2325)
+++ trunk/freeswitch/astpp-callingcards.pl 2011-01-05 06:12:12 UTC (rev 2326)
@@ -431,11 +431,12 @@
if ( $cc == 1 ) {
$session->execute( "export", "accountcode=CC:$cardinfo->{number}" );
$session->execute( "export", "callingcard=$cardinfo->{number}" );
+ $session->execute( "export", "calldestination=$destination" );
}
else {
- $session->execute( "export",
- "accountcode=CC:$cardinfo->{cardnumber}" );
+ $session->execute( "export", "accountcode=CC:$cardinfo->{cardnumber}" );
$session->execute( "export", "callingcard=$cardinfo->{cardnumber}" );
+ $session->execute( "export", "calldestination=$destination" );
}
$session->execute( "bridge", "$data_string" );
return 1;
Modified: trunk/freeswitch/astpp-fs-cdr-xml.pl
===================================================================
--- trunk/freeswitch/astpp-fs-cdr-xml.pl 2010-12-31 02:39:20 UTC (rev 2325)
+++ trunk/freeswitch/astpp-fs-cdr-xml.pl 2011-01-05 06:12:12 UTC (rev 2326)
@@ -19,9 +19,12 @@
use ASTPP;
use URI::Escape;
use strict;
-use XML::Simple;
+#use XML::Simple;
use Data::Dumper;
+#use XML::Twig;
+use XML::LibXML;
+
use vars
qw($cdr_db $params $ASTPP @output $config $freeswitch_db $astpp_db $verbosity );
use Locale::gettext_pp qw(:locale_h);
@@ -53,122 +56,172 @@
foreach my $param ( param() ) {
$params->{$param} = param($param);
}
+my $cdrinfo;
-#print STDERR $params->{cdr};
+print STDERR $params->{cdr};
-# create object
-my $xml = new XML::Simple;
+my $parser = XML::LibXML->new();
+my $cdr = $parser->parse_string($params->{cdr});
-# read XML file
-my $data = $xml->XMLin($params->{cdr});
+foreach my $var ($cdr->findnodes('/cdr/channel_data/direction')) {
+ $cdrinfo->{direction} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/callingcard')) {
+ $cdrinfo->{callingcard} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/callingcard_destination')) {
+ $cdrinfo->{callingcard_destination} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/accountcode')) {
+ $cdrinfo->{accountcode} = uri_unescape($var->to_literal);
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/caller_id')) {
+ $cdrinfo->{caller_id} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/channel_name')) {
+ $cdrinfo->{channel_name} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/last_app')) {
+ $cdrinfo->{last_app} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/last_arg')) {
+ $cdrinfo->{last_arg} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/start_stamp')) {
+ $cdrinfo->{start_stamp} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/answer_stamp')) {
+ $cdrinfo->{answer_stamp} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/end_stamp')) {
+ $cdrinfo->{end_stamp} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/duration')) {
+ $cdrinfo->{duration} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/billsec')) {
+ $cdrinfo->{billsec} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/hangup_cause')) {
+ $cdrinfo->{hangup_cause} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/read_code')) {
+ $cdrinfo->{read_code} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/write_code')) {
+ $cdrinfo->{write_code} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/provider')) {
+ $cdrinfo->{provider} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/trunk')) {
+ $cdrinfo->{trunk} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/outbound_route')) {
+ $cdrinfo->{outbound_route} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/progressmsec')) {
+ $cdrinfo->{progressmess} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/answermsec')) {
+ $cdrinfo->{answermsec} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/variables/progress_mediamsec')) {
+ $cdrinfo->{progress_mediamsec} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/callflow/caller_profile/username')) {
+ $cdrinfo->{username} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/callflow/caller_profile/destination_number')) {
+ $cdrinfo->{destination_number} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/callflow/caller_profile/context')) {
+ $cdrinfo->{context} = $var->to_literal;
+}
+foreach my $var ($cdr->findnodes('/cdr/callflow/caller_profile/uuid')) {
+ $cdrinfo->{uuid} = $var->to_literal;
+}
+if ($cdrinfo->{callingcard_destination} && $cdrinfo->{direction} eq "outbound") {
+ $cdrinfo->{destination_number} = $cdrinfo->{callingcard_destination};
+}
-# print output
-print STDERR Dumper($data);
+print STDERR Dumper $cdrinfo;
-
my $tmp = "INSERT INTO " . $config->{freeswitch_cdr_table} . "(accountcode,src,dst,dcontext,clid,channel,dstchannel,lastapp,"
. "lastdata,calldate,answerdate,enddate,duration,billsec,disposition,amaflags,uniqueid,userfield,read_codec,"
. "write_codec,cost,vendor,provider,trunk,outbound_route,progressmsec,answermsec,progress_mediamsec) VALUES ("
- . "'"
- . $data->{variables}->{accountcode}
- . "'"
+ . "'" . $cdrinfo->{accountcode} . "'"
+ . ","
+ . "'" . $cdrinfo->{username} . "'"
. ","
- . "'"
- . $data->{callflow}->{caller_profile}->{username}
- . "'"
+ . "'" . $cdrinfo->{destination_number} . "'"
. ","
-# . $cdr_db->quote($data->{callflow}->{caller_profile}->{originatee}->{originatee_caller_profile}->{destination_number})
- . "'"
- . $data->{callflow}->{caller_profile}->{destination_number}
- . "'"
+ . "'" . $cdrinfo->{context} . "'"
. ","
-# . $cdr_db->quote($data->{callflow}->{caller_profile}->{originatee}->{originatee_caller_profile}->{context})
- . "'"
- . $data->{callflow}->{caller_profile}->{context}
- . "'"
+ . "'" . uri_unescape($cdrinfo->{caller_id}) . "'"
. ","
- . "'"
- . uri_unescape($data->{variables}->{caller_id})
- . "'"
-# . "\"" . $cdr_db->quote($data->{callflow}->{caller_profile}->{originatee}->{originatee_caller_profile}->{caller_id_name}) . "\""
-# . "<" . $cdr_db->quote($data->{callflow}->{caller_profile}->{originatee}->{originatee_caller_profile}->{caller_id_number}) . ">"
-# . "\"" . $data->{callflow}->{caller_profile}->{caller_id_name} . "\""
-# . "<" . $data->{callflow}->{caller_profile}->{caller_id_number} . ">"
+ . "'" . uri_unescape($cdrinfo->{channel_name}) . "'"
. ","
- . "'"
- . uri_unescape($data->{variables}->{channel_name})
- . "'"
- . ","
. "''"
. ","
- . "'" . $data->{variables}->{last_app} . "'"
+ . "'" . $cdrinfo->{last_app} . "'"
. ","
- . "'" . uri_unescape($data->{variables}->{last_arg}) . "'"
+ . "'" . uri_unescape($cdrinfo->{last_arg}) . "'"
. ","
- . "'"
- . uri_unescape($data->{variables}->{start_stamp})
- . "'"
+ . "'" . uri_unescape($cdrinfo->{start_stamp}) . "'"
. ","
- . "'" . uri_unescape($data->{variables}->{answer_stamp}) . "'"
+ . "'" . uri_unescape($cdrinfo->{answer_stamp}) . "'"
. ","
- . "'"
- . uri_unescape($data->{variables}->{end_stamp})
- . "'"
+ . "'" . uri_unescape($cdrinfo->{end_stamp}) . "'"
. ","
- . "'"
- . $data->{variables}->{duration}
- . "'"
+ . "'" . $cdrinfo->{duration} . "'"
. ","
- . "'"
- . $data->{variables}->{billsec}
- . "'"
+ . "'" . $cdrinfo->{billsec} . "'"
. ","
- . "'"
- . $data->{variables}->{hangup_cause}
- . "'"
+ . "'" . $cdrinfo->{hangup_cause} . "'"
. ","
. "''"
. ","
- . "'"
- . $data->{callflow}->{caller_profile}->{uuid}
- . "'"
+ . "'" . $cdrinfo->{uuid} . "'"
. ","
. "''"
. ","
- . "'" . $data->{variables}->{read_code} . "'"
+ . "'" . $cdrinfo->{read_code} . "'"
. ","
- . "'" . $data->{variables}->{write_code} . "'"
+ . "'" . $cdrinfo->{write_code} . "'"
. ",'none','none'"
. ","
- . "'" . $data->{variables}->{provider} . "'"
+ . "'" . $cdrinfo->{provider} . "'"
. ","
- . "'" . $data->{variables}->{trunk} . "'"
+ . "'" . $cdrinfo->{trunk} . "'"
. ","
- . "'" . $data->{variables}->{outbound_route} . "'"
+ . "'" . $cdrinfo->{outbound_route} . "'"
. ","
- . "'" . $data->{variables}->{progressmsec} . "'"
+ . "'" . $cdrinfo->{progressmsec} . "'"
. ","
- . "'" . $data->{variables}->{answermsec} . "'"
+ . "'" . $cdrinfo->{answermsec} . "'"
. ","
- . "'" . $data->{variables}->{progress_mediamsec} . "'"
+ . "'" . $cdrinfo->{progress_mediamsec} . "'"
. ")";
print STDERR "\n" . $tmp . "\n";
$cdr_db->do($tmp);
-print "Wrote CDR";
+print "Wrote CDR\n";
my (@chargelist);
-push @chargelist, $data->{callflow}->{caller_profile}->{uuid};
+push @chargelist, $cdrinfo->{uuid};
&processlist( $astpp_db, $cdr_db, $config, \@chargelist );
print STDERR "VENDOR CHARGES: " . $config->{trackvendorcharges} . "\n";
-&vendor_process_rating_fs( $astpp_db, $cdr_db, $config, "none", $data->{callflow}->{caller_profile}->{uuid},"" ) if $config->{trackvendorcharges} == 1;
+&vendor_process_rating_fs( $astpp_db, $cdr_db, $config, "none", $cdrinfo->{uuid},"" ) if $config->{trackvendorcharges} == 1;
-&process_callingcard_cdr if $data->{variables}->{callingcard};
+if ($cdrinfo->{callingcard_destination} && $cdrinfo->{direction} eq "outbound") {
+ &process_callingcard_cdr;
+}
sub process_callingcard_cdr() {
my ( $cardinfo, $brandinfo, $numberinfo, $pricelistinfo,$cc );
- my $destination = $data->{callflow}->{caller_profile}->{destination_number};
+ my $destination = $cdrinfo->{destination_number};
$destination =~ s/@.*//g;
- my $cardnumber = $data->{variables}->{callingcard};
+ my $cardnumber = $cdrinfo->{callingcard};
$cardinfo = &get_callingcard( $astpp_db, $cardnumber, $config );
if ( !$cardinfo ) {
$cardinfo = &get_account_cc( $astpp_db, $cardnumber );
@@ -192,7 +245,7 @@
$destination,
$brandinfo->{pricelist}, $cardinfo
);
- if ( $data->{variables}->{billsec} > 0 )
+ if ( $cdrinfo->{billsec} > 0 )
{
$ASTPP->debug(
debug => "CALL ANSWERED",
@@ -207,13 +260,13 @@
}
$ASTPP->debug(
debug =>
-"$numberinfo->{connectcost}, $numberinfo->{cost}, $data->{variables}->{billsec}, $increment, $numberinfo->{includedseconds}",
+"$numberinfo->{connectcost}, $numberinfo->{cost}, $cdrinfo->{billsec}, $increment, $numberinfo->{includedseconds}",
verbosity => $verbosity
);
my $charge = &calc_call_cost(
$numberinfo->{connectcost},
$numberinfo->{cost},
- $data->{variables}->{billsec},
+ $cdrinfo->{billsec},
$increment,
$numberinfo->{includedseconds}
);
@@ -226,12 +279,12 @@
( ( $cardinfo->{minute_fee_pennies} * 100 ) +
$charge )
if $cardinfo->{timeused} +
- $data->{variables}->{billsec} =>
+ $cdrinfo->{billsec} =>
$cardinfo->{minute_fee_minutes};
}
if ( $cardinfo->{min_length_pennies} > 0
&& ( $cardinfo->{min_length_minutes} * 60 ) >
- $data->{variables}->{billsec} )
+ $cdrinfo->{billsec} )
{
$charge =
( ( $cardinfo->{min_length_pennies} * 100 ) +
@@ -242,12 +295,12 @@
$astpp_db,
$config,
$cardinfo,
- uri_unescape($data->{variables}->{caller_id}),
+ uri_unescape($cdrinfo->{caller_id}),
$destination,
- uri_unescape($data->{variables}->{hangup_cause}),
- uri_unescape($data->{variables}->{start_stamp}),
+ uri_unescape($cdrinfo->{hangup_cause}),
+ uri_unescape($cdrinfo->{start_stamp}),
$charge,
- $data->{variables}->{billsec}
+ $cdrinfo->{billsec}
);
&callingcard_set_in_use($astpp_db,$cardinfo,0);
&callingcard_update_balance($astpp_db,$cardinfo,$charge);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|