2012-06-04 16:58:40 +02:00
< ? php
/*
FusionPBX
Version : MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 ( the " License " ); you may not use this file except in compliance with
the License . You may obtain a copy of the License at
http :// www . mozilla . org / MPL /
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
for the specific language governing rights and limitations under the
License .
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane < markjcrane @ fusionpbx . com >
2013-03-10 06:39:45 +01:00
Portions created by the Initial Developer are Copyright ( C ) 2008 - 2013
2012-06-04 16:58:40 +02:00
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
2014-06-22 00:08:11 +02:00
Luis Daniel Lucio Quiroz < dlucio @ okay . com . mx >
2012-06-04 16:58:40 +02:00
*/
2014-06-19 22:52:41 +02:00
2014-06-22 00:08:11 +02:00
//check the permission
2014-06-19 22:52:41 +02:00
2012-06-04 16:58:40 +02:00
if ( defined ( 'STDIN' )) {
$document_root = str_replace ( " \\ " , " / " , $_SERVER [ " PHP_SELF " ]);
2013-04-30 12:05:34 +02:00
preg_match ( " /^(.*) \ /app \ /.* $ / " , $document_root , $matches );
2012-06-04 16:58:40 +02:00
$document_root = $matches [ 1 ];
set_include_path ( $document_root );
$_SERVER [ " DOCUMENT_ROOT " ] = $document_root ;
2013-07-06 08:03:27 +02:00
require_once " resources/require.php " ;
2012-06-04 16:58:40 +02:00
$display_type = 'text' ; //html, text
}
else {
include " root.php " ;
2013-07-06 08:03:27 +02:00
require_once " resources/require.php " ;
2012-06-04 16:58:40 +02:00
}
//set debug
2014-06-22 00:08:11 +02:00
$debug = true ; //true //false
2012-06-04 16:58:40 +02:00
if ( $debug ){
$time5 = microtime ( true );
$insert_time = $insert_count = 0 ;
}
//increase limits
set_time_limit ( 3600 );
ini_set ( 'memory_limit' , '256M' );
2014-06-22 00:08:11 +02:00
ini_set ( " precision " , 6 );
2012-06-04 16:58:40 +02:00
//set pdo attribute that enables exception handling
$db -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
2014-06-22 00:08:11 +02:00
2014-06-26 01:58:47 +02:00
if ( file_exists ( $_SERVER [ 'DOCUMENT_ROOT' ] . PROJECT_PATH . " /app/billings/app_config.php " )){
require_once " app/billings/functions.php " ;
}
2013-04-30 17:50:46 +02:00
//define the process_xml_cdr function
function process_xml_cdr ( $db , $leg , $xml_string ) {
//set global variable
global $debug ;
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//parse the xml to get the call detail record info
try {
$xml = simplexml_load_string ( $xml_string );
}
catch ( Exception $e ) {
echo $e -> getMessage ();
}
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//prepare the database object
2013-07-06 09:13:36 +02:00
require_once " resources/classes/database.php " ;
2013-04-30 17:50:46 +02:00
$database = new database ;
$database -> table = " v_xml_cdr " ;
2014-06-14 06:53:04 +02:00
//misc
$uuid = check_str ( urldecode ( $xml -> variables -> uuid ));
$database -> fields [ 'uuid' ] = $uuid ;
$database -> fields [ 'accountcode' ] = check_str ( urldecode ( $xml -> variables -> accountcode ));
$database -> fields [ 'default_language' ] = check_str ( urldecode ( $xml -> variables -> default_language ));
$database -> fields [ 'bridge_uuid' ] = check_str ( urldecode ( $xml -> variables -> bridge_uuid ));
//$database->fields['digits_dialed'] = check_str(urldecode($xml->variables->digits_dialed));
$database -> fields [ 'sip_hangup_disposition' ] = check_str ( urldecode ( $xml -> variables -> sip_hangup_disposition ));
$database -> fields [ 'pin_number' ] = check_str ( urldecode ( $xml -> variables -> pin_number ));
//time
$database -> fields [ 'start_epoch' ] = check_str ( urldecode ( $xml -> variables -> start_epoch ));
$start_stamp = check_str ( urldecode ( $xml -> variables -> start_stamp ));
$database -> fields [ 'start_stamp' ] = $start_stamp ;
$database -> fields [ 'answer_stamp' ] = check_str ( urldecode ( $xml -> variables -> answer_stamp ));
$database -> fields [ 'answer_epoch' ] = check_str ( urldecode ( $xml -> variables -> answer_epoch ));
$database -> fields [ 'end_epoch' ] = check_str ( urldecode ( $xml -> variables -> end_epoch ));
$database -> fields [ 'end_stamp' ] = check_str ( urldecode ( $xml -> variables -> end_stamp ));
$database -> fields [ 'duration' ] = check_str ( urldecode ( $xml -> variables -> duration ));
$database -> fields [ 'mduration' ] = check_str ( urldecode ( $xml -> variables -> mduration ));
$database -> fields [ 'billsec' ] = check_str ( urldecode ( $xml -> variables -> billsec ));
$database -> fields [ 'billmsec' ] = check_str ( urldecode ( $xml -> variables -> billmsec ));
//codecs
$database -> fields [ 'read_codec' ] = check_str ( urldecode ( $xml -> variables -> read_codec ));
$database -> fields [ 'read_rate' ] = check_str ( urldecode ( $xml -> variables -> read_rate ));
$database -> fields [ 'write_codec' ] = check_str ( urldecode ( $xml -> variables -> write_codec ));
$database -> fields [ 'write_rate' ] = check_str ( urldecode ( $xml -> variables -> write_rate ));
$database -> fields [ 'remote_media_ip' ] = check_str ( urldecode ( $xml -> variables -> remote_media_ip ));
$database -> fields [ 'hangup_cause' ] = check_str ( urldecode ( $xml -> variables -> hangup_cause ));
$database -> fields [ 'hangup_cause_q850' ] = check_str ( urldecode ( $xml -> variables -> hangup_cause_q850 ));
//call center
$database -> fields [ 'cc_side' ] = check_str ( urldecode ( $xml -> variables -> cc_side ));
$database -> fields [ 'cc_member_uuid' ] = check_str ( urldecode ( $xml -> variables -> cc_member_uuid ));
$database -> fields [ 'cc_queue_joined_epoch' ] = check_str ( urldecode ( $xml -> variables -> cc_queue_joined_epoch ));
$database -> fields [ 'cc_queue' ] = check_str ( urldecode ( $xml -> variables -> cc_queue ));
$database -> fields [ 'cc_member_session_uuid' ] = check_str ( urldecode ( $xml -> variables -> cc_member_session_uuid ));
$database -> fields [ 'cc_agent' ] = check_str ( urldecode ( $xml -> variables -> cc_agent ));
$database -> fields [ 'cc_agent_type' ] = check_str ( urldecode ( $xml -> variables -> cc_agent_type ));
$database -> fields [ 'waitsec' ] = check_str ( urldecode ( $xml -> variables -> waitsec ));
//app info
$database -> fields [ 'last_app' ] = check_str ( urldecode ( $xml -> variables -> last_app ));
$database -> fields [ 'last_arg' ] = check_str ( urldecode ( $xml -> variables -> last_arg ));
//conference
$database -> fields [ 'conference_name' ] = check_str ( urldecode ( $xml -> variables -> conference_name ));
$database -> fields [ 'conference_uuid' ] = check_str ( urldecode ( $xml -> variables -> conference_uuid ));
$database -> fields [ 'conference_member_id' ] = check_str ( urldecode ( $xml -> variables -> conference_member_id ));
//call quality
$rtp_audio_in_mos = check_str ( urldecode ( $xml -> variables -> rtp_audio_in_mos ));
if ( strlen ( $rtp_audio_in_mos ) > 0 ) {
$database -> fields [ 'rtp_audio_in_mos' ] = $rtp_audio_in_mos ;
}
2013-04-30 17:50:46 +02:00
//get the values from the callflow.
$x = 0 ;
foreach ( $xml -> callflow as $row ) {
if ( $x == 0 ) {
$context = check_str ( urldecode ( $row -> caller_profile -> context ));
$database -> fields [ 'destination_number' ] = check_str ( urldecode ( $row -> caller_profile -> destination_number ));
$database -> fields [ 'context' ] = $context ;
$database -> fields [ 'network_addr' ] = check_str ( urldecode ( $row -> caller_profile -> network_addr ));
}
$database -> fields [ 'caller_id_name' ] = check_str ( urldecode ( $row -> caller_profile -> caller_id_name ));
$database -> fields [ 'caller_id_number' ] = check_str ( urldecode ( $row -> caller_profile -> caller_id_number ));
$x ++ ;
2012-06-04 16:58:40 +02:00
}
2013-04-30 17:50:46 +02:00
unset ( $x );
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//store the call leg
$database -> fields [ 'leg' ] = $leg ;
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//store the call direction
$database -> fields [ 'direction' ] = check_str ( urldecode ( $xml -> variables -> call_direction ));
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//store post dial delay, in milliseconds
$database -> fields [ 'pdd_ms' ] = check_str ( urldecode ( $xml -> variables -> progress_mediamsec ) + urldecode ( $xml -> variables -> progressmsec ));
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//get break down the date to year, month and day
$tmp_time = strtotime ( $start_stamp );
$tmp_year = date ( " Y " , $tmp_time );
$tmp_month = date ( " M " , $tmp_time );
$tmp_day = date ( " d " , $tmp_time );
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//get the domain values from the xml
$domain_name = check_str ( urldecode ( $xml -> variables -> domain_name ));
2014-06-12 13:53:52 +02:00
$domain_uuid = check_str ( urldecode ( $xml -> variables -> domain_uuid ));
2012-07-07 20:40:15 +02:00
2013-04-30 17:50:46 +02:00
//get the domain_uuid with the domain_name
2012-07-07 20:40:15 +02:00
if ( strlen ( $domain_uuid ) == 0 ) {
2013-04-30 17:50:46 +02:00
$sql = " select domain_uuid from v_domains " ;
if ( strlen ( $domain_name ) == 0 && $context != 'public' && $context != 'default' ) {
$sql .= " where domain_name = ' " . $context . " ' " ;
}
else {
$sql .= " where domain_name = ' " . $domain_name . " ' " ;
}
2012-07-07 20:40:15 +02:00
$row = $db -> query ( $sql ) -> fetch ();
$domain_uuid = $row [ 'domain_uuid' ];
2013-04-30 17:50:46 +02:00
if ( strlen ( $domain_uuid ) == 0 ) {
$sql = " select domain_name, domain_uuid from v_domains " ;
$row = $db -> query ( $sql ) -> fetch ();
$domain_uuid = $row [ 'domain_uuid' ];
if ( strlen ( $domain_name ) == 0 ) { $domain_name = $row [ 'domain_name' ]; }
}
2012-07-07 20:40:15 +02:00
}
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//set values in the database
$database -> domain_uuid = $domain_uuid ;
$database -> fields [ 'domain_uuid' ] = $domain_uuid ;
$database -> fields [ 'domain_name' ] = $domain_name ;
2012-06-04 16:58:40 +02:00
2013-04-30 17:50:46 +02:00
//check whether a recording exists
$recording_relative_path = '/archive/' . $tmp_year . '/' . $tmp_month . '/' . $tmp_day ;
if ( file_exists ( $_SESSION [ 'switch' ][ 'recordings' ][ 'dir' ] . $recording_relative_path . '/' . $uuid . '.wav' )) {
$recording_file = $recording_relative_path . '/' . $uuid . '.wav' ;
}
elseif ( file_exists ( $_SESSION [ 'switch' ][ 'recordings' ][ 'dir' ] . $recording_relative_path . '/' . $uuid . '.mp3' )) {
$recording_file = $recording_relative_path . '/' . $uuid . '.mp3' ;
}
if ( isset ( $recording_file ) && ! empty ( $recording_file )) {
$database -> fields [ 'recording_file' ] = $recording_file ;
}
2013-03-10 06:39:45 +01:00
2014-06-14 09:07:04 +02:00
//save to the database in xml format
if ( $_SESSION [ 'cdr' ][ 'format' ][ 'text' ] == " xml " && $_SESSION [ 'cdr' ][ 'storage' ][ 'text' ] == " db " ) {
2014-06-14 06:53:04 +02:00
$database -> fields [ 'xml' ] = check_str ( $xml_string );
}
2014-06-14 09:07:04 +02:00
//save to the database in json format
if ( $_SESSION [ 'cdr' ][ 'format' ][ 'text' ] == " json " && $_SESSION [ 'cdr' ][ 'storage' ][ 'text' ] == " db " ) {
2014-06-14 06:58:50 +02:00
$database -> fields [ 'json' ] = json_encode ( $xml );
2012-06-04 16:58:40 +02:00
}
2013-04-30 17:50:46 +02:00
//insert the check_str($extension_uuid)
if ( strlen ( $xml -> variables -> extension_uuid ) > 0 ) {
$database -> fields [ 'extension_uuid' ] = check_str ( urldecode ( $xml -> variables -> extension_uuid ));
2012-06-04 16:58:40 +02:00
}
2013-04-30 17:50:46 +02:00
2014-06-19 22:52:41 +02:00
//billing information
2014-06-22 00:08:11 +02:00
if ( file_exists ( $_SERVER [ 'DOCUMENT_ROOT' ] . PROJECT_PATH . " /app/billings/app_config.php " )){
2014-06-26 03:54:35 +02:00
$db2 = new database ;
2014-06-22 00:08:11 +02:00
2014-06-24 13:51:37 +02:00
switch ( check_str ( urldecode ( $xml -> variables -> call_direction ))){
case " outbound " :
$database -> fields [ 'carrier_name' ] = check_str ( urldecode ( $xml -> variables -> lcr_carrier ));
$sql_rate = " SELECT connect_increment, talk_increment FROM v_lcr, v_carriers WHERE v_carriers.carrier_name = ' " . $xml -> variables -> lcr_carrier . " ' AND v_lcr.rate= " . $xml -> variables -> lcr_rate . " AND v_lcr.lcr_direction = ' " . check_str ( urldecode ( $xml -> variables -> call_direction )) . " ' AND digits in ( " . check_str ( urldecode ( $xml -> variables -> lcr_query_expanded_digits )) . " ) AND v_lcr.carrier_uuid = v_carriers.carrier_uuid ORDER BY digits DESC, rate ASC limit 1 " ;
$sql_user_rate = " SELECT connect_increment, talk_increment FROM v_lcr WHERE carrier_uuid='' AND v_lcr.lcr_direction = ' " . check_str ( urldecode ( $xml -> variables -> call_direction )) . " ' AND digits IN ( " . check_str ( urldecode ( $xml -> variables -> lcr_query_expanded_digits )) . " ) ORDER BY digits DESC, rate ASC limit 1 " ;
if ( $debug ) {
echo " sql_rate: $sql_rate\n " ;
echo " sql_user_rate: $sql_user_rate\n " ;
}
$db2 -> sql = $sql_rate ;
$db2 -> result = $db2 -> execute ();
// print_r($db2->result);
$lcr_rate = ( strlen ( $xml -> variables -> lcr_rate ) ? $xml -> variables -> lcr_rate : 0 );
$lcr_first_increment = ( strlen ( $db2 -> result [ 0 ][ 'connect_increment' ]) ? check_str ( $db2 -> result [ 0 ][ 'connect_increment' ]) : 60 );
$lcr_second_increment = ( strlen ( $db2 -> result [ 0 ][ 'talk_increment' ]) ? check_str ( $db2 -> result [ 0 ][ 'talk_increment' ]) : 60 );
unset ( $db2 -> sql );
unset ( $db2 -> result );
$db2 -> sql = $sql_user_rate ;
$db2 -> result = $db2 -> execute ();
$lcr_user_rate = ( strlen ( $xml -> variables -> lcr_user_rate ) ? $xml -> variables -> lcr_user_rate : 0.01 );
$lcr_user_first_increment = ( strlen ( $db2 -> result [ 0 ][ 'connect_increment' ]) ? check_str ( $db2 -> result [ 0 ][ 'connect_increment' ]) : 60 );
$lcr_user_second_increment = ( strlen ( $db2 -> result [ 0 ][ 'talk_increment' ]) ? check_str ( $db2 -> result [ 0 ][ 'talk_increment' ]) : 60 );
unset ( $db2 -> sql );
unset ( $db2 -> result );
break ;
case " inbound " :
// Need to add code for tollfree number, unique case when we bill inbound
$lcr_rate = 0 ; $lcr_first_increment = 0 ; $lcr_second_increment = 0 ;
$lcr_user_rate = 0 ; $lcr_user_first_increment = 0 ; $lcr_user_second_increment = 0 ;
break ;
case " local " :
$lcr_rate = 0 ; $lcr_first_increment = 0 ; $lcr_second_increment = 0 ;
$lcr_user_rate = 0 ; $lcr_user_first_increment = 0 ; $lcr_user_second_increment = 0 ;
break ;
2014-06-22 00:08:11 +02:00
}
$time = check_str ( urldecode ( $xml -> variables -> billsec ));
$call_buy = call_cost ( $lcr_rate , $lcr_first_increment , $lcr_second_increment , $time );
$call_sell = call_cost ( $lcr_user_rate , $lcr_user_first_increment , $lcr_user_second_increment , check_str ( urldecode ( $xml -> variables -> billsec )));
$database -> fields [ 'call_buy' ] = check_str ( $call_buy );
$database -> fields [ 'call_sell' ] = check_str ( $call_sell );
if ( $debug ) {
2014-06-22 20:52:14 +02:00
echo " c " . $database -> fields [ 'carrier_name' ] . " \n " ;
2014-06-22 00:08:11 +02:00
echo " t $time\n " ;
echo " b r: $lcr_rate - $lcr_first_increment - $lcr_first_increment = $call_buy\n " ;
echo " s r: $lcr_user_rate - $lcr_user_first_increment - $lcr_user_second_increment = $call_sell\n " ;
}
2014-06-24 03:09:41 +02:00
2014-06-26 03:54:35 +02:00
unset ( $db2 -> sql );
unset ( $db2 -> result );
2014-06-24 03:09:41 +02:00
$sql_balance = " SELECT balance,old_balance FROM v_billings WHERE type_value=' " . check_str ( urldecode ( $xml -> variables -> accountcode )) . " ' " ;
$db2 -> sql = $sql_balance ;
$db2 -> result = $db2 -> execute ();
$balance = $db2 -> result [ 0 ][ 'balance' ];
$old_balance = $db2 -> result [ 0 ][ 'old_balance' ];
if ( $debug ) {
echo " sql_balance: $sql_balance\n " ;
echo " bal: $balance\n " ;
echo " old bal: $old_balance\n " ;
}
$updated_balance = ( double ) $old_balance - ( double ) $call_sell ;
unset ( $db2 -> sql );
unset ( $db2 -> result );
$sql_update_balance = " UPDATE v_billings SET balance= $updated_balance , old_balance= $updated_balance WHERE type_value=' " . check_str ( urldecode ( $xml -> variables -> accountcode )) . " ' " ;
if ( $debug ) {
echo " sql_update_balance: $sql_update_balance\n " ;
}
$db2 -> sql = $sql_update_balance ;
$db2 -> result = $db2 -> execute ();
unset ( $db2 -> sql );
unset ( $db2 -> result );
2014-06-19 22:52:41 +02:00
}
2013-04-30 17:50:46 +02:00
//insert xml_cdr into the db
if ( strlen ( $start_stamp ) > 0 ) {
$database -> add ();
2012-06-04 16:58:40 +02:00
if ( $debug ) {
2013-04-30 17:50:46 +02:00
echo $database -> sql . " \n " ;
2012-06-04 16:58:40 +02:00
}
}
2013-04-30 17:50:46 +02:00
//insert the values
if ( strlen ( $uuid ) > 0 ) {
if ( $debug ) {
$time5_insert = microtime ( true );
//echo $sql."<br />\n";
}
try {
$error = " false " ;
//$db->exec(check_sql($sql));
}
catch ( PDOException $e ) {
$tmp_dir = $_SESSION [ 'switch' ][ 'log' ][ 'dir' ] . '/xml_cdr/failed/' ;
2012-06-04 16:58:40 +02:00
if ( ! file_exists ( $tmp_dir )) {
mkdir ( $tmp_dir , 0777 , true );
}
2014-06-14 09:07:04 +02:00
if ( $_SESSION [ 'cdr' ][ 'format' ][ 'text' ] == " xml " ) {
$tmp_file = $uuid . '.xml' ;
$fh = fopen ( $tmp_dir . '/' . $tmp_file , 'w' );
fwrite ( $fh , $xml_string );
}
else {
$tmp_file = $uuid . '.json' ;
$fh = fopen ( $tmp_dir . '/' . $tmp_file , 'w' );
fwrite ( $fh , json_encode ( $xml ));
}
2012-06-04 16:58:40 +02:00
fclose ( $fh );
2013-04-30 17:50:46 +02:00
if ( $debug ) {
echo $e -> getMessage ();
}
$error = " true " ;
}
2014-06-14 09:07:04 +02:00
if ( $_SESSION [ 'cdr' ][ 'storage' ][ 'text' ] == " dir " && $error != " true " ) {
2013-04-30 17:50:46 +02:00
if ( strlen ( $uuid ) > 0 ) {
$tmp_time = strtotime ( $start_stamp );
$tmp_year = date ( " Y " , $tmp_time );
$tmp_month = date ( " M " , $tmp_time );
$tmp_day = date ( " d " , $tmp_time );
$tmp_dir = $_SESSION [ 'switch' ][ 'log' ][ 'dir' ] . '/xml_cdr/archive/' . $tmp_year . '/' . $tmp_month . '/' . $tmp_day ;
if ( ! file_exists ( $tmp_dir )) {
mkdir ( $tmp_dir , 0777 , true );
}
2014-06-14 09:07:04 +02:00
if ( $_SESSION [ 'cdr' ][ 'format' ][ 'text' ] == " xml " ) {
$tmp_file = $uuid . '.xml' ;
$fh = fopen ( $tmp_dir . '/' . $tmp_file , 'w' );
fwrite ( $fh , $xml_string );
}
else {
$tmp_file = $uuid . '.json' ;
$fh = fopen ( $tmp_dir . '/' . $tmp_file , 'w' );
fwrite ( $fh , json_encode ( $xml ));
}
2013-04-30 17:50:46 +02:00
fclose ( $fh );
}
}
unset ( $error );
2013-04-30 18:44:51 +02:00
2013-04-30 17:50:46 +02:00
if ( $debug ) {
GLOBAL $insert_time , $insert_count ;
2014-06-14 09:19:56 +02:00
$insert_time += microtime ( true ) - $time5_insert ; //add this current query.
2013-04-30 17:50:46 +02:00
$insert_count ++ ;
2012-06-04 16:58:40 +02:00
}
}
2013-04-30 17:50:46 +02:00
unset ( $sql );
}
2012-06-04 16:58:40 +02:00
//get cdr details from the http post
if ( strlen ( $_POST [ " cdr " ]) > 0 ) {
2014-06-18 03:40:17 +02:00
if ( $debug ){
print_r ( $_POST [ " cdr " ]);
}
2012-06-04 16:58:40 +02:00
//authentication for xml cdr http post
2013-04-30 11:30:44 +02:00
if ( strlen ( $_SESSION [ " xml_cdr " ][ " http_enabled " ]) == 0 ) {
2012-06-04 16:58:40 +02:00
//get the contents of xml_cdr.conf.xml
$conf_xml_string = file_get_contents ( $_SESSION [ 'switch' ][ 'conf' ][ 'dir' ] . '/autoload_configs/xml_cdr.conf.xml' );
//parse the xml to get the call detail record info
try {
$conf_xml = simplexml_load_string ( $conf_xml_string );
}
catch ( Exception $e ) {
echo $e -> getMessage ();
}
2013-04-30 11:30:44 +02:00
$_SESSION [ " xml_cdr " ][ " http_enabled " ] = false ;
2012-06-04 16:58:40 +02:00
foreach ( $conf_xml -> settings -> param as $row ) {
if ( $row -> attributes () -> name == " cred " ) {
$auth_array = explode ( " : " , $row -> attributes () -> value );
2013-04-30 11:30:44 +02:00
$_SESSION [ " xml_cdr " ][ " username " ] = $auth_array [ 0 ];
$_SESSION [ " xml_cdr " ][ " password " ] = $auth_array [ 1 ];
//echo "username: ".$_SESSION["xml_cdr"]["username"]."<br />\n";
//echo "password: ".$_SESSION["xml_cdr"]["password"]."<br />\n";
}
if ( $row -> attributes () -> name == " url " ) {
$_SESSION [ " xml_cdr " ][ " http_enabled " ] = true ;
2012-06-04 16:58:40 +02:00
}
}
}
2013-04-30 18:44:51 +02:00
//if http enabled is set to false then deny access
if ( ! $_SESSION [ " xml_cdr " ][ " http_enabled " ]) {
echo " access denied<br /> \n " ;
return ;
}
2013-04-30 11:30:44 +02:00
2013-04-30 18:44:51 +02:00
//check for the correct username and password
if ( $_SESSION [ " xml_cdr " ][ " username " ] == $_SERVER [ " PHP_AUTH_USER " ] && $_SESSION [ " xml_cdr " ][ " password " ] == $_SERVER [ " PHP_AUTH_PW " ]) {
//echo "access granted<br />\n";
}
else {
echo " access denied<br /> \n " ;
return ;
}
//loop through all attribues
//foreach($xml->settings->param[1]->attributes() as $a => $b) {
// echo $a,'="',$b,"\"<br />\n";
//}
2012-06-04 16:58:40 +02:00
//get the http post variable
$xml_string = trim ( $_POST [ " cdr " ]);
//get the leg of the call
if ( substr ( $_REQUEST [ 'uuid' ], 0 , 2 ) == " a_ " ) {
$leg = " a " ;
}
else {
$leg = " b " ;
}
//parse the xml and insert the data into the db
process_xml_cdr ( $db , $leg , $xml_string );
}
//check the filesystem for xml cdr records that were missed
$xml_cdr_dir = $_SESSION [ 'switch' ][ 'log' ][ 'dir' ] . '/xml_cdr' ;
$dir_handle = opendir ( $xml_cdr_dir );
$x = 0 ;
while ( $file = readdir ( $dir_handle )) {
if ( $file != '.' && $file != '..' ) {
if ( ! is_dir ( $xml_cdr_dir . '/' . $file ) ) {
//get the leg of the call
if ( substr ( $file , 0 , 2 ) == " a_ " ) {
$leg = " a " ;
}
else {
$leg = " b " ;
}
//get the xml cdr string
$xml_string = file_get_contents ( $xml_cdr_dir . '/' . $file );
//parse the xml and insert the data into the db
process_xml_cdr ( $db , $leg , $xml_string );
//delete the file after it has been imported
unlink ( $xml_cdr_dir . '/' . $file );
$x ++ ;
}
}
}
closedir ( $dir_handle );
//debug true
if ( $debug ) {
$content = ob_get_contents (); //get the output from the buffer
ob_end_clean (); //clean the buffer
$time = " \n \n $insert_count inserts in: " . number_format ( $insert_time , 5 ) . " seconds. \n " ;
$time .= " Other processing time: " . number_format (( microtime ( true ) - $time5 - $insert_time ), 5 ) . " seconds. \n " ;
2013-04-30 17:50:46 +02:00
$fp = fopen ( $_SESSION [ 'server' ][ 'temp' ][ 'dir' ] . '/xml_cdr.log' , 'w' );
2012-06-04 16:58:40 +02:00
fwrite ( $fp , $content . $time );
fclose ( $fp );
}
2014-06-18 03:40:17 +02:00
?>