= 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, &$home_path, &$config = array() ) { $bytes_down_arr = switch_bytes( $responses["bytes_down"] ); $bytes_up_arr = switch_bytes( $responses["bytes_up"] ); $download_rate_arr = switch_bytes( $responses["download_rate"], "KB" ); $hash_read_ahead_arr = switch_bytes( $responses["hash_read_ahead"] ); $max_memory_usage_arr = switch_bytes( $responses["max_memory_usage"] ); $memory_usage_arr = switch_bytes( $responses["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"], "KB" ); $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( "%.0f", $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["memory_usage_value"] = sprintf( "%.1f", $memory_usage_arr[0] ); $responses["memory_usage_suffix"] = $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( "%.0f", $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"]; $responses["directory_value"] = make_abs_path( $responses["directory"], $responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" ); $responses["session_value"] = make_abs_path( $responses["session"], $responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" ); 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 { $split_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]; } if ( $config["allow"]["dht"] == true ) { if ( $responses["dht_statistics_active"] != 0 ) { $dht_statistics_bytes_read_arr = switch_bytes( $responses["dht_statistics_bytes_read"] ); $dht_statistics_bytes_written_arr = switch_bytes( $responses["dht_statistics_bytes_written"] ); $responses["dht_statistics_bytes_read_value"] = sprintf( "%.1f", $dht_statistics_bytes_read_arr[0] ); $responses["dht_statistics_bytes_read_suffix"] = $bytes_up_arr[1]; $responses["dht_statistics_bytes_written_value"] = sprintf( "%.1f", $dht_statistics_bytes_written_arr[0] ); $responses["dht_statistics_bytes_written_suffix"] = $dht_statistics_bytes_written_arr[1]; } $responses["dht_statistics_active_value"] = $responses["dht_statistics_active"] == 0 ? $message["disabled"] : $message["enabled"]; } ksort( $responses ); return true; } function prepare_d_responses( &$responses, &$message, &$home_path, &$cwd ) { $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_active_value"] = $responses["d_active"] == 1 ? $message["d_active_1"] : $message["d_active_0"]; $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_creation_date_value"] = date( "Y-m-d H:i:s", $responses["d_creation_date"] ); $responses["d_ignore_commands_value"] = $responses["d_ignore_commands"] == 1 ? $message["d_ignore_commands_1"] : $message["d_ignore_commands_0"]; $responses["d_hash_checked_value"] = $responses["d_hash_checked"] == 1 ? $message["d_hash_checked_1"] : $message["d_hash_checked_0"]; $responses["d_hash_checking_value"] = $responses["d_hash_checking"] == 1 ? $message["d_hash_checking_1"] : $message["d_hash_checking_0"]; $responses["d_max_peers_value"] = $responses["d_max_peers"] == -1 ? $message["disabled"] : $responses["d_max_peers"]; $responses["d_max_uploads_value"] = $responses["d_max_uploads"] == -1 ? $message["disabled"] : $responses["d_max_uploads"]; $responses["d_min_peers_value"] = $responses["d_min_peers"] == -1 ? $message["disabled"] : $responses["d_min_peers"]; $responses["d_multi_file_value"] = $responses["d_multi_file"] == 1 ? $message["d_multi_file_multi"] : $message["d_multi_file_single"]; $responses["d_open_value"] = $responses["d_open"] == 1 ? $message["d_open_1"] : $message["d_open_0"]; $responses["d_peer_exchange_value"] = $responses["d_peer_exchange"] == 0 ? $message["disabled"] : $message["enabled"]; $responses["d_peers_max_value"] = $responses["d_peers_max"] == -1 ? $message["disabled"] : $responses["d_peers_max"]; $responses["d_peers_min_value"] = $responses["d_peers_min"] == -1 ? $message["disabled"] : $responses["d_peers_min"]; $responses["d_pex_active_value"] = $responses["d_pex_active"] == 1 ? $message["yes"] : $message["no"]; $responses["d_private_value"] = $responses["d_private"] == 1 ? $message["yes"] : $message["no"]; $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"] ); $responses["d_tracker_numwant_value"] = $responses["d_tracker_numwant"] == -1 ? $message["disabled"] : $responses["d_tracker_numwant"]; $responses["d_uploads_max_value"] = $responses["d_uploads_max"] == -1 ? $message["disabled"] : $responses["d_uploads_max"]; $responses["d_base_path_value"] = make_abs_path( $responses["d_base_path"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" ); $responses["d_directory_value"] = make_abs_path( $responses["d_directory"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" ); $responses["d_tied_to_file_value"] = make_abs_path( $responses["d_tied_to_file"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" ); 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 ); $responses["d_hpercentage"] = $responses["d_chunks_hashed"] / $responses["d_size_chunks"]; $responses["d_hpercentage_value"] = floor( $responses["d_chunks_hashed"] / $responses["d_size_chunks"] * 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, &$cwd ) { $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 ) ); $responses["f_frozen_path_value"] = make_abs_path( $responses["f_frozen_path"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" ); 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 ) { $t_scrape_downloaded_arr = switch_bytes( $responses["t_scrape_downloaded"] ); $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_open_value"] = $responses["t_open"] == 1 ? $message["t_open_1"] : $message["t_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, &$refresh ) { $node->setAttribute( "refreshrate", $_SESSION["rtwi_refresh"] ); // adding refresh rates $rrrnode = $node->appendChild( $xml->createElement( "refreshrates" ) ); $rrrnode->setAttribute( "value", $_SESSION["rtwi_refresh"] ); foreach ( $refresh as $key => $val ) { $rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) ); $rrnode->setAttribute( "value", substr( $key, 12 ) ); $rrnode->setAttribute( "title", $val ); } } function build_xmltree( &$dstruct, &$tree, &$xml, $fullpath, $responses ) { foreach ( $dstruct as $key => $val ) { if ( is_array( $val ) ) { $subtree = $tree->appendChild( $xml->createElement( "directory" ) ); $subtree->setAttribute( "id", sha1( mt_rand() ) ); $subtree->setAttribute( "dirname", $key ); $subtree->setAttribute( "dirpath", urlencode( "{$fullpath}/{$key}" ) ); $ret = build_xmltree( $val, $subtree, $xml, "{$fullpath}/{$key}", $responses ); } else { $ret = $tree->appendChild( $xml->createElement( "file" ) ); $ret->setAttribute( "id", $key ); $ret->setAttribute( "filename", $val ); xmlrpc_multiappend( $xml, $ret, $responses[$key] ); } } return $ret; } function xmlrpc_call( &$xmlrpc_array, &$request, &$callnum, &$calltime ) { $st = getmicrotime(); $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; } $tt = getmicrotime(); $callnum++; $calltime += $tt - $st; return $ret; } function xmlrpc_multicall( &$xmlrpc_array, &$methodlist, &$multicallnum, &$callnum, &$calltime, $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, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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}"; } elseif ( strlen( $methodval ) > 6 && $methodval[6] == "." ) { $prefix = substr( $methodval, 0, 1 ); $methodval = substr( $methodval, 7 ); $methodval = "{$methodval}"; } elseif ( substr( $methodval, 0, 3 ) == "dht" ) { } else { $methodval = substr( $methodval, 4 ); } if ( $methodval == "dht_statistics" ) { foreach ( $response[$r++][0] as $dkey => $dval ) { $responses["{$methodval}_{$dkey}"] = $dval; } } else { $responses[$methodval] = $response[$r++][0]; } } $multicallnum++; 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 ); set_time_limit( 0 ); 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( "includes/tools/functions.time.inc.php" ); $st = getmicrotime(); $callnum = 0; $calltime = 0; $multicallnum = 0; $xmlrpc_methods = array( "si" => $config["allow"]["dht"] == true ? array( "dht_statistics", "get_bind", "get_check_hash", "get_connection_leech", "get_connection_seed", "get_dht_port", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "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_memory_usage", "get_min_peers", "get_min_peers_seed", "get_name", "get_peer_exchange", "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_free_diskspace", "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_stats_not_preloaded", "get_stats_preloaded", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_upload_rate", "get_use_udp_trackers", "system.client_version", "system.get_cwd", "system.hostname", "system.library_version", "system.pid" ) : array( "get_bind", "get_check_hash", "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_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "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_memory_usage", "get_min_peers", "get_min_peers_seed", "get_name", "get_peer_exchange", "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_free_diskspace", "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_stats_not_preloaded", "get_stats_preloaded", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_upload_rate", "get_use_udp_trackers", "system.client_version", "system.get_cwd", "system.hostname", "system.library_version", "system.pid" ), "d" => 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_creation_date=", "d.get_custom1=", "d.get_custom2=", "d.get_custom3=", "d.get_custom4=", "d.get_custom5=", "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_left_bytes=", "d.get_local_id=", "d.get_local_id_html=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_size_pex=", "d.get_max_uploads=", "d.get_message=", "d.get_min_peers=", "d.get_name=", "d.get_peer_exchange=", "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_size_pex=", "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=", "d.is_active=", "d.is_hash_checked=", "d.is_hash_checking=", "d.is_multi_file=", "d.is_open=", "d.is_pex_active=", "d.is_private=" ), "f" => 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=" ), "t" => array( "t.get_group=", "t.get_id=", "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=", "t.is_enabled=", "t.is_open=" ) ); 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() ) ) ); $root->appendChild( $xml->createElement( "lang", $lang ) ); foreach ( $config["allow"] as $key => $val ) { if ( $val == true ) { $root->appendChild( $xml->createElement( "allow_{$key}", "true" ) ); } } $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 "serverinfo" : { // server info // creating torrents node $tnode = $root->appendChild( $xml->createElement( "torrents" ) ); if ( $config["allow"]["refresh"] ) { addrefresh( $xml, $tnode, $refresh ); } // retrieving server info $methodlist = $xmlrpc_methods["si"]; $si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, $multicallnum, $callnum, $calltime ); $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, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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] ); $d_responses[$i][$methodval] = $response[$i][$r]; } $bytes_down += $d_responses[$i]["d_down_rate"]; $bytes_up += $d_responses[$i]["d_up_rate"]; } $si_responses["bytes_down"] = $bytes_down; $si_responses["bytes_up"] = $bytes_up; prepare_si_responses( $si_responses, $message, $home_path, $config ); $node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_down_value"] ); $node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_up_value"] ); $node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) ); $node->setAttribute( "suffix", $si_responses["download_rate_suffix"] ); $node->setAttribute( "value", $si_responses["download_rate_value"] ); $node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) ); $node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] ); $node->setAttribute( "value", $si_responses["upload_rate_value"] ); $inode = $tnode->appendChild( $xml->createElement( "server_info" ) ); xmlrpc_multiappend( $xml, $inode, $si_responses ); $layout_file = "layout.main.index.xsl"; break; } case "addtorrent" : { $request = xmlrpc_encode_request( "get_directory", array() ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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"]}" ); exit; } elseif ( substr( $directory, 0, 2 ) == "~/" ) { $directory = substr( $directory, 2 ); $directory = "{$home_path}{$_SESSION["rtwi_nick"]}/{$directory}"; } elseif ( substr( $directory, 0, 2 ) == "./" ) { $directory = substr( $directory, 2 ); $directory = "{$si_responses["get_cwd"]}/{$directory}"; } $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"]}" ); 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 ) != "." ) { $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" ) ); if ( $config["allow"]["refresh"] ) { addrefresh( $xml, $tnode, $refresh ); } // retrieving server info $methodlist = $xmlrpc_methods["si"]; $si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, $multicallnum, $callnum, $calltime ); $methodlist = $xmlrpc_methods["d"]; $request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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|is)_(.*)=/", "$1_$3", $methodlist[$r] ); $d_responses[$i][$methodval] = $response[$i][$r]; } $bytes_down += $d_responses[$i]["d_down_rate"]; $bytes_up += $d_responses[$i]["d_up_rate"]; if ( $d_responses[$i]["d_hash"] == $hash ) { $torrent = $d_responses[$i]; } } unset( $d_responses ); if ( is_array( $torrent ) ) { prepare_d_responses( $torrent, $message, $home_path, $si_responses["get_cwd"] ); 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"] ); $fst = getmicrotime(); $methodlist = $xmlrpc_methods["f"]; $request = xmlrpc_encode_request( "f.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $response = xmlrpc_decode( $response ); for ( $i = 0; $i < count( $response ); $i++ ) { for ( $r = 0; $r < count( $methodlist ); $r++ ) { $methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $methodlist[$r] ); $responses[$i][$methodval] = $response[$i][$r]; } } $dstruct = array(); for ( $i = 0; $i < $torrent["d_size_files"]; $i++ ) { prepare_f_responses( $responses[$i], $message, $home_path, $si_response["get_cwd"] ); $n = 0; $tmp = &$dstruct; foreach ( $responses[$i]["f_path_components"] as $key => $val ) { if ( count( $responses[$i]["f_path_components"] ) == ++$n ) { $tmp[$i] = $val; } else { if ( !isset( $tmp[$val] ) ) { $tmp[$val] = array(); } $tmp = &$tmp[$val]; } } } $fnode = build_xmltree( $dstruct, $node, $xml, $torrent["d_directory_value"], $responses ); $ftt = getmicrotime(); break; } case "trackers" : { // creating trackers node $node = $tnode->appendChild( $xml->createElement( "torrent_trackers_root" ) ); $node = $node->appendChild( $xml->createElement( "torrent_trackers" ) ); $methodlist = $xmlrpc_methods["t"]; $request = xmlrpc_encode_request( "t.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $response = xmlrpc_decode( $response ); for ( $i = 0; $i < count( $response ); $i++ ) { for ( $r = 0; $r < count( $methodlist ); $r++ ) { $methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $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"; } $si_responses["bytes_down"] = $bytes_down; $si_responses["bytes_up"] = $bytes_up; prepare_si_responses( $si_responses, $message, $home_path, $config ); $node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_down_value"] ); $node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_up_value"] ); $node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) ); $node->setAttribute( "suffix", $si_responses["download_rate_suffix"] ); $node->setAttribute( "value", $si_responses["download_rate_value"] ); $node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) ); $node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] ); $node->setAttribute( "value", $si_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 ( !$config["allow"]["download"] ) { $_SESSION["rtwi_err"] = "downloadnotallowed"; header( "location: {$url["index"]}" ); exit; } elseif ( $id < 0 ) { $_SESSION["rtwi_err"] = "noidfound"; header( "location: {$url["index"]}" ); exit; } else { // retrieving server info $methodlist = $xmlrpc_methods["si"]; $si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, $multicallnum, $callnum, $calltime ); $request = xmlrpc_encode_request( "download_list", array( $_SESSION["rtwi_view"] ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $d_name = xmlrpc_decode( $response ); // getting download directory $request = xmlrpc_encode_request( "d.get_directory", $hash ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $d_directory = xmlrpc_decode( $response ); //getting path $request = xmlrpc_encode_request( "f.get_path", array( $hash, $id ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $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, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $f_size_bytes = xmlrpc_decode( $response ); $d_directory_value = make_abs_path( $d_directory, $si_responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" ); } else { $_SESSION["rtwi_err"] = "nohashfound"; $layout_file = "layout.main.index.xsl"; } } break; } default : { // torrents // creating torrents node $tnode = $root->appendChild( $xml->createElement( "torrents" ) ); addview( $xml, $tnode, $message ); if ( $config["allow"]["refresh"] ) { addrefresh( $xml, $tnode, $refresh ); } // retrieving server info $methodlist = $xmlrpc_methods["si"]; $si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, $multicallnum, $callnum, $calltime ); $methodlist = $xmlrpc_methods["d"]; $request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) ); $response = xmlrpc_call( $xmlrpc_array, $request, $callnum, $calltime ); $response = preg_replace( "/i8|ex\.i8/", "string", $response ); $response = xmlrpc_decode( $response ); //print_r( $response ); exit; $bytes_down = 0; $bytes_up = 0; for ( $i = 0; $i < count( $response ); $i++ ) { for ( $r = 0; $r < count( $methodlist ); $r++ ) { $methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $methodlist[$r] ); $d_responses[$i][$methodval] = $response[$i][$r]; } $bytes_down += $d_responses[$i]["d_down_rate"]; $bytes_up += $d_responses[$i]["d_up_rate"]; prepare_d_responses( $d_responses[$i], $message, $home_path, $si_responses["get_cwd"] ); $ttnode = $tnode->appendChild( $xml->createElement( "torrent" ) ); xmlrpc_multiappend( $xml, $ttnode, $d_responses[$i] ); } $si_responses["bytes_down"] = $bytes_down; $si_responses["bytes_up"] = $bytes_up; prepare_si_responses( $si_responses, $message, $home_path, $config ); $node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_down_value"] ); $node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) ); $node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] ); $node->setAttribute( "value", $si_responses["bytes_up_value"] ); $node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) ); $node->setAttribute( "suffix", $si_responses["download_rate_suffix"] ); $node->setAttribute( "value", $si_responses["download_rate_value"] ); $node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) ); $node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] ); $node->setAttribute( "value", $si_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( "includes/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\nXMLRPC calls: %d (%d multicall)", $callnum, $multicallnum ); printf( "
\r\nXMLRPC time: %0.6f sec", $calltime ); if( isset( $fst ) && isset( $ftt ) ) { printf( "
\r\nFiles time: %0.6f sec", $ftt - $fst ); } printf( "
\r\nTotal time: %0.6f sec", $tt - $st ); ?>