torrentpier-lts/bt/scrape.php
Roman Kelesidis 474f51185c
Fixed info hash v2 issue (#233)
* Fixed info hash v2 issue

* Update CHANGELOG.md
2023-08-31 00:35:55 +07:00

89 lines
2.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
define('IN_TRACKER', true);
define('BB_ROOT', './../');
require(BB_ROOT .'common.php');
if (!$tr_cfg['scrape']) msg_die('Please disable SCRAPE!');
// Recover info_hash
if (isset($_GET['?info_hash']) && !isset($_GET['info_hash']))
{
$_GET['info_hash'] = $_GET['?info_hash'];
}
if (!isset($_GET['info_hash']) || strlen($_GET['info_hash']) != 20)
{
msg_die('Invalid info_hash');
}
$is_bt_v2 = null;
$info_hash = isset($_GET['info_hash']) ? (string)$_GET['info_hash'] : null;
// Verify info_hash
if (!isset($info_hash))
{
msg_die('info_hash does not exist');
}
// Check info_hash version
if (strlen($info_hash) == 32)
{
$is_bt_v2 = true;
}
elseif (strlen($info_hash) == 20)
{
$is_bt_v2 = false;
}
else
{
msg_die('Invalid info_hash');
}
function msg_die ($msg)
{
if (DBG_LOG) dbg_log(' ', '!die-'. clean_filename($msg));
$output = bencode(array(
'min interval' => (int) 1800,
'failure reason' => (string) $msg,
'warning message' => (string) $msg,
));
die($output);
}
define('TR_ROOT', './');
require(TR_ROOT . 'includes/init_tr.php');
$info_hash_sql = rtrim(DB()->escape($info_hash), ' ');
/**
* Поскольку торрент-клиенты в настоящее время обрезают инфо-хэш до 20 символов (независимо от его типа, как известно v1 = 20 символов, а v2 = 32 символа),
* то результатов $is_bt_v2 (исходя из длины строки определяем тип инфо-хэша) проверки нам будет мало, именно поэтому происходит поиск v2 хэша, если торрент является v1 (по длинне) и если в tor.info_hash столбце нету v1 хэша.
*/
$info_hash_where = $is_bt_v2 ? "WHERE tor.info_hash_v2 = '$info_hash_sql'" : "WHERE tor.info_hash = '$info_hash_sql' OR tor.info_hash_v2 LIKE '$info_hash_sql%'";
$row = DB()->fetch_row("
SELECT tor.complete_count, snap.seeders, snap.leechers
FROM ". BB_BT_TORRENTS ." tor
LEFT JOIN ". BB_BT_TRACKER_SNAP ." snap ON (snap.topic_id = tor.topic_id)
$info_hash_where
LIMIT 1
");
if (!$row)
{
msg_die('Torrent not registered, info_hash = ' . bin2hex($info_hash_sql));
}
$output['files'][$info_hash] = array(
'complete' => (int) $row['seeders'],
'downloaded' => (int) $row['complete_count'],
'incomplete' => (int) $row['leechers'],
);
echo bencode($output);
tracker_exit();
exit;