mirror of https://github.com/BOINC/boinc.git
The .torrent-generator allowing projects to dynamically generator .torrent-data for their files.
svn path=/trunk/boinc/; revision=12950
This commit is contained in:
parent
0bca6eb680
commit
e762c01b34
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
/**
|
||||
* The torrent cache and generator script takes care of dynamically generating .torrents
|
||||
* when they are requested by clients.
|
||||
* To optimize performance .torrent-objects are cached in the cache directory so that
|
||||
* on any second request they can be directly sent without re-calculating the SHA1 strings.
|
||||
*
|
||||
* A file is requested by torrent_cache.php?file=/some_file.filetype
|
||||
*
|
||||
* Symlinks outside the $fileDirectory are not allowed. Either do hardlinking or make the
|
||||
* entire $fileDirectory a symlink somewhere.
|
||||
*
|
||||
* The optional webseeds must be HTTP servers with a similar structure to $fileDirectory
|
||||
* For instance if you have a webseed called "http://burp.boinc.dk/download/" and a file
|
||||
* $fileDirectory/dir/file
|
||||
* then the webseed musst respond to queries on http://burp.boinc.dk/download/dir/file.
|
||||
*
|
||||
* Please see config.php for the setting of these variables.
|
||||
*/
|
||||
require_once("config.php");
|
||||
|
||||
function isSubDir($possibleSubDir, $parent){
|
||||
$realPossible = realpath($possibleSubDir);
|
||||
$realParent = realpath($parent);
|
||||
return (substr($realPossible, 0, strlen($realParent)) == $realParent);
|
||||
}
|
||||
|
||||
// Get the file request and do some checkups
|
||||
$file = $_GET["file"];
|
||||
if (!$file) throw new IllegalArgumentException("No file specified");
|
||||
if (strpos(urldecode($file), "..")!==false) throw new IllegalArgumentException("Cannot use '..' in path");
|
||||
$file = $fileDirectory.$file;
|
||||
if (($fileModTime = filemtime($file)) === false) throw new IllegalArgumentException("File does not exist");
|
||||
if (!$fileFilter->isValid($file)) throw new IllegalArgumentException("File was not accepted by the server for tracking.");
|
||||
|
||||
// Everything's fine let's lookup the .torrent in the cache if needed:
|
||||
$cache_args = "file=".$file."&modtime=".$fileModTime;
|
||||
$cacheddata=get_cached_data(TORRENT_CACHE_TTL,$cache_args);
|
||||
if ($cacheddata){ //If we have got the data in cache
|
||||
$torrent = unserialize($cacheddata); // use the cached data
|
||||
} else { //if not do queries etc to generate new data
|
||||
for ($i=0; $i<sizeof($webseeds);$i++){
|
||||
$realWebseeds[] = $webseeds[$i].substr($file, strlen($fileDirectory));
|
||||
}
|
||||
|
||||
$torrent = new Torrent($file, $trackerURL, $realWebseeds);
|
||||
$torrent->ensureSHA1Loaded();
|
||||
db_init();
|
||||
$torrent->register();
|
||||
set_cache_data(serialize($torrent),$cache_args); //save data in cache
|
||||
};
|
||||
|
||||
header("Content-type: application/x-bittorrent");
|
||||
header("Content-Disposition: attachment; filename=\"".basename($file).".torrent\"");
|
||||
|
||||
echo $torrent->toEncoded();
|
||||
?>
|
Loading…
Reference in New Issue