retracker: implemented proxy-announcing to all trackers registered in database & retrieve peers to database.
This commit is contained in:
parent
7e874e5c0d
commit
aeda1d2718
1 changed files with 79 additions and 0 deletions
79
tracker.php
Normal file
79
tracker.php
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
require("../php/config.php");
|
||||
require("bencoder.php");
|
||||
require("peer.php");
|
||||
$ANN_USERAGENT = "Transmission/3.00";
|
||||
$ANN_PEER_ID = "01234567890123456789";
|
||||
$DB_NAME = "torrent";
|
||||
|
||||
class Tracker {
|
||||
const ANN_USERAGENT = "Transmission/3.00";
|
||||
const ANN_PEER_ID = "01234567890123456789";
|
||||
|
||||
protected $proto;
|
||||
protected $host;
|
||||
protected $port;
|
||||
protected $path;
|
||||
protected $passkey;
|
||||
protected $proxy;
|
||||
|
||||
public function __toString() {
|
||||
return $this->proto . "://" . $this->host
|
||||
. ":" . $this->port . $this->path;
|
||||
}
|
||||
|
||||
public function getHttpUrl() {
|
||||
return $this->proto . "://" . $this->host . $this->path;
|
||||
}
|
||||
|
||||
public function doHttpAnnounce($infoHash, $peerIp, $peerPort, $peerId = null, $uploaded = 0, $downloaded = 0, $left = 0) {
|
||||
$peers = array();
|
||||
|
||||
$passkey = is_null($this->passkey) ? "" : $this->passkey . "&";
|
||||
$params = http_build_query(array(
|
||||
"info_hash" => hash_encode($infoHash),
|
||||
"peer_id" => is_null($peerId) ? self::ANN_PEER_ID : $peerId,
|
||||
"ip" => $peerIp,
|
||||
"port" => $peerPort,
|
||||
"uploaded" => $uploaded,
|
||||
"downloaded" => $downloaded,
|
||||
"left" => $left,
|
||||
));
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $this->getHttpUrl() . "?" . $passkey . $params);
|
||||
curl_setopt($ch, CURLOPT_PORT, intval($this->port));
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, self::ANN_USERAGENT);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
if (!is_null($this->proxy)) {
|
||||
curl_setopt($ch, CURLOPT_PROXY, $this->proxy);
|
||||
}
|
||||
|
||||
$result = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
if ($code != 200 || $result == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$response = bdecode($result);
|
||||
$peersEnc = $response["peers"];
|
||||
for ($i = 0; $i < strlen($peersEnc); $i+=6) {
|
||||
$remoteIp = long2ip(unpack("N", $peersEnc, $i)[1]);
|
||||
$remotePort = unpack("n", $peersEnc, $i + 4)[1];
|
||||
array_push($peers, new Peer($infoHash, $remoteIp, $remotePort));
|
||||
}
|
||||
|
||||
return $peers;
|
||||
}
|
||||
|
||||
public function announce($infoHash, $peerIp, $peerPort, $peerId = null, $uploaded = 0, $downloaded = 0, $left = 0) {
|
||||
if ($this->proto == "http" || $this->proto == "https") {
|
||||
return $this->doHttpAnnounce($infoHash, $peerIp, $peerPort, $peerId, $uploaded, $downloaded, $left);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Add table
Reference in a new issue