Hybrid topics handling in announcer

This commit is contained in:
Constantine Kovalensky 2023-09-10 17:14:35 +04:00
commit 7aa6f0d45f
3 changed files with 39 additions and 30 deletions

View file

@ -69,6 +69,8 @@ if (strlen($info_hash) == 32) {
} else {
msg_die('Invalid info_hash: ' . $info_hash);
}
// Hybrid torrent checks
$is_hybrid = $hybrid_v1_hash = $hybrid_v2_hash = $hybrid_tor_update = false;
if (!isset($port) || $port < 0 || $port > 0xFFFF) {
msg_die('Invalid port: ' . $port);
@ -185,9 +187,14 @@ if ($lp_info) {
$tor_type = $row['tor_type'];
// Check hybrid torrents
$is_hybrid = false;
if (!empty($row['info_hash']) && !empty($row['info_hash_v2'])) {
// Helpful dev variables
$is_hybrid = true;
$hybrid_v1_hash = &$row['info_hash'];
$hybrid_v2_hash = &$row['info_hash_v2'];
if ($info_hash === $hybrid_v1_hash) {
$hybrid_tor_update = true;
}
}
// Ratio limits
@ -287,7 +294,7 @@ if ($bb_cfg['tracker']['freeleech'] && $down_add) {
// Insert / update peer info
$peer_info_updated = false;
$update_time = ($stopped) ? 0 : TIMENOW;
if (($is_hybrid && $hybrid_tor_update) || !$is_hybrid) { // Update statistics only for one topic
if ($lp_info) {
$sql = "UPDATE " . BB_BT_TRACKER . " SET update_time = $update_time";
@ -320,7 +327,7 @@ if (!$lp_info || !$peer_info_updated) {
DB()->query("REPLACE INTO " . BB_BT_TRACKER . " ($columns) VALUES ($values)");
}
}
// Exit if stopped
if ($stopped) {
silent_exit();
@ -380,8 +387,8 @@ if (!$output) {
LIMIT 1
");
$seeders = $row['seeders'] ?? 0;
$leechers = $row['leechers'] ?? 0;
$seeders = $row['seeders'] ?? ($seeder ? 1 : 0);
$leechers = $row['leechers'] ?? (!$seeder ? 1 : 0);
}
$output = [
@ -389,11 +396,12 @@ if (!$output) {
'min interval' => (int)$announce_interval,
'complete' => (int)$seeders,
'incomplete' => (int)$leechers,
//'downloaded' => int($client_complete)
'warning message' => 'Statistics were updated',
'peers' => $peers,
];
$peers_list_cached = CACHE('tr_cache')->set(PEERS_LIST_PREFIX . $topic_id, $output, PEERS_LIST_EXPIRE);
CACHE('tr_cache')->set(PEERS_LIST_PREFIX . $topic_id, $output, PEERS_LIST_EXPIRE);
}
// Return data to client

View file

@ -71,6 +71,7 @@ function dummy_exit($interval = 1800, $cache_dict = [])
if (!empty($cache_dict)) {
$output['complete'] = $cache_dict['complete'];
$output['incomplete'] = $cache_dict['incomplete'];
//$output['downloaded'] = $cache_dict['downloaded'];
$output['warning message'] = 'Next statistics update in: ' . (floor($interval / 60) % 60) . ' minutes';
$output['peers'] = $cache_dict['peers'];
}

View file

@ -36,7 +36,7 @@ if (strlen($info_hash) == 32) {
} elseif (strlen($info_hash) == 20) {
$is_bt_v2 = false;
} else {
msg_die('Invalid info_hash: ' . $info_hash);
msg_die('Invalid info_hash');
}
$info_hash_hex = bin2hex($info_hash);
@ -70,7 +70,7 @@ $output['files'][$info_hash] = [
'incomplete' => (int)$row['leechers'],
];
$peers_list_cached = CACHE('tr_cache')->set(SCRAPE_LIST_PREFIX . $info_hash_hex, $output, SCRAPE_LIST_EXPIRE);;
CACHE('tr_cache')->set(SCRAPE_LIST_PREFIX . $info_hash_hex, $output, SCRAPE_LIST_EXPIRE);
echo \SandFox\Bencode\Bencode::encode($output);