upgrade server and php 5.3, announce.php is bad error urgently help
PHP Code:
<?php
include ('include/bittorrent_announce.php');
require_once ('include/benc.php');
function err( $msg )
{
benc_resp( array('failure reason' => array(type => 'string', value => $msg)) ) ;
exit() ;
}
function benc_resp( $d )
{
benc_resp_raw( benc(array(type => 'dictionary', value => $d)) ) ;
}
function benc_resp_raw( $x )
{
header( "Content-Type: text/plain" ) ;
header( "Pragma: no-cache" ) ;
if ( $_SERVER["HTTP_ACCEPT_ENCODING"] == "gzip" )
{
header( "Content-Encoding: gzip" ) ;
echo gzencode( $x, 9, FORCE_GZIP ) ;
}
else
echo $x ;
}
foreach (array("passkey", "info_hash", "peer_id", "event", "ip", "localip") as $x) {
if (isset($_GET["$x"]))
$GLOBALS[$x] = "" . $_GET[$x];
}
foreach (array("port", "downloaded", "uploaded", "left") as $x) {
$GLOBALS[$x] = 0 + $_GET[$x];
}
if (strpos($passkey, "?")) {
$tmp = substr($passkey, strpos($passkey, "?"));
$passkey = substr($passkey, 0, strpos($passkey, "?"));
$tmpname = substr($tmp, 1, strpos($tmp, "=") - 1);
$tmpvalue = substr($tmp, strpos($tmp, "=") + 1);
$GLOBALS[$tmpname] = $tmpvalue;
}
foreach (array("passkey", "info_hash", "peer_id", "port", "downloaded",
"uploaded", "left") as $x)
if (!isset($x))
err("Missing key: $x");
foreach (array("info_hash", "peer_id") as $x)
if (strlen($GLOBALS[$x]) != 20)
err("Invalido $x (" . strlen($GLOBALS[$x]) . " - " . urlencode($GLOBALS[$x]) .
")");
if (strlen($passkey) != 32)
err("Invalido passkey (" . strlen($passkey) . " - $passkey)");
$ip = ip::getip();
$rsize = 50;
foreach (array("num want", "numwant", "num_want") as $k) {
if (isset($_GET[$k])) {
$rsize = 0 + $_GET[$k];
break;
}
}
// BLOCK ACCESS WITH WEB BROWSERS AND CHEATS!
$agent = $_SERVER["HTTP_USER_AGENT"];
if (ereg("^Mozilla\/", $agent) || ereg("^Opera\/", $agent) || ereg("^Links ", $agent) ||
ereg("^Lynx\/", $agent))
err("torrent no registrados en el tracker");
if (!$port || $port > 0xffff)
err("puerto invalido");
if (!isset($event))
$event = "";
$seeder = ($left == 0) ? "yes" : "no";
$valid = @mysql_query("SELECT COUNT(*) FROM users WHERE passkey=" . sqlesc($passkey)) or
err(mysql_error());
$valid = @mysql_fetch_row($valid);
if ($valid[0] != 1)
err("Invalido passkey! Vuelva a descargar el archivo Torrent de $BASEURL");
$res = mysql_query("SELECT id, name, category, banned, free, silver, doubleupload, seeders + leechers AS numpeers, UNIX_TIMESTAMP(added) AS ts FROM torrents WHERE " .
hash_where("info_hash", $info_hash));
$torrent = mysql_fetch_assoc($res);
if (!$torrent)
err("torrent no registrados en el tracker");
$torrentid = $torrent["id"];
$torrentname = $torrent["name"];
$torrentcategory = $torrent["category"];
$fields = "seeder, peer_id, ip, port, uploaded, downloaded, userid, last_action, UNIX_TIMESTAMP(NOW()) AS nowts, UNIX_TIMESTAMP(prev_action) AS prevts, (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(last_action)) AS announcetime";
$numpeers = $torrent["numpeers"];
$limit = "";
if ($numpeers > $rsize)
$limit = "ORDER BY RAND() LIMIT $rsize";
$res = mysql_query("SELECT $fields FROM peers WHERE torrent = $torrentid");
global $announce_interval;
$resp = "d" . benc_str("interval") . "i" . $announce_interval . "e" . benc_str("peers") . "l";
unset($self);
while ($row = mysql_fetch_assoc($res)) {
$row["peer_id"] = hash_pad($row["peer_id"]);
if ($row["peer_id"] === $peer_id) {
$userid = $row["userid"];
$self = $row;
continue;
}
$a = @mysql_query("SELECT class FROM users WHERE id = '$userid'");
$a = @mysql_fetch_assoc($a);
$b = @mysql_query("SELECT hasfreeleech FROM usergroups WHERE id = $a[class]");
$b = @mysql_fetch_assoc($b);
$hasfreeleech = $b['hasfreeleech'];
$userclass = $a['class'];
$resp .= "d" . benc_str("ip") . benc_str($row["ip"]) . benc_str("peer id") .
benc_str($row["peer_id"]) . benc_str("port") . "i" . $row["port"] . "e" . "e";
}
$resp .= "ee";
$selfwhere = "torrent = $torrentid AND " . hash_where("peer_id", $peer_id);
if (!isset($self)) {
$res = mysql_query("SELECT $fields FROM peers WHERE $selfwhere");
$row = mysql_fetch_assoc($res);
if ($row) {
$userid = $row["userid"];
$self = $row;
}
}
///////////// Comentado para que funcione con php-CGI ////////////////////////////////
/*
if (function_exists('getallheaders'))
$headers = getallheaders();
else
$headers = emu_getallheaders();
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (isset($headers["Cookie"]) || isset($headers["Accept-Language"]) || isset($headers["Accept-Charset"]))
err("Anti-Cheater= Usted no puede utilizar este agente");
$announce_wait = 900;
if (isset($self) && ($self['prevts'] > ($self['nowts'] - $announce_wait)))
err('Existe un mínimo de tiempo para anunciar al tracker y es 15 minutos');
if (!isset($self)) {
$valid = @mysql_fetch_row(@mysql_query("SELECT COUNT(*) FROM peers WHERE torrent=$torrentid AND passkey=" .
sqlesc($passkey)));
if ($valid[0] >= 2 && $seeder == 'no')
err("Límite de conexiones se ha superado Para Este torrent! Usted no puede descargar por un tiempo prudente.");
if ($valid[0] >= 3 && $seeder == 'yes')
err("Límite de conexiones se ha superado!");
$rz = mysql_query("SELECT id, uploaded, downloaded, class, parked FROM users WHERE passkey=" .
sqlesc($passkey) . " AND enabled = 'yes' ORDER BY last_access DESC LIMIT 1") or
err("Tracker error 2");
if ($MEMBERSONLY == "yes" && mysql_num_rows($rz) == 0)
err("Passkey Desconocido. Vuelva a descargar el archivo Torrent de $BASEURL. a");
$az = mysql_fetch_assoc($rz);
$userid = 0 + $az["id"];
if ($az["class"] == UC_VIP) {
mysql_query("UPDATE snatched SET statusvip = 'yes' WHERE torrent = '$torrentid' AND finished = 'yes' AND userid = '$userid' AND statusvip ='no'") or err("Tracker error status vip");
}
if ($az["class"] == UC_USER) {
if ($waitsystem == "yes") {
$gigs = $az["uploaded"] / (1024 * 1024 * 1024);
$elapsed = floor((gmtime() - $torrent["ts"]) / 3600);
$ratio = (($az["downloaded"] > 0) ? ($az["uploaded"] / $az["downloaded"]) : 1);
if ($ratio < 0.5 || $gigs < 5)
$wait = 24;
elseif ($ratio < 0.65 || $gigs < 6.5)
$wait = 12;
elseif ($ratio < 0.8 || $gigs < 8)
$wait = 6;
elseif ($ratio < 0.95 || $gigs < 9.5)
$wait = 1;
else
$wait = 0;
if ($elapsed < $wait)
err("No Estas autorizado debes Esperar (" . ($wait - $elapsed) . "h) - LEE EL FAQ!");
}
if ($az["class"] < UC_VIP)
{
if ($maxdlsystem == "yes") {
if ($az["class"] == UC_NEWUSER)
$max = 2;
elseif ($az["class"] == UC_USER)
$max = 2;
elseif ($az["class"] == UC_POWER_USER)
$max = 4;
elseif ($az["class"] == UC_ELITE_USER)
$max = 8;
elseif ($az["class"] == UC_LOVER)
$max = 16;
elseif ($az["class"] == UC_ADICTO)
$max = 32;
else
$max = 0;
if ($max > 0) {
$res = mysql_query("SELECT COUNT(*) AS num FROM peers WHERE userid='$userid' AND seeder='no'") or
err("Tracker error 5");
$row = mysql_fetch_assoc($res);
if ($row['num'] >= $max)
err("No Estas autorizado (Estás descargando el número máximo de torrents permitidos - $max)");
}
}
}
}
} else {
////////////////////////////DENEGACION SEEDBOX POR 3////////////////////////////////
$sqlc = mysql_query("SELECT snatched.torrent, snatched.userid as userid, snatched.uploaded as uploaded, snatched.downloaded as downloaded, snatched.finished as finished, torrents.owner as owner, users.class as class FROM snatched LEFT JOIN users ON snatched.userid = users.id LEFT JOIN torrents ON torrents.id = snatched.torrentid WHERE torrent = $torrentid AND userid = $userid");
$upseed = mysql_fetch_array($sqlc);
$cuota = '1073741824';
$dwseed = $upseed['downloaded'] * 2;
if ($upseed['downloaded'] >= $cuota and $upseed['owner'] != $userid and $upseed['finished'] = yes)
if ($upseed['uploaded'] >= $dwseed and $upseed['class'] < UC_VIP and $upseed['finished'] = yes)
err("Tienes Seedbox o Serv. Dedicado, No Puedes Subir Más de 2 Veces la Cantidad de Gigas Descargados. Por Favor Valla a $BASEURL/rules.php Para obtener mas Informacion");
if ($upseed["class"] == UC_VIP) {
mysql_query("UPDATE snatched SET statusvip = 'yes' WHERE torrent = '$torrentid' AND finished = 'yes' AND userid = '$userid' AND statusvip ='no'") or err("Tracker error status vip");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
$upthis = max(0, $uploaded - $self["uploaded"]);
$upspeed = ($upthis > 0 ? $upthis / $self["announcetime"] : 0);
$downspeed = ($downthis > 0 ? $downthis / $self["announcetime"] : 0);
$announcetime = ($self["seeder"] == "yes" ? "seedtime = seedtime + $self[announcetime]" : "leechtime = leechtime + $self[announcetime]");
if ($hasfreeleech == 'no')
$downthis = max(0, $downloaded - $self["downloaded"]);
else
$downthis = 0;
if ($torrent['free'] == 'yes')
$downthis = 0;
if ($torrent['doubleupload'] == 'yes')
$upthis *= 2;
if($torrent['silver']=='yes')
$downthis = $downthis/2;
if ($upthis > 0 || $downthis > 0)
mysql_query("UPDATE users SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id=$userid") or
err("Tracker error 3");
}
$uagent = $_SERVER['HTTP_USER_AGENT'];
$bua = mysql_query("SELECT agent FROM banned_agent") or err('Tracker error (1)');
while ($nea = mysql_fetch_array($bua)) {
$n = $nea['agent'];
$nr = preg_replace("/\//", "\/", $n);
$neadle = "/\b$nr\b/i";
if (preg_match($neadle, $uagent))
err("Cliente Prohibido o Baneado, Por Favor Actualize a la Ultima Version y valla a $BASEURL/rules.php Para Obtener La Lista de Clientes Permitidos");
}
if (ereg("^BitTorrent\/S-", $agent))
err("Shadow's Experimental Cliente Prohibido. Por favor use uTorrent.");
if (ereg("^ABC\/ABC", $agent))
err("ABC Cliente Prohibido. Por favor use uTorrent.");
if (ereg("^Python-urllib\/2.4", $agent))
err("Cliente Prohibido. Por favor use uTorrent.");
#getoutofmysite($peer_id);
$dt = gmtime() - 180;
$dt = sqlesc(get_date_time($dt));
$updateset = array();
if ($event == "stopped") {
if (isset($self)) {
mysql_query("UPDATE snatched SET ip = ".sqlesc($ip).", port = $port, uploaded = uploaded + $upthis, downloaded = downloaded + $downthis, to_go = $left, upspeed = $upspeed, downspeed = $downspeed, $announcetime, last_action = '".get_date_time()."', seeder = 'no', connectable='no'', agent = ".sqlesc($agent)." WHERE torrentid = $torrentid AND userid = $userid") or err("SL Err 1");
mysql_query("DELETE FROM peers WHERE $selfwhere");
if (mysql_affected_rows()) {
if ($self["seeder"] == "yes")
$updateset[] = "seeders = seeders - 1";
else
$updateset[] = "leechers = leechers - 1";
}
}
} else {
if ($event == "completed") {
mysql_query("UPDATE torrent_hit SET completed = 'yes' WHERE id = $torrentid AND uid = $userid");
mysql_query("UPDATE snatched SET finished = 'yes', completedat = $dt WHERE torrent = $torrentid AND userid = $userid");
$updateset[] = "times_completed = times_completed + 1";
}
if (isset($self)) {
$res = mysql_query("SELECT uploaded, downloaded FROM snatched WHERE torrent = $torrentid AND userid = $userid");
$row = mysql_fetch_array($res);
$sockres = @pfsockopen($ip, $port, $errno, $errstr, 5);
if (!$sockres)
$connectable = "yes";
else {
$connectable = "yes";
@fclose($sockres);
}
$downloaded2 = $downloaded - $self["downloaded"];
$uploaded2 = $uploaded - $self["uploaded"];
mysql_query("UPDATE snatched SET ip = ".sqlesc($ip).", uploaded = uploaded+$uploaded2, downloaded = downloaded+$downloaded2, port = $port, connectable = '$connectable', agent= " . sqlesc($agent) . ", to_go = $left, upspeed = $upspeed, downspeed = $downspeed, $announcetime, last_action = $dt, seeder = '$seeder' WHERE torrent = $torrentid AND userid = $userid");
$prev_action = sqlesc($self['last_action']);
mysql_query("UPDATE peers SET ip = ".sqlesc($ip).", port = $port, connectable = '$connectable', uploaded = $uploaded, downloaded = $downloaded, to_go = $left, last_action = NOW(), prev_action = $prev_action, seeder = '$seeder'" .
($seeder == "yes" && $self["seeder"] != $seeder ? ", agent = ".sqlesc($agent).", finishedat = " . time() :"") . " WHERE $selfwhere");
if (mysql_affected_rows() && $self["seeder"] != $seeder) {
if ($seeder == "yes") {
$updateset[] = "seeders = seeders + 1";
$updateset[] = "leechers = leechers - 1";
} else {
$updateset[] = "seeders = seeders - 1";
$updateset[] = "leechers = leechers + 1";
}
}
} else {
if ($az["parked"] == "yes")
err("Error, su cuenta está parked!");
# if (portblacklisted($port))
# err("Port $port está en la lista negra.");
else {
$sockres = @pfsockopen($ip, $port, $errno, $errstr, 5);
if (!$sockres) {
$connectable = "yes";
if ($nc == "yes")
err("ERROR - Su cliente no se puede conectar! Verifique su configuración - puerto o consulte a un administartor o buscar en los foros.");
} else {
$connectable = "yes";
@fclose($sockres);
}
}
$res = mysql_query("SELECT torrent, userid FROM snatched WHERE torrent = $torrentid AND userid = $userid");
$check = mysql_fetch_assoc($res);
if (!$check)
mysql_query("INSERT INTO snatched (torrent, torrentid, userid, peer_id, ip, port, uploaded, downloaded, to_go, startdat, last_action, seeder, agent, torrent_name, torrent_category) VALUES ($torrentid, $torrentid, $userid, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, $uploaded, $downloaded, $left, $dt, $dt, '$seeder', " . sqlesc($agent) . ", " . sqlesc($torrentname) . ", $torrentcategory)");
$ret = mysql_query("INSERT INTO peers (connectable, torrent, peer_id, ip, port, uploaded, downloaded, to_go, started, last_action, seeder, userid, agent, uploadoffset, downloadoffset, passkey) VALUES ('$connectable', $torrentid, " .
sqlesc($peer_id) . ", " . sqlesc($ip) . ", $port, $uploaded, $downloaded, $left, NOW(), NOW(), '$seeder', $userid, " . sqlesc($agent) . ", $uploaded, $downloaded, " . sqlesc($passkey) . ")");
if ($ret) {
if ($seeder == "yes")
$updateset[] = "seeders = seeders + 1";
else
$updateset[] = "leechers = leechers + 1";
}
}
}
if ($seeder == "yes") {
if ($torrent["banned"] != "yes")
$updateset[] = "visible = 'yes'";
$updateset[] = "last_action = NOW()";
}
if (count($updateset))
mysql_query("UPDATE torrents SET " . join(",", $updateset) . " WHERE id = $torrentid");
$select_client = mysql_query("SELECT * FROM clientselect WHERE name='" . $agent .
"'");
if (mysql_num_rows($select_client) == 0) {
$insert = @mysql_query("INSERT INTO clientselect (name) VALUES ('" . $agent .
"')");
$client_id = mysql_insert_id();
} else {
$client_row = @mysql_fetch_array($select_client);
$client_id = $client_row['id'];
}
$agent_user_add = @mysql_query("UPDATE users SET clientselect='" . $client_id .
"' where id='" . $userid . "'");
benc_resp_raw($resp);
if(!function_exists("getallheaders")) {
function emu_getallheaders() {
foreach($_SERVER as $name => $value)
if(substr($name, 0, 5) == 'HTTP_')
$headers[substr($name, 5)] = $value;
return $headers;
}
}
?>