} } $response = array(); $response['flags'] = $response['files'] = array(); foreach ($info_hashes as $hash) { // GET TORRENT INFO $query = array('SELECT' => 't.name, t.completed', 'FROM' => 'torrents AS t', 'WHERE' => 'UPPER(t.info_hash) = UPPER(\'' . $forum_db->escape($hash) . '\')'); $result = $forum_db->query_build($query) or error(__FILE__, __LINE__); $torrent_info = $forum_db->fetch_assoc($result); if (!$torrent_info) { continue; } $torrent_info['seeds'] = $torrent_info['leechers'] = 0; // GET TORRENT PEERS INFO $peersQuery = array('SELECT' => 'p.*', 'FROM' => 'peers AS p', 'WHERE' => 'p.info_hash = \'' . $forum_db->escape($hash) . '\''); $peersResult = $forum_db->query_build($peersQuery) or error(__FILE__, __LINE__); while ($cur_peer = $forum_db->fetch_assoc($peersResult)) { if ($cur_peer['remaining'] == 0) { $torrent_info['seeds']++; } else { $torrent_info['leechers']++; } } $response['files'][Fancy_Tracker::hex2bin($hash)] = array('complete' => $torrent_info['seeds'], 'downloaded' => $torrent_info['completed'], 'incomplete' => $torrent_info['leechers'], 'name' => $torrent_info['name']); } // ADD FLAGS $response['flags']['min_request_interval'] = intval($forum_config['o_fancy_tracker_announce_interval'], 10) * 2; // End the transaction $forum_db->end_transaction(); $forum_db->close(); exit(Fancy_Tracker::benc_encode($response));
case 'mysql_innodb': case 'mysqli_innodb': case 'pgsql': $random_fn = 'RAND()'; break; case 'sqlite': case 'sqlite3': $random_fn = 'random()'; break; default: $random_fn = 'RAND()'; } $query = array('SELECT' => 'p.peer_id, p.ip, p.port, p.remaining', 'FROM' => 'peers AS p', 'WHERE' => 'UPPER(p.info_hash) = UPPER(\'' . $forum_db->escape($fields['info_hash']) . '\') AND UPPER(p.peer_id) != UPPER(\'' . $forum_db->escape($fields['peer_id']) . '\')', 'ORDER BY' => $random_fn, 'LIMIT' => $fields['num_want']); $result = $forum_db->query_build($query) or Fancy_Tracker::benc_error('Unable to fetch list of peers.'); $peers = array(); $seeders = $leechers = 0; while ($cur_peer = $forum_db->fetch_assoc($result)) { $peers[] = array('ip' => $cur_peer['ip'], 'peer id' => str_pad(Fancy_Tracker::hex2bin($cur_peer['peer_id']), 20), 'port' => intval($cur_peer['port'], 10)); // GET num SEED and LEECHERS if ($cur_peer['remaining'] == 0) { $seeders++; } else { $leechers++; } } // End the transaction $forum_db->end_transaction(); // LAST QUERY $forum_db->close(); $response = Fancy_Tracker::benc_encode(array('complete' => $seeders, 'incomplete' => $leechers, 'interval' => intval($forum_config['o_fancy_tracker_announce_interval'], 10), 'peers' => $peers)); exit($response);