= 1024 * 1024 * 1024 ) {
$ret = $bytes / 1024 / 1024 / 1024;
$suffix = "GB";
} elseif ( $bytes >= 1024 * 1024 ) {
$ret = $bytes / 1024 / 1024;
$suffix = "MB";
} elseif ( $bytes >= 1024 ) {
$ret = $bytes / 1024;
$suffix = "KB";
} else {
$ret = $bytes;
$suffix = "B";
}
return array( $ret, $suffix );
}
function prepare_si_responses( &$responses, &$message ) {
$bytes_down_arr = switch_bytes( $responses["bytes_down"] );
$bytes_up_arr = switch_bytes( $responses["bytes_up"] );
$download_rate_arr = switch_bytes( $responses["download_rate"] );
$hash_read_ahead_arr = switch_bytes( $responses["hash_read_ahead"] );
$max_memory_usage_arr = switch_bytes( $responses["max_memory_usage"] );
$preload_min_size_arr = switch_bytes( $responses["preload_min_size"] );
$preload_required_rate_arr = switch_bytes( $responses["preload_required_rate"] );
$receive_buffer_size_arr = switch_bytes( $responses["receive_buffer_size"] );
$send_buffer_size_arr = switch_bytes( $responses["send_buffer_size"] );
$upload_rate_arr = switch_bytes( $responses["upload_rate"] );
$responses["bytes_down_value"] = sprintf( "%.1f", $bytes_down_arr[0] );
$responses["bytes_down_suffix"] = $bytes_down_arr[1];
$responses["bytes_up_value"] = sprintf( "%.1f", $bytes_up_arr[0] );
$responses["bytes_up_suffix"] = $bytes_up_arr[1];
$responses["download_rate_value"] = sprintf( "%.1f", $download_rate_arr[0] );
$responses["download_rate_suffix"] = $download_rate_arr[1];
$responses["hash_read_ahead_value"] = sprintf( "%.1f", $hash_read_ahead_arr[0] );
$responses["hash_read_ahead_suffix"] = $hash_read_ahead_arr[1];
$responses["max_memory_usage_value"] = sprintf( "%.1f", $max_memory_usage_arr[0] );
$responses["max_memory_usage_suffix"] = $max_memory_usage_arr[1];
$responses["preload_min_size_value"] = sprintf( "%.1f", $preload_min_size_arr[0] );
$responses["preload_min_size_suffix"] = $preload_min_size_arr[1];
$responses["preload_required_rate_value"] = sprintf( "%.1f", $preload_required_rate_arr[0] );
$responses["preload_required_rate_suffix"] = $preload_required_rate_arr[1];
$responses["receive_buffer_size_value"] = sprintf( "%.1f", $receive_buffer_size_arr[0] );
$responses["receive_buffer_size_suffix"] = $receive_buffer_size_arr[1];
$responses["send_buffer_size_value"] = sprintf( "%.1f", $send_buffer_size_arr[0] );
$responses["send_buffer_size_suffix"] = $send_buffer_size_arr[1];
$responses["upload_rate_value"] = sprintf( "%.1f", $upload_rate_arr[0] );
$responses["upload_rate_suffix"] = $upload_rate_arr[1];
$responses["check_hash_value"] = $responses["check_hash"] == 0 ? $message["no"] : $message["yes"];
$responses["handshake_log_value"] = $responses["handshake_log"] == 0 ? $message["no"] : $message["yes"];
$responses["safe_sync_value"] = $responses["safe_sync"] == 0 ? $message["no"] : $message["yes"];
$responses["bind_value"] = $responses["bind"] == "0.0.0.0" ? $message["bind_0000"] : $responses["bind"];
$responses["ip_value"] = $responses["ip"] == "0.0.0.0" ? $message["ip_0000"] : $responses["ip"];
$responses["max_peers_value"] = $responses["max_peers"] == -1 ? $message["disabled"] : $responses["max_peers"];
$responses["max_peers_seed_value"] = $responses["max_peers_seed"] == -1 ? $message["disabled"] : $responses["max_peers_seed"];
$responses["max_uploads_value"] = $responses["max_uploads"] == -1 ? $message["disabled"] : $responses["max_uploads"];
$responses["min_peers_value"] = $responses["min_peers"] == -1 ? $message["disabled"] : $responses["min_peers"];
$responses["min_peers_seed_value"] = $responses["min_peers_seed"] == -1 ? $message["disabled"] : $responses["min_peers_seed"];
$responses["port_open_value"] = $responses["port_open"] == -1 ? $message["no"] : $message["yes"];
$responses["port_random_value"] = $responses["port_random"] == -1 ? $message["no"] : $message["yes"];
$responses["port_range_value"] = $responses["port_range"] == -1 ? $message["disabled"] : $responses["port_range"];
$responses["proxy_address_value"] = $responses["proxy_address"] == "0.0.0.0" ? $message["proxy_address_0000"] : $responses["proxy_address"];
$responses["tracker_numwant_value"] = $responses["tracker_numwant"] == -1 ? $message["disabled"] : $responses["tracker_numwant"];
if ( substr( $responses["directory"], 0, 2 ) == "./" ) {
$responses["directory_value"] = substr( $responses["directory"], 2 );
$responses["directory_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["directory_value"]}";
} else {
$responses["directory_value"] = $responses["directory"];
}
if ( $responses["max_file_size"] == -1 ) {
$responses["max_file_size_value"] = $message["disabled"];
} else {
$max_file_size_arr = switch_bytes( $responses["max_file_size"] );
$responses["max_file_size_value"] = sprintf( "%.1f", $max_file_size_arr[0] );
$responses["max_file_size_suffix"] = $max_file_size_arr[1];
}
if ( $responses["split_file_size"] == -1 ) {
$responses["split_file_size_value"] = $message["disabled"];
} else {
$max_file_size_arr = switch_bytes( $responses["split_file_size"] );
$responses["split_file_size_value"] = sprintf( "%.1f", $split_file_size_arr[0] );
$responses["split_file_size_suffix"] = $split_file_size_arr[1];
}
ksort( $responses );
return true;
}
function prepare_d_responses( &$responses, &$message, &$home_path ) {
$d_bytes_done_arr = switch_bytes( $responses["d_bytes_done"] );
$d_chunk_size_arr = switch_bytes( $responses["d_chunk_size"] );
$d_completed_bytes_arr = switch_bytes( $responses["d_completed_bytes"] );
$d_down_rate_arr = switch_bytes( $responses["d_down_rate"] );
$d_down_total_arr = switch_bytes( $responses["d_down_total"] );
$d_free_diskspace_arr = switch_bytes( $responses["d_free_diskspace"] );
$d_left_bytes_arr = switch_bytes( $responses["d_left_bytes"] );
$d_max_file_size_arr = switch_bytes( $responses["d_max_file_size"] );
$d_size_bytes_arr = switch_bytes( $responses["d_size_bytes"] );
$d_skip_rate_arr = switch_bytes( $responses["d_skip_rate"] );
$d_skip_total_arr = switch_bytes( $responses["d_skip_total"] );
$d_up_rate_arr = switch_bytes( $responses["d_up_rate"] );
$d_up_total_arr = switch_bytes( $responses["d_up_total"] );
$responses["d_bytes_done_value"] = sprintf( "%.1f", $d_bytes_done_arr[0] );
$responses["d_bytes_done_suffix"] = $d_bytes_done_arr[1];
$responses["d_chunk_size_value"] = sprintf( "%.1f", $d_chunk_size_arr[0] );
$responses["d_chunk_size_suffix"] = $d_chunk_size_arr[1];
$responses["d_completed_bytes_value"] = sprintf( "%.1f", $d_completed_bytes_arr[0] );
$responses["d_completed_bytes_suffix"] = $d_completed_bytes_arr[1];
$responses["d_down_rate_value"] = sprintf( "%.1f", $d_down_rate_arr[0] );
$responses["d_down_rate_suffix"] = $d_down_rate_arr[1];
$responses["d_down_total_value"] = sprintf( "%.1f", $d_down_total_arr[0] );
$responses["d_down_total_suffix"] = $d_down_total_arr[1];
$responses["d_free_diskspace_value"] = sprintf( "%.1f", $d_free_diskspace_arr[0] );
$responses["d_free_diskspace_suffix"] = $d_free_diskspace_arr[1];
$responses["d_left_bytes_value"] = sprintf( "%.1f", $d_left_bytes_arr[0] );
$responses["d_left_bytes_suffix"] = $d_left_bytes_arr[1];
$responses["d_max_file_size_value"] = sprintf( "%.1f", $d_max_file_size_arr[0] );
$responses["d_max_file_size_suffix"] = $d_max_file_size_arr[1];
$responses["d_size_bytes_value"] = sprintf( "%.1f", $d_size_bytes_arr[0] );
$responses["d_size_bytes_suffix"] = $d_size_bytes_arr[1];
$responses["d_skip_rate_value"] = sprintf( "%.1f", $d_skip_rate_arr[0] );
$responses["d_skip_rate_suffix"] = $d_skip_rate_arr[1];
$responses["d_skip_total_value"] = sprintf( "%.1f", $d_skip_total_arr[0] );
$responses["d_skip_total_suffix"] = $d_skip_total_arr[1];
$responses["d_up_rate_value"] = sprintf( "%.1f", $d_up_rate_arr[0] );
$responses["d_up_rate_suffix"] = $d_up_rate_arr[1];
$responses["d_up_total_value"] = sprintf( "%.1f", $d_up_total_arr[0] );
$responses["d_up_total_suffix"] = $d_up_total_arr[1];
$responses["d_complete_value"] = $responses["d_complete"] == 1 ? $message["d_complete_1"] : $message["d_complete_0"];
$responses["d_connection_current_value"] = $responses["d_connection_current"] == "seed" ? $message["d_connection_current_seed"] : $message["d_connection_current_leech"];
$responses["d_ignore_commands_value"] = $responses["d_ignore_commands"] == 1 ? $message["d_ignore_commands_1"] : $message["d_ignore_commands_0"];
$responses["d_is_active_value"] = $responses["d_is_active"] == 1 ? $message["d_is_active_1"] : $message["d_is_active_0"];
$responses["d_is_hash_checked_value"] = $responses["d_is_hash_checked"] == 1 ? $message["d_is_hash_checked_1"] : $message["d_is_hash_checked_0"];
$responses["d_is_multi_file_value"] = $responses["d_is_multi_file"] == 1 ? $message["d_is_multi_file_multi"] : $message["d_is_multi_file_single"];
$responses["d_is_open_value"] = $responses["d_is_open"] == 1 ? $message["d_is_open_1"] : $message["d_is_open_0"];
$responses["d_state_value"] = $responses["d_state"] == 1 ? $message["d_state_1"] : $message["d_state_0"];
$responses["d_state_changed_value"] = date( "Y-m-d H:i:s", $responses["d_state_changed"] );
if ( substr( $responses["d_base_path"], 0, 2 ) == "./" ) {
$responses["d_base_path_value"] = substr( $responses["d_base_path"], 2 );
$responses["d_base_path_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["d_base_path_value"]}";
} else {
$responses["d_base_path_value"] = $responses["d_base_path"];
}
if ( substr( $responses["d_directory"], 0, 2 ) == "./" ) {
$responses["d_directory_value"] = substr( $responses["d_directory"], 2 );
$responses["d_directory_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["d_directory_value"]}";
} else {
$responses["d_directory_value"] = $responses["d_directory"];
}
if ( $responses["d_down_rate"] > 0 ) {
$responses["d_estimated_time"] = $responses["d_left_bytes"] / $responses["d_down_rate"];
$responses["d_estimated_time_value"] = sprintf( "%dd %02d:%02d", floor( $responses["d_estimated_time"] / 86400 ), floor( $responses["d_estimated_time"] / 3600 ) % 24, floor( $responses["d_estimated_time"] / 60 ) % 60 );
$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
} elseif ( $responses["d_hashing"] != 0 ) {
$responses["d_estimated_time"] = "";
$responses["d_estimated_time_value"] = "";
$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
} elseif ( $responses["d_complete"] != 1 ) {
$responses["d_estimated_time"] = "";
$responses["d_estimated_time_value"] = "";
$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
} else {
$responses["d_estimated_time"] = "";
$responses["d_estimated_time_value"] = "";
$responses["d_percentage"] = 1;
$responses["d_percentage_value"] = 100;
}
switch ( $responses["d_hashing"] ) {
case 1 : $responses["d_hashing_value"] = $message["d_hashing_1"]; break;
case 2 : $responses["d_hashing_value"] = $message["d_hashing_2"]; break;
case 3 : $responses["d_hashing_value"] = $message["d_hashing_3"]; break;
default : $responses["d_hashing_value"] = $message["d_hashing_0"]; break;
}
switch ( $responses["d_priority"] ) {
case 1 : $responses["d_priority_value"] = $message["d_priority_1"]; break;
case 2 : $responses["d_priority_value"] = $message["d_priority_2"]; break;
case 3 : $responses["d_priority_value"] = $message["d_priority_3"]; break;
default : $responses["d_priority_value"] = $message["d_priority_0"]; break;
}
$responses["d_ratio_value"] = sprintf( "%.3f", $responses["d_ratio"] / 1000 );
ksort( $responses );
return true;
}
function prepare_f_responses( &$responses, &$message, &$home_path ) {
$responses["f_last_touched"] = sprintf( "%.0f", $responses["f_last_touched"] );
$responses["f_range_first"] += 1;
$f_size_bytes_arr = switch_bytes( $responses["f_size_bytes"] );
$responses["f_size_bytes_value"] = sprintf( "%.1f", $f_size_bytes_arr[0] );
$responses["f_size_bytes_suffix"] = $f_size_bytes_arr[1];
$responses["f_is_open_value"] = $responses["f_is_open"] == 1 ? $message["f_is_open_1"] : $message["f_is_open_0"];
$responses["f_last_touched_value"] = date( "Y-m-d H:i:s", substr( $responses["f_last_touched"], 0, -6 ) );
if ( substr( $responses["f_frozen_path"], 0, 2 ) == "./" ) {
$responses["f_frozen_path_value"] = substr( $responses["f_frozen_path"], 2 );
$responses["f_frozen_path_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["f_frozen_path_value"]}";
} else {
$responses["f_frozen_path_value"] = $responses["f_frozen_path"];
}
if ( $responses["f_size_chunks"] == 0 ) {
$responses["f_percentage"] = 1;
$responses["f_percentage_value"] = 100;
} else {
$responses["f_percentage"] = $responses["f_completed_chunks"] / $responses["f_size_chunks"];
$responses["f_percentage_value"] = floor( $responses["f_completed_chunks"] / $responses["f_size_chunks"] * 100 );
}
switch ( $responses["f_priority"] ) {
case 1 : $responses["f_priority_value"] = $message["f_priority_1"]; break;
case 2 : $responses["f_priority_value"] = $message["f_priority_2"]; break;
default : $responses["f_priority_value"] = $message["f_priority_0"]; break;
}
ksort( $responses );
return true;
}
function prepare_trac_responses( &$responses, &$message ) {
$responses["t_scrape_time_last"] = sprintf( "%.0f", $responses["t_scrape_time_last"] );
$responses["t_enabled_value"] = $responses["t_enabled"] == 1 ? $message["t_enabled_1"] : $message["t_enabled_0"];
$responses["t_is_open_value"] = $responses["t_is_open"] == 1 ? $message["t_is_open_1"] : $message["t_is_open_0"];
$responses["t_min_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_min_interval"] / 3600 ), $responses["t_min_interval"] / 60 % 60, $responses["t_min_interval"] % 60 );
$responses["t_normal_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_normal_interval"] / 3600 ), $responses["t_normal_interval"] / 60 % 60, $responses["t_normal_interval"] % 60 );
if ( $responses["t_scrape_time_last"] == 0 ) {
$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", $responses["t_scrape_time_last"] );
} else {
$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", substr( $responses["t_scrape_time_last"], 0, -6 ) );
}
$responses["t_type_value"] = $responses["t_type"] == 1 ? $message["t_type_1"] : $message["t_type_2"];
ksort( $responses );
return true;
}
function addview( &$xml, &$node, &$message ) {
$node->setAttribute( "viewtype", $_SESSION["rtwi_view"] );
// adding viewtypes
$vcrnode = $node->appendChild( $xml->createElement( "viewtypes" ) );
$vcrnode->setAttribute( "value", $_SESSION["rtwi_view"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "main" );
$vcnode->setAttribute( "title", $message["viewtype_main"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "name" );
$vcnode->setAttribute( "title", $message["viewtype_name"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "started" );
$vcnode->setAttribute( "title", $message["viewtype_started"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "stopped" );
$vcnode->setAttribute( "title", $message["viewtype_stopped"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "complete" );
$vcnode->setAttribute( "title", $message["viewtype_complete"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "incomplete" );
$vcnode->setAttribute( "title", $message["viewtype_incomplete"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "hashing" );
$vcnode->setAttribute( "title", $message["viewtype_hashing"] );
$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
$vcnode->setAttribute( "value", "seeding" );
$vcnode->setAttribute( "title", $message["viewtype_seeding"] );
}
function addrefresh( &$xml, &$node, &$message ) {
$node->setAttribute( "refreshrate", $_SESSION["rtwi_refresh"] );
// adding refresh rates
$rrrnode = $node->appendChild( $xml->createElement( "refreshrates" ) );
$rrrnode->setAttribute( "value", $_SESSION["rtwi_refresh"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "0" );
$rrnode->setAttribute( "title", $message["refreshrate_0"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "5" );
$rrnode->setAttribute( "title", $message["refreshrate_5"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "10" );
$rrnode->setAttribute( "title", $message["refreshrate_10"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "30" );
$rrnode->setAttribute( "title", $message["refreshrate_30"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "60" );
$rrnode->setAttribute( "title", $message["refreshrate_60"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "120" );
$rrnode->setAttribute( "title", $message["refreshrate_120"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "180" );
$rrnode->setAttribute( "title", $message["refreshrate_180"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "300" );
$rrnode->setAttribute( "title", $message["refreshrate_300"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "600" );
$rrnode->setAttribute( "title", $message["refreshrate_600"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "1200" );
$rrnode->setAttribute( "title", $message["refreshrate_1200"] );
$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
$rrnode->setAttribute( "value", "1800" );
$rrnode->setAttribute( "title", $message["refreshrate_1800"] );
$rrnode->setAttribute( "value", "3600" );
$rrnode->setAttribute( "title", $message["refreshrate_3600"] );
}
function build_xmltree( $list, &$tree, &$xml ) {
if ( count( $list ) > 1 ) {
$sublist = $list;
array_shift( $sublist );
if ( !is_object( $tree->getElementsByTagName( "directory" )->item( 0 ) ) ) {
$subtree = $tree->appendChild( $xml->createElement( "directory" ) );
$subtree->setAttribute( "dirname", $list[0] );
} else {
for ( $i = 0; $i < $tree->getElementsByTagName( "directory" )->length; $i++ ) {
if ( $tree->getElementsByTagName( "directory" )->item( $i )->getAttribute( "dirname" ) == $list[0] ) {
$subtree = $tree->getElementsByTagName( "directory" )->item( $i );
}
}
if ( !isset( $subtree ) || !is_object( $subtree ) ) {
$subtree = $tree->appendChild( $xml->createElement( "directory" ) );
$subtree->setAttribute( "dirname", $list[0] );
}
}
$ret = build_xmltree( $sublist, $subtree, $xml );
} else {
$ret = $tree->appendChild( $xml->createElement( "file" ) );
$ret->setAttribute( "filename", $list[0] );
}
return $ret;
}
function xmlrpc_call( &$xmlrpc_array, &$request ) {
$len = strlen( $request );
$headers = "CONTENT_LENGTH\0{$len}\0";
$headers .= "SCGI\01\0";
$len = strlen( $headers );
$out = "{$len}:{$headers},{$request}";
$fp = @fsockopen( $xmlrpc_array["host"], $xmlrpc_array["port"], $errno, $errstr, $xmlrpc_array["timeout"] );
if ( $fp ) {
fwrite( $fp, $out );
do {
$line = fgets( $fp );
} while ( trim( $line ) != "" );
$ret = stream_get_contents( $fp );
} else {
$_SESSION["rtwi_err"] = "noconn";
$ret = $errno;
}
return $ret;
}
function xmlrpc_multicall( &$xmlrpc_array, &$methodlist, $params = array() ) {
$request = array();
foreach ( $methodlist as $methodkey => $methodval ) {
$request[] = array( "methodName" => $methodval, "params" => $params );
}
$request = xmlrpc_encode_request( "system.multicall", array( $request ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
$r = 0;
$responses = array();
foreach ( $methodlist as $methodkey => $methodval ) {
if ( $methodval[1] == "." ) {
$prefix = substr( $methodval, 0, 1 );
$methodval = substr( $methodval, 5 );
$methodval = "{$prefix}{$methodval}";
} else {
$methodval = substr( $methodval, 4 );
}
$responses[$methodval] = $response[$r++][0];
}
return $responses;
}
function xmlrpc_multiappend( &$xml, &$dnode, &$responses ) {
$keys = array_keys( $responses );
reset( $responses );
while ( list( $rkey, $rval ) = each( $responses ) ) {
$rval = str_replace( "&", "&", $rval );
if ( array_key_exists( "{$rkey}_suffix", $responses ) ) {
$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
$node->setAttribute( "suffix", $responses["{$rkey}_suffix"] );
$node->setAttribute( "value", $responses["{$rkey}_value"] );
unset( $responses["{$rkey}_suffix"] );
unset( $responses["{$rkey}_value"] );
} elseif ( array_key_exists( "{$rkey}_value", $responses ) ) {
$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
$node->setAttribute( "value", $responses["{$rkey}_value"] );
unset( $responses["{$rkey}_value"] );
} elseif ( is_array( $rval ) ) {
} else {
$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
}
}
return true;
}
error_reporting( E_ALL );
error_reporting( E_ALL ^ E_NOTICE );
session_start();
if ( !isset( $_SESSION["rtwi_rights"] ) ) {
$_SESSION["rtwi_rights"] = 0;
};
require_once( "includes/config.inc.php" );
require_once( "includes/messages.{$lang}.inc.php" );
require_once( "{$include_path}/tools/functions.time.inc.php" );
$st = getmicrotime();
if ( isset( $_REQUEST["mod"] ) ) {
$mod = $_REQUEST["mod"];
} else {
$mod = "";
}
if ( isset( $_REQUEST["hash"] ) ) {
$hash = $_REQUEST["hash"];
} else {
$hash = "";
}
if ( isset( $_REQUEST["page"] ) ) {
switch ( $_REQUEST["page"] ) {
case "transfers" : {
$page = "transfers";
break;
}
case "chunks" : {
$page = "chunks";
break;
}
case "trackers" : {
$page = "trackers";
break;
}
case "files" : {
$page = "files";
break;
}
case "info" : {
$page = "info";
break;
}
default : {
$page = "peers";
break;
}
}
} else {
$page = "info";
}
if ( isset( $_REQUEST["id"] ) ) {
$id = $_REQUEST["id"];
settype( $id, "int" );
} else {
$id = 0;
}
if ( isset( $_REQUEST["path"] ) ) {
$path = $_REQUEST["path"];
} else {
$path = "";
}
if ( isset( $_REQUEST["ajax"] ) && isset( $_REQUEST["ajax"] ) == "true" ) {
$ajax = true;
} else {
$ajax = false;
}
if ( isset( $_SESSION["rtwi_auth"] ) && $_SESSION["rtwi_auth"] === 1 ) {
$xmlrpc_array["port"] = $users[$_SESSION["rtwi_nick"]]["port"];
if ( !isset( $_SESSION["rtwi_view"] ) ) {
if ( !isset( $_COOKIE["rtwi_view"] ) ) {
$_SESSION["rtwi_view"] = "default";
} elseif ( !isset( $_SESSION["rtwi_view"] ) ) {
$_SESSION["rtwi_view"] = $_COOKIE["rtwi_view"];
}
}
if ( !isset( $_SESSION["rtwi_refresh"] ) ) {
if ( !isset( $_COOKIE["rtwi_refresh"] ) ) {
$_SESSION["rtwi_refresh"] = 0;
} elseif ( !isset( $_SESSION["rtwi_refresh"] ) ) {
$_SESSION["rtwi_refresh"] = $_COOKIE["rtwi_refresh"];
}
}
} else {
$mod = "login";
}
$xml = new DOMDocument( "1.0", "utf-8" );
$xml->formatOutput = true;
$root = $xml->appendChild( $xml->createElement( "root" ) );
$root->appendChild( $xml->createElement( "mod", $mod ) );
$root->appendChild( $xml->createElement( "hash", $hash ) );
$root->appendChild( $xml->createElement( "page", $page ) );
$root->appendChild( $xml->createElement( "id", $id ) );
$root->appendChild( $xml->createElement( "burl", $url["base"] ) );
$root->appendChild( $xml->createElement( "url", $url["index"] ) );
$root->appendChild( $xml->createElement( "iurl", $url["input"] ) );
$root->appendChild( $xml->createElement( "curl", str_replace( "&", "&", $_SERVER["REQUEST_URI"] ) ) );
$root->appendChild( $xml->createElement( "purl", isset( $_SESSION["rtwi_lastpage"] ) ? str_replace( "&", "&", $_SESSION["rtwi_lastpage"] ) : "" ) );
$root->appendChild( $xml->createElement( "datetime", date( "Y. m. d. H:i:s", time() ) ) );
$labels = $root->appendChild( $xml->createElement( "labels" ) );
foreach ( $label as $key => $val ) {
$labels->appendChild( $xml->createElement( $key, $val ) );
}
$labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue = str_rot13( base64_encode( str_rot13( $labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue ) ) );
//print_r( $_SESSION );
//print_r( $_REQUEST );
if ( isset( $_SESSION["rtwi_lastpost"] ) && is_array( $_SESSION["rtwi_lastpost"] ) ) {
$lproot = $root->appendChild( $xml->createElement( "lastpost" ) );
foreach ( $_SESSION["rtwi_lastpost"] as $key => $val ) {
$node = $lproot->appendChild( $xml->createElement( $key, $val ) );
}
unset( $_SESSION["rtwi_lastpost"] );
}
switch ( $mod ) {
case "login" : { // login
$layout_file = "layout.main.login.xsl";
break;
}
case "addtorrent" : {
$request = xmlrpc_encode_request( "get_directory", array() );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$directory = xmlrpc_decode( $response );
if ( substr( $directory, -1 ) == "/" ) {
$directory = substr( $directory, 0, -1 );
}
if ( in_array( "..", split( "/", $directory ) ) || in_array( ".", split( "/", $directory ) ) ) {
$_SESSION["rtwi_err"] = "badrtdirectory";
header( "location: {$url["index"]}?mod=addtorrent" );
exit;
} elseif ( substr( $directory, 0, 2 ) == "./" ) {
$directory = substr( $directory, 2 );
$directory = "{$home_path}{$_SESSION["rtwi_nick"]}/{$directory}";
} elseif ( substr( $directory, 0, strlen( "{$home_path}{$_SESSION["rtwi_nick"]}" ) ) == "{$home_path}{$_SESSION["rtwi_nick"]}" ) {
$directory = "{$directory}";
} else {
$_SESSION["rtwi_err"] = "badrtdirectory";
header( "location: {$url["index"]}?mod=addtorrent" );
exit;
}
$directory = str_replace( "//", "/", $directory );
if ( substr( $path, 0, 1 ) == "/" ) {
$path = substr( $path, 1 );
}
if ( substr( $path, -1 ) == "/" ) {
$path = substr( $path, 0, -1 );
}
if ( in_array( "..", split( "/", $path ) ) || in_array( ".", split( "/", $path ) ) ) {
$_SESSION["rtwi_err"] = "badatpath";
header( "location: {$url["index"]}?mod=addtorrent" );
exit;
}
$ppath = substr( $path, 0, strrpos( $path, "/" ) );
$scan = scandir( "{$directory}/{$path}" );
$freespace = switch_bytes( disk_free_space( "{$directory}/{$ppath}" ) );
$atnode = $root->appendChild( $xml->createElement( "addtorrent" ) );
$atnode->setAttribute( "name", $ppath );
$atnode->setAttribute( "path", $path );
$atnode->setAttribute( "ppath", urlencode( $ppath ) );
$atnode->setAttribute( "freespace", disk_free_space( "{$directory}/{$ppath}" ) );
$atnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
$atnode->setAttribute( "freespace_suffix", $freespace[1] );
foreach( $scan as $key => $val ) {
$dpath = str_replace( "//", "/", "{$path}/{$val}" );
$fdpath = str_replace( "//", "/", "{$directory}/{$dpath}" );
if ( ( is_dir( $fdpath ) || ( is_link( $fdpath ) && is_dir( readlink( $fdpath ) ) ) ) && substr( $val, 0, 1 ) != "." && $fdpath != "{$directory}/!rtwi_files" ) {
$freespace = switch_bytes( disk_free_space( $fdpath ) );
$dnode = $atnode->appendChild( $xml->createElement( "dlpath" ) );
$dnode->setAttribute( "name", $val );
$dnode->setAttribute( "path", urlencode( $dpath ) );
$dnode->setAttribute( "freespace", disk_free_space( $fdpath ) );
$dnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
$dnode->setAttribute( "freespace_suffix", $freespace[1] );
}
}
$layout_file = "layout.main.index.xsl";
break;
}
case "torrent" : { // torrent
// creating torrents node
$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
addrefresh( $xml, $tnode, $message );
$methodlist = array( "d.get_base_filename=", "d.get_base_path=", "d.get_bytes_done=", "d.get_chunk_size=", "d.get_chunks_hashed=", "d.get_complete=", "d.get_completed_bytes=", "d.get_completed_chunks=", "d.get_connection_current=", "d.get_connection_leech=", "d.get_connection_seed=", "d.get_directory=", "d.get_down_rate=", "d.get_down_total=", "d.get_free_diskspace=", "d.get_hash=", "d.get_hashing=", "d.get_ignore_commands=", "d.get_is_active=", "d.get_is_hash_checked=", "d.get_is_hash_checking=", "d.get_is_multi_file=", "d.get_is_open=", "d.get_left_bytes=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_uploads=", "d.get_min_peers=", "d.get_name=", "d.get_peers_accounted=", "d.get_peers_complete=", "d.get_peers_connected=", "d.get_peers_max=", "d.get_peers_min=", "d.get_peers_not_connected=", "d.get_priority=", "d.get_priority_str=", "d.get_ratio=", "d.get_size_bytes=", "d.get_size_chunks=", "d.get_size_files=", "d.get_skip_rate=", "d.get_skip_total=", "d.get_state=", "d.get_state_changed=", "d.get_tied_to_file=", "d.get_tracker_focus=", "d.get_tracker_numwant=", "d.get_tracker_size=", "d.get_up_rate=", "d.get_up_total=", "d.get_uploads_max=" );
$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
$bytes_down = 0;
$bytes_up = 0;
$torrent = false;
for ( $i = 0; $i < count( $response ); $i++ ) {
for ( $r = 0; $r < count( $methodlist ); $r++ ) {
$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
$responses[$i][$methodval] = $response[$i][$r];
}
$bytes_down += $responses[$i]["d_down_rate"];
$bytes_up += $responses[$i]["d_up_rate"];
if ( $responses[$i]["d_hash"] == $hash ) {
$torrent = $responses[$i];
}
}
unset( $responses );
if ( is_array( $torrent ) ) {
prepare_d_responses( $torrent, $message, $home_path );
switch ( $page ) {
case "peers" : {
$node = $tnode->appendChild( $xml->createElement( "torrent_peers_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_peers" ) );
break;
}
case "info" : {
$node = $tnode->appendChild( $xml->createElement( "torrent_info_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_info" ) );
break;
}
case "files" : {
$node = $tnode->appendChild( $xml->createElement( "torrent_files_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_files" ) );
$node = $node->appendChild( $xml->createElement( "files_root" ) );
$node = $node->appendChild( $xml->createElement( "directory" ) );
$node->setAttribute( "dirname", $torrent["d_directory_value"] );
$methodlist = array( "f.get_completed_chunks=", "f.get_frozen_path=", "f.get_is_created=", "f.get_is_open=", "f.get_last_touched=", "f.get_match_depth_next=", "f.get_match_depth_prev=", "f.get_offset=", "f.get_path=", "f.get_path_components=", "f.get_path_depth=", "f.get_priority=", "f.get_range_first=", "f.get_range_second=", "f.get_size_bytes=", "f.get_size_chunks=" );
$request = xmlrpc_encode_request( "f.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
for ( $i = 0; $i < count( $response ); $i++ ) {
for ( $r = 0; $r < count( $methodlist ); $r++ ) {
$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
$responses[$i][$methodval] = $response[$i][$r];
}
}
$st0 = getmicrotime();
for ( $i = 0; $i < $torrent["d_size_files"]; $i++ ) {
$st1 = getmicrotime();
prepare_f_responses( $responses[$i], $message, $home_path );
$tt1 = getmicrotime();
$st2 = getmicrotime();
// $fnode = build_xmltree( $responses[$i]["f_path_components"], $node, $xml );
$fnode = $node->appendChild( $xml->createElement( "file" ) );
$fnode->setAttribute( "filename", $responses[$i]["f_path"] );
$tt2 = getmicrotime();
$st3 = getmicrotime();
$fnode->setAttribute( "id", $i );
$tt3 = getmicrotime();
$st4 = getmicrotime();
xmlrpc_multiappend( $xml, $fnode, $responses[$i] );
$tt4 = getmicrotime();
$time1 += $tt1 - $st1;
$time2 += $tt2 - $st2;
$time3 += $tt3 - $st3;
$time4 += $tt4 - $st4;
}
$tt0 = getmicrotime();
$time0 += $tt0 - $st0;
//printf( "\r\n0 time: %0.6f sec
\r\n", $time0 );
//printf( "\r\n1 time: %0.6f sec
\r\n", $time1 );
//printf( "\r\n2 time: %0.6f sec
\r\n", $time2 );
//printf( "\r\n3 time: %0.6f sec
\r\n", $time3 );
//printf( "\r\n4 time: %0.6f sec
\r\n", $time4 );
break;
}
case "trackers" : {
// creating trackers node
$node = $tnode->appendChild( $xml->createElement( "torrent_trackers_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_trackers" ) );
$methodlist = array( "t.get_enabled=", "t.get_group=", "t.get_id=", "t.get_is_open=", "t.get_min_interval=", "t.get_normal_interval=", "t.get_scrape_complete=", "t.get_scrape_downloaded=", "t.get_scrape_incomplete=", "t.get_scrape_time_last=", "t.get_type=", "t.get_url=" );
$request = xmlrpc_encode_request( "t.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
for ( $i = 0; $i < count( $response ); $i++ ) {
for ( $r = 0; $r < count( $methodlist ); $r++ ) {
$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
$responses[$i][$methodval] = $response[$i][$r];
}
}
for ( $i = 0; $i < $torrent["d_tracker_size"]; $i++ ) {
prepare_trac_responses( $responses[$i], $message, $home_path );
$tracnode = $node->appendChild( $xml->createElement( "tracker" ) );
$tracnode->setAttribute( "id", $i );
xmlrpc_multiappend( $xml, $tracnode, $responses[$i] );
}
break;
}
case "chunks" : {
$node = $tnode->appendChild( $xml->createElement( "torrent_chunks_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_chunks" ) );
break;
}
case "transfers" : {
$node = $tnode->appendChild( $xml->createElement( "torrent_transfers_root" ) );
$node = $node->appendChild( $xml->createElement( "torrent_transfers" ) );
break;
}
}
xmlrpc_multiappend( $xml, $node, $torrent );
} else {
$_SESSION["rtwi_err"] = "nohashfound";
}
$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
$responses["bytes_down"] = $bytes_down;
$responses["bytes_up"] = $bytes_up;
prepare_si_responses( $responses, $message );
$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
$node->setAttribute( "value", $responses["bytes_down_value"] );
$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
$node->setAttribute( "value", $responses["bytes_up_value"] );
$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
$node->setAttribute( "value", $responses["download_rate_value"] );
$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
$node->setAttribute( "value", $responses["upload_rate_value"] );
if ( $ajax === true ) {
$layout_file = "layout.ajax.index.xsl";
} else {
$layout_file = "layout.main.index.xsl";
}
break;
}
case "getfile" : { // download a file
if ( $id >= 0 ) {
// sha1 hash
$request = xmlrpc_encode_request( "download_list", array( $_SESSION["rtwi_view"] ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$torrents = xmlrpc_decode( $response );
if ( in_array( $hash, $torrents ) ) {
// getting name
$request = xmlrpc_encode_request( "d.get_name", $hash );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$d_name = xmlrpc_decode( $response );
// getting download directory
$request = xmlrpc_encode_request( "d.get_directory", $hash );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$d_directory = xmlrpc_decode( $response );
//getting path
$request = xmlrpc_encode_request( "f.get_path", array( $hash, $id ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$f_path = xmlrpc_decode( $response );
//getting path
$request = xmlrpc_encode_request( "f.get_frozen_path", array( $hash, $id ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$f_frozen_path = xmlrpc_decode( $response );
//getting file size
$request = xmlrpc_encode_request( "f.get_size_bytes", array( $hash, $id ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$f_size_bytes = xmlrpc_decode( $response );
if ( substr( $d_directory, 0, 2 ) == "./" ) {
$d_directory_value = substr( $d_directory, 2 );
$d_directory_value = "{$home_path}{$_SESSION["rtwi_nick"]}/{$d_directory_value}";
} else {
$d_directory_value = $d_directory;
}
} else {
$_SESSION["rtwi_err"] = "nohashfound";
$layout_file = "layout.main.index.xsl";
}
} else {
$_SESSION["rtwi_err"] = "noidfound";
$layout_file = "layout.main.index.xsl";
}
break;
}
case "serverinfo" : { // server info
// creating torrents node
$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
addrefresh( $xml, $tnode, $message );
$methodlist = array( "d.get_down_rate=", "d.get_up_rate=" );
$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
$bytes_down = 0;
$bytes_up = 0;
for ( $i = 0; $i < count( $response ); $i++ ) {
for ( $r = 0; $r < count( $methodlist ); $r++ ) {
$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
$responses[$i][$methodval] = $response[$i][$r];
}
$bytes_down += $responses[$i]["d_down_rate"];
$bytes_up += $responses[$i]["d_up_rate"];
}
$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
$responses["bytes_down"] = $bytes_down;
$responses["bytes_up"] = $bytes_up;
prepare_si_responses( $responses, $message );
$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
$node->setAttribute( "value", $responses["bytes_down_value"] );
$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
$node->setAttribute( "value", $responses["bytes_up_value"] );
$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
$node->setAttribute( "value", $responses["download_rate_value"] );
$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
$node->setAttribute( "value", $responses["upload_rate_value"] );
$inode = $tnode->appendChild( $xml->createElement( "server_info" ) );
xmlrpc_multiappend( $xml, $inode, $responses );
$layout_file = "layout.main.index.xsl";
break;
}
default : { // torrents
// creating torrents node
$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
addview( $xml, $tnode, $message );
addrefresh( $xml, $tnode, $message );
$methodlist = array( "d.get_base_filename=", "d.get_base_path=", "d.get_bytes_done=", "d.get_chunk_size=", "d.get_chunks_hashed=", "d.get_complete=", "d.get_completed_bytes=", "d.get_completed_chunks=", "d.get_connection_current=", "d.get_connection_leech=", "d.get_connection_seed=", "d.get_directory=", "d.get_down_rate=", "d.get_down_total=", "d.get_free_diskspace=", "d.get_hash=", "d.get_hashing=", "d.get_ignore_commands=", "d.get_is_active=", "d.get_is_hash_checked=", "d.get_is_hash_checking=", "d.get_is_multi_file=", "d.get_is_open=", "d.get_left_bytes=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_uploads=", "d.get_min_peers=", "d.get_name=", "d.get_peers_accounted=", "d.get_peers_complete=", "d.get_peers_connected=", "d.get_peers_max=", "d.get_peers_min=", "d.get_peers_not_connected=", "d.get_priority=", "d.get_priority_str=", "d.get_ratio=", "d.get_size_bytes=", "d.get_size_chunks=", "d.get_size_files=", "d.get_skip_rate=", "d.get_skip_total=", "d.get_state=", "d.get_state_changed=", "d.get_tied_to_file=", "d.get_tracker_focus=", "d.get_tracker_numwant=", "d.get_tracker_size=", "d.get_up_rate=", "d.get_up_total=", "d.get_uploads_max=" );
$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$response = str_replace( "i8", "double", $response );
$response = xmlrpc_decode( $response );
$bytes_down = 0;
$bytes_up = 0;
for ( $i = 0; $i < count( $response ); $i++ ) {
for ( $r = 0; $r < count( $methodlist ); $r++ ) {
$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
$responses[$i][$methodval] = $response[$i][$r];
}
$bytes_down += $responses[$i]["d_down_rate"];
$bytes_up += $responses[$i]["d_up_rate"];
prepare_d_responses( $responses[$i], $message, $home_path );
$ttnode = $tnode->appendChild( $xml->createElement( "torrent" ) );
xmlrpc_multiappend( $xml, $ttnode, $responses[$i] );
}
$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
$responses["bytes_down"] = $bytes_down;
$responses["bytes_up"] = $bytes_up;
prepare_si_responses( $responses, $message );
$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
$node->setAttribute( "value", $responses["bytes_down_value"] );
$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
$node->setAttribute( "value", $responses["bytes_up_value"] );
$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
$node->setAttribute( "value", $responses["download_rate_value"] );
$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
$node->setAttribute( "value", $responses["upload_rate_value"] );
$layout_file = "layout.main.index.xsl";
break;
}
}
if ( isset( $_SESSION["rtwi_err"] ) && $_SESSION["rtwi_err"] != "" ) {
$node = $root->appendChild( $xml->createElement( "err" ) );
$node = $node->appendChild( $xml->createElement( "errmsg", $message[$_SESSION["rtwi_err"]] ) );
$_SESSION["rtwi_err"] = "";
}
if ( $ajax === false && $mod != "getfile" ) {
$_SESSION["rtwi_lastpage"] = $_SERVER["REQUEST_URI"];
}
$tt = getmicrotime();
//printf( "Total time: %0.6f sec\r\n", $tt - $st );
//print $xml->saveXML();exit;
if ( $mod != "getfile" ) {
require_once( "{$include_path}/classes/xsl_handler.inc.php" );
$page = new page_handler( $site_theme, $layout_file, $xml );
$page->parse();
$text = $page->fetch();
$len = strlen( $text );
@header( "content-length: {$len}" );
@header( "content-type: text/html; charset=utf-8" );
@header( "content-language: hu" );
@header( "cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
@header( "pragma: no-cache" );
@header( "expires: thu, 1 jan 1970 00:00:00 gmt" );
@header( "imagetoolbar: no" );
print $text;
} else {
set_time_limit( 0 );
$path = "{$d_directory_value}/{$f_path}";
$filesize = filesize( $path );
@header( "Content-Description: File Transfer" );
@header( "Content-Type: image/jpeg" );
@header( "Content-Type: application/force-download" );
@header( "Content-Length: {$filesize}" );
@header( "Content-Disposition: attachment; filename={$f_path}" );
readfile( $path );
}
$tt = getmicrotime();
//printf( "
\r\nTotal time: %0.6f sec", $tt - $st );
?>