function isIPBanned($ip) { $queryHandle = mysql_query("SELECT * from bittorrent_ipbans where ip=\"" . process_user_text($ip) . "\" and timestamp > " . time()); echo mysql_error(); if (mysql_num_rows($queryHandle)) { return true; } else { return false; } }
if (isIPBanned($ip)) { trackerError("Banned IP: " . $ip); } // Check that the info_hash is one that we allow: $queryHandle = mysql_query("SELECT * from bittorrent_files where info_hash=\"" . process_user_text($info_hash) . "\""); echo mysql_error(); if (!mysql_num_rows($queryHandle)) { trackerError("The tracker does not allow tracking of this file:" . $info_hash . " [] " . $_GET["info_hash"]); } $infoHashObject = mysql_fetch_object($queryHandle); // If the peer is actively doing something let's update the DB if ($event == "started" || $event == "stopped" || $event == "completed") { mysql_query("REPLACE into bittorrent_peers SET fileid=" . $infoHashObject->id . ", peerid=\"" . process_user_text($peer_id) . "\", ip=\"" . process_user_text($ip) . "\", port=\"" . process_user_text($port) . "\", status=\"" . $event . "\", uploaded=" . process_user_text($uploaded) . ", downloaded=" . process_user_text($downloaded) . ", timestamp=" . time()); echo mysql_error(); } else { mysql_query("REPLACE delayed into bittorrent_peers SET fileid=" . $infoHashObject->id . ", peerid=\"" . process_user_text($peer_id) . "\", ip=\"" . process_user_text($ip) . "\", port=\"" . process_user_text($port) . "\", uploaded=" . process_user_text($uploaded) . ", downloaded=" . process_user_text($downloaded) . ", timestamp=" . time()); echo mysql_error(); } // Always send back a random selection of peers who are downloading a file with the same info_hash $queryHandle = mysql_query("SELECT * from bittorrent_peers WHERE fileid = " . $infoHashObject->id . " order by RAND() limit " . MAX_INFO_HASH_PEERS); echo mysql_error(); $peerList = array(); while ($dbPeer = mysql_fetch_object($queryHandle)) { $peer = array("peer id" => $dbPeer->peerid, "ip" => $dbPeer->ip, "port" => intval($dbPeer->port)); $peerList[] = new BElement(BDictionary::toEncoded($peer)); } // Get some statistical counts $queryHandle = mysql_query("SELECT count(fileid) as complete from bittorrent_peers where fileid = '" . $infoHashObject->id . "' and status='completed'"); $data = mysql_fetch_object($queryHandle); $complete = intval($data->complete); $queryHandle = mysql_query("SELECT count(fileid) as incomplete from bittorrent_peers where fileid = '" . $infoHashObject->id . "' and status!='completed'");
{ echo BDictionary::toEncoded(array("failure_reason" => $error)); exit; } $info_hash = rawurldecode($_GET["info_hash"]); if (strlen($info_hash) != 20) { throw new IllegalArgumentException("Malformed infohash key (length " . strlen($info_hash) . ")"); } if (!$ip) { $ip = $_SERVER["REMOTE_ADDR"]; } // Is the IP banned? db_init(); if (isIPBanned($ip)) { trackerError("Banned IP: " . $ip); } // Check that the info_hash is one that we allow: $queryHandle = mysql_query("SELECT * from bittorrent_files where info_hash=\"" . process_user_text($info_hash) . "\""); echo mysql_error(); if (!mysql_num_rows($queryHandle)) { trackerError("The tracker does not allow tracking of this file:" . $info_hash); } $infoHashObject = mysql_fetch_object($queryHandle); // Get some statistical counts $queryHandle = mysql_query("SELECT count(fileid) as complete from bittorrent_peers where fileid = '" . $infoHashObject->id . "' and status='completed'"); $data = mysql_fetch_object($queryHandle); $complete = intval($data->complete); $queryHandle = mysql_query("SELECT count(fileid) as incomplete from bittorrent_peers where fileid = '" . $infoHashObject->id . "' and status!='completed'"); $data = mysql_fetch_object($queryHandle); $incomplete = intval($data->incomplete); $out = BDictionary::toEncoded(array("interval" => DEFAULT_CONNECTION_INTERVAL, "downloaded" => $complete, "complete" => $complete, "incomplete" => $incomplete));
/** * Registers this torrent in the database */ public function register() { $this->toEncoded(); // Check if exists: $queryHandle = mysql_query("SELECT id from bittorrent_files where filename=\"" . process_user_text($this->filename) . "\""); if ($queryHandle && ($data = mysql_fetch_object($queryHandle))) { $extra = "id=" . $data->id . ", "; } else { $extra = ""; } mysql_query("REPLACE into bittorrent_files set " . $extra . "filename=\"" . process_user_text($this->filename) . "\", info_hash=\"" . process_user_text($this->infoHash) . "\", timestamp=" . time()); }