[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. |