Bravo List
Register
Go Back   > Bravo List > Source Code > Trackers > Torrent Strike
Reply
  #1  
Old 11-07-14, 10:33
kOni's Avatar
kOni kOni is offline
Senior Member
 
Join Date: Apr 2012
P2P
Posts: 17
Default anounce.php for torrentstrike
hello! i have some problems with announce.php and i want somebody to help me. I'll pay of course.
Reply With Quote
  #2  
Old 11-07-14, 17:08
stoner's Avatar
stoner stoner is offline
Senior Member
 
Join Date: May 2011
P2P
Posts: 17
Default
What kind of problem do you have.

I have never worked on that source code, but pretty sure I can help if needed.

Just need more information on the issue you are having.
Reply With Quote
  #3  
Old 11-07-14, 21:39
kOni's Avatar
kOni kOni is offline
Senior Member
 
Join Date: Apr 2012
P2P
Posts: 17
Default
Quote:
Originally Posted by stoner View Post
What kind of problem do you have.

I have never worked on that source code, but pretty sure I can help if needed.

Just need more information on the issue you are having.



My problem is that if someone uploads several torrents 4-5 in the row, gets an error "failure missing key" in some torrents, or some times "invalid info hash".
This is my announce.php is the default anounce that torrentstrike fully modded source has.

PHP Code:
<?php

ob_start
("ob_gzhandler");

require_once(
"include/bittorrent.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");
    print(
$x);
}

$req "info_hash:peer_id:!ip:port:uploaded:downloaded:left:!event:!passkey";
foreach (
explode(":"$req) as $x)
{
    if (
$x[0] == "!")
    {
        
$x substr($x1);
        
$opt 1;
    }
    else
        
$opt 1;
    if (!isset(
$_GET[$x]))
    {
        if (!
$opt)
            
err("missing key");
        continue;
    }
    
$GLOBALS[$x] = unesc($_GET[$x]);
}

if (
ENA_PASSKEY && (
        
strlen($passkey) != 32 && 
        @
mysql_num_rows(@mysql_query("SELECT id FROM users WHERE passkey=" sqlesc($passkey))) != 1))
    
err("Invalid passkey! Re-download the .torrent from $BASEURL ($passkey)");
$passkey=sqlesc($passkey);    

foreach (array(
"info_hash","peer_id") as $x)
{
    if (
strlen($GLOBALS[$x]) != 20)
        
err("Invalid $x (" strlen($GLOBALS[$x]) . " - " urlencode($GLOBALS[$x]) . ")");
}

//if (empty($ip) || !preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $ip))
    
$ip getip();

$port $port;
$downloaded $downloaded;
$uploaded $uploaded;
$left $left;

$rsize 50;
foreach(array(
"num want""numwant""num_want") as $k)
{
    if (isset(
$_GET[$k]))
    {
        
$rsize $_GET[$k];
        break;
    }
}


   
$agent $_SERVER["HTTP_USER_AGENT"];
  

// Deny access made with a browser...
//if (ereg("^Mozilla\\/", $agent) || ereg("^Opera\\/", $agent) || ereg("^Links ", $agent) || ereg("^Lynx\\/", $agent))
//    err("torrent not registered with this tracker");

if (!$port || $port 0xffff)
    
err("invalid port");

if (!isset(
$event))
    
$event "";

$seeder = ($left == 0) ? "yes" "no";




$res mysql_query("SELECT id, name, category, banned, free, 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 not registered with this tracker");

$torrentid $torrent["id"];
$torrentname $torrent["name"];
$torrentcategory $torrent["category"];

$fields "seeder, peer_id, ip, port, uploaded, downloaded, userid";

$numpeers $torrent["numpeers"];
$limit "";
if (
$numpeers $rsize)
    
$limit "ORDER BY RAND() LIMIT $rsize";
$res mysql_query("SELECT $fields FROM peers WHERE torrent = $torrentid AND connectable = 'yes' $limit");

$resp 'd' benc_str('interval') . 'i' $announce_interval 'e' .  benc_str('peers') . (($compact intval($_GET['compact'])) == 1  ?'':'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;
    }
    if(
$compact)
    {
        
$peer_ip explode('.'$row["ip"]);
        
$plist .= pack("C*"$peer_ip[0], $peer_ip[1], $peer_ip[2], $peer_ip[3]). pack("n*", (int)$row["port"]);
    } else {
        
$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 .= ($compact benc_str($plist):'e'). 'e';

$selfwhere "torrent = $torrentid AND ". (ENA_PASSKEY ?"passkey=$passkey 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;
    }
}

//// Up/down stats ////////////////////////////////////////////////////////////

if (!isset($self))
{
    if(
ENA_PASSKEY && ENA_PASSKEYLIMITCONNECTIONS)
    {
$valid = @mysql_fetch_row(@mysql_query("SELECT COUNT(id) FROM peers  WHERE torrent=$torrentid AND passkey='" sqlesc($passkey) . "';"));
        
        if (
$valid >= && $seeder == 'no'
            
err("Connection limit exceeded! You may only leech from one location at a time.");
        if ((
$valid >= && $seeder == 'yes') || ($valid===FALSE)) 
            
err("Connection limit exceeded!");
    }
    
$rz mysql_query("SELECT id, uploaded, downloaded, class, parked,  donor, downloadpos FROM users WHERE enabled = 'yes' ". (ENA_PASSKEY ?  "AND passkey=$passkey ":''). "ORDER BY last_access DESC LIMIT 1") or  err("Tracker error 2");
//    if ($MEMBERSONLY && mysql_num_rows($rz) == 0)
//        err("Unrecognized host ($ip). Please go to $BASEURL to sign-up or login.");
    
$az mysql_fetch_assoc($rz);
    
$userid $az["id"];

///    if ($left > 0 && $az["class"] < UC_VIP)
if ($az["class"] < UC_VIP && $wait_time)
{
$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 0;
elseif (
$ratio 0.65 || $gigs 6.5)   $wait 0;
elseif (
$ratio 0.8 || $gigs 8)  $wait 0;
elseif (
$ratio 0.95 || $gigs 9.5)   $wait 0;
else 
$wait 0;
if ((
$elapsed $wait) && ($seeder == 'no'))
err("Not authorized. (" . ($wait$elapsed) . "h) - READ THE FAQ!");
}
if (
$az["downloadpos"] == "no")
              
err("You are not allowed to download!");
}
else
{        
$start $self["ts"];  //last_action
$end time();  //now time
if ($end $start 30)  //~30 sec for local connection, ~60 sec for internet connection
   
err("Sorry, minimum announce interval = 30 sec.");
$upthis max(0$uploaded $self["uploaded"]);        
$downthis max(0$downloaded $self["downloaded"]);

    if (
$upthis || $downthis 0)
        
mysql_query("UPDATE users SET uploaded = uploaded + $upthis".  ($torrent['free']=='no'?", downloaded = downloaded + $downthis ":' ').  "WHERE id=$userid") or err("Tracker error 3");
}

///////////////////////////////////////////////////////////////////////////////
$dt gmtime() - 180;
$dt sqlesc(get_date_time($dt));
function 
portblacklisted($port)
{
    
// direct connect
    
if ($port >= 411 && $port <= 413) return true;

    
// bittorrent
    
if ($port >= 6881 && $port <= 6889) return true;

    
// kazaa
    
if ($port == 1214) return true;

    
// gnutella
    
if ($port >= 6346 && $port <= 6347) return true;

    
// emule
    
if ($port == 4662) return true;

    
// winmx
    
if ($port == 6699) return true;

    return 
false;
}

$updateset = array();

if (
$event == "stopped")
{
    if (isset(
$self))
    {
        
mysql_query("UPDATE snatched SET seeder = 'no', connectable='no' WHERE torrent = $torrentid AND userid = $userid");
        
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 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 = @fsockopen($ip$port$errno$errstr5);
   if (!
$sockres)
     
$connectable "no";
   else
  {
    
$connectable "yes";
    @
fclose($sockres);
  }
    
$downloaded2=$downloaded $self["downloaded"];
    
$uploaded2=$uploaded $self["uploaded"];
     
mysql_query("UPDATE snatched SET uploaded = uploaded+$uploaded2,  downloaded = downloaded+$downloaded2, port = $port, connectable =  '$connectable', agent= " sqlesc($agent) . ", to_go = $left,  last_action = $dt, seeder = '$seeder' WHERE torrent = $torrentid AND  userid = $userid");
        
$starttime $self['ts'];
        
mysql_query("UPDATE peers SET uploaded = $uploaded, downloaded =  $downloaded, to_go = $left, last_action = NOW(), seeder = '$seeder'"
            
. ($seeder == "yes" && $self["seeder"] != $seeder ", 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, your account is parked! Please read the FAQ!");
        if (
portblacklisted($port))
            
err("Port $port is blacklisted.");
        else
        {
            
$sockres = @fsockopen($ip$port$errno$errstr5);
            if (!
$sockres)
                
$connectable "no";
            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,  port, startdat, last_action, agent, torrent_name, torrent_category)  VALUES ($torrentid$torrentid$userid$port$dt$dt, " .  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$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");

benc_resp_raw($resp);

?>
Reply With Quote
Reply

Tags
anouncephp , torrentstrike

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump



All times are GMT +2. The time now is 12:41. vBulletin skin by ForumMonkeys. Powered by vBulletin® Version 3.8.11 Beta 3
Copyright ©2000 - 2018, vBulletin Solutions Inc.