= 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_r_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"] ); $max_memory_usage_arr = switch_bytes( $responses["max_memory_usage"] ); $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["max_memory_usage_value"] = sprintf( "%.1f", $max_memory_usage_arr[0] ); $responses["max_memory_usage_suffix"] = $max_memory_usage_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["upload_rate_value"] = sprintf( "%.1f", $upload_rate_arr[0] ); $responses["upload_rate_suffix"] = $upload_rate_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["safe_sync_value"] = $responses["safe_sync"] == 0 ? $message["safe_sync_0"] : $message["safe_sync_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 ), $responses["d_estimated_time"] / 3600 % 24, $responses["d_estimated_time"] % 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" ) ); $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" ) ); $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 ) { //print "."; $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 { $ret = $errno; } return $ret; } function xmlrpc_multicall( &$xmlrpc_array, &$methodlist, $params = array() ) { //print "|"; $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 ) ) { 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 // 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 ); // creating torrents node $tnode = $root->appendChild( $xml->createElement( "torrents" ) ); addrefresh( $xml, $tnode, $message ); if ( in_array( $hash, $torrents ) ) { $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_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" ); $responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, array( $hash ) ); prepare_d_responses( $responses, $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", $responses["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" ); for ( $i = 0; $i < $responses["d_size_files"]; $i++ ) { $f_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, array( $hash, $i ) ); prepare_f_responses( $f_responses, $message, $home_path ); $fnode = build_xmltree( $f_responses["f_path_components"], $node, $xml ); $fnode->setAttribute( "id", $i ); xmlrpc_multiappend( $xml, $fnode, $f_responses ); } 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" ); for ( $i = 0; $i < $responses["d_tracker_size"]; $i++ ) { $t_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist, array( $hash, $i ) ); $tracnode = $node->appendChild( $xml->createElement( "tracker" ) ); $tracnode->setAttribute( "id", $i ); prepare_trac_responses( $t_responses, $message ); xmlrpc_multiappend( $xml, $tracnode, $t_responses ); } 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; } } $node->appendChild( $xml->createElement( "sha1_hash", $hash ) ); xmlrpc_multiappend( $xml, $node, $responses ); } else { $_SESSION["rtwi_err"] = "nohashfound"; } $methodlist = array( "d.get_down_rate=", "d.get_up_rate=" ); $request = xmlrpc_encode_request( "call_download", 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( $torrents ); $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_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_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_r_responses( $responses, $message ); xmlrpc_multiappend( $xml, $tnode, $responses ); if ( $ajax === true ) { $layout_file = "layout.ajax.index.xsl"; } else { $layout_file = "layout.main.index.xsl"; } break; } case "getfile" : { 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; } default : { // torrents // 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 ); // creating torrents node $tnode = $root->appendChild( $xml->createElement( "torrents" ) ); addview( $xml, $tnode, $message ); addrefresh( $xml, $tnode, $message ); $bytes_down = 0; $bytes_up = 0; if ( is_array( $torrents ) ) { $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_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( "call_download", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) ); $response = xmlrpc_call( $xmlrpc_array, $request ); $response = str_replace( "i8", "double", $response ); $response = xmlrpc_decode( $response ); for ( $i = 0; $i < count( $torrents ); $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" ) ); $ttnode->appendChild( $xml->createElement( "sha1_hash", $torrents[$i] ) ); 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_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_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_r_responses( $responses, $message ); xmlrpc_multiappend( $xml, $tnode, $responses ); $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"] = ""; } $_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 { $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 ); ?>