180) mysql_query("UPDATE ".$prefix."speedlimit SET started=UNIX_TIMESTAMP()-1, total_uploaded=total_uploaded+uploaded, uploaded=0"); $result = mysql_query("SELECT uploaded / (UNIX_TIMESTAMP() - started) FROM ".$prefix."speedlimit"); $row = mysql_fetch_row($result); if ((float)($row[0]) > $max_upload_rate) { $result = mysql_query("SELECT (uploaded/". $max_upload_rate . "+started) - UNIX_TIMESTAMP() FROM ".$prefix."speedlimit"); $row = mysql_fetch_row($result); reject("503 Service Temporarily Unavailable", (int)$row[0] + mt_rand(1,30)); } $result = mysql_query("SELECT seeds FROM ".$prefix."summary WHERE info_hash=$info_hash"); if ($result) { //error_log("Doing PHPBT check"); $row = mysql_fetch_assoc($result); if ($row["seeds"] > 5) //if there are seeds available, don't use HTTP seeding reject(); } if (mysql_num_rows($result) == 0) //hash isn't even in database! { //reject em! reject(); } Unlock("WebSeedLock"); // Max uploads check for ($lockno=0; $lockno < $GLOBALS["max_uploads"]; $lockno++) if (Lock("WebSeed--$lockno", 0)) break; //error_log("Lockno=$lockno"); if ($lockno == $GLOBALS["max_uploads"]) reject(); // Get to work! $result = mysql_query("SELECT ".$prefix."summary.piecelength, ".$prefix."summary.numpieces FROM ".$prefix."summary WHERE info_hash=\"$info_hash\""); if (!$result) reject("500 Internal Server Error"); $config = mysql_fetch_assoc($result); if (!$config) reject("403 Forbidden"); $result = mysql_query("SELECT * FROM ".$prefix."webseedfiles WHERE info_hash=\"$info_hash\" ORDER BY fileorder"); if ($config["numpieces"] < $piece || $piece < 0) reject("400 Bad Request"); // Data to return, and accounting. $xmit = ""; $xmitbytes = 0; while ($row = mysql_fetch_assoc($result)) { if (!($piece >= $row["startpiece"] && $piece <= $row["endpiece"])) continue; $offset = ($row["startpiece"] == $piece) ? 0 : (($piece - $row["startpiece"])*$config["piecelength"] - $row["startpieceoffset"]); $fd = fopen($row["filename"], "rb") or reject("500 Internal Server Error"); if (fseek($fd, $offset) != 0) reject("500 Internal Server Error"); $data = fread($fd, $config["piecelength"]-$xmitbytes); if ($data === false) reject("500 Internal Server Error"); $xmit .= $data; $xmitbytes += strlen($data); if ($xmitbytes == $config["piecelength"]) break; fclose($fd); } // Header is most likely already: 200 Ok //error_log("Send length: $xmitbytes == ".strlen($xmit)); if (isset($_GET["ranges"])) { $myxmit = ""; $ranges = explode(",", $_GET["ranges"]); foreach ($ranges as $blocks) { $startstop = explode("-", $blocks); if (!is_numeric($startstop[0]) || !is_numeric($startstop[1])) reject("400 Bad Request"); if (isset($startstop[2])) reject("400 Bad Request"); $start = $startstop[0]; $stop = $startstop[1]; if ($start > $stop) reject("400 Bad Request"); $myxmit .= substr($xmit, $start, $stop-$start+1); } header("Content-Length: ".strlen($myxmit)); mysql_query("UPDATE ".$prefix."speedlimit SET uploaded=uploaded+".strlen($myxmit)); echo $myxmit; } else { mysql_query("UPDATE ".$prefix."speedlimit SET uploaded=uploaded+$xmitbytes"); header("Content-Length: $xmitbytes"); echo $xmit; } Unlock("WebSeed--$lockno"); exit; ?>