how to remove passkey ?

Started by Daniel, July 10, 2012, 09:58:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Daniel

okay mate i guess i jsut have to deal with the normal one i have and figure out some stuff on that one :)

Mindless

No need to see any code here, if you take a passkey from Tbdev code you screw the tracker, the users are tied to that on announce, so you cannot track torrents, its no designed as a public tracker, what your asking for is not realistic without modifying a lot of files.

Daniel

#1
in attachment i have set the announce.php from TBDEV 2009 Final  the latest revsion i can't remember wich one it is,
and in code below is the V1 announce.php code i attached my current announce.php  so you could see the diffrent as i dont know how to do it  i want V1 as a public tracker as V1 is more secured than a normal unmoddet Version
please only download announce2  in the attachment as announce in attachment is the same as here un less u want both :)

<?php
/**
 *   http://btdev.net:1337/svn/test/Installer09_Beta
 *   Licence Info: GPL
 *   Copyright (C) 2010 BTDev Installer v.2
 *   A bittorrent tracker source based on TBDev.net/tbsource/bytemonsoon.
 *   Project Leaders: Mindless,putyn.
 **/
error_reporting(0);
////////////////// GLOBAL VARIABLES ////////////////////////////
$TBDEV['baseurl'] = 'web.sourcebook.eu';
$TBDEV['announce_interval'] = 60 30;
$TBDEV['connectable_check'] = 1;
$TBDEV['max_slots'] = 1//1=On 0=Off
$TBDEV['user_slots'] = 20;
$TBDEV['p_user_slots'] = 30;
$TBDEV['user_ratio1_slots'] = 2;
$TBDEV['user_ratio2_slots'] = 3;
$TBDEV['user_ratio3_slots'] = 5;
$TBDEV['user_ratio4_slots'] = 10;
define('TIME_NOW'time());
define ('UC_USER'0);
define ('UC_POWER_USER'1);
define ('UC_VIP'2);
define ('UC_UPLOADER'3);
define ('UC_MODERATOR'4);
define ('UC_ADMINISTRATOR'5);
define ('UC_SYSOP'6);
// DB setup
$TBDEV['mysql_host'] = "localhost";
$TBDEV['mysql_user'] = "";
$TBDEV['mysql_pass'] = "";
$TBDEV['mysql_db']   = "";
require_once(
"include/class/class_cache.php");
$mc1 = NEW CACHE();
$TBDEV['expires']['user_passkey'] = 900// 900 = 15 min
$TBDEV['cache'] = dirname(__FILE__).DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR;
////////////////// GLOBAL VARIABLES ////////////////////////////
// DO NOT EDIT BELOW UNLESS YOU KNOW WHAT YOU'RE DOING!!
   //=== bad stuff let's just kill this right off
   
$agent $_SERVER["HTTP_USER_AGENT"];
   
$detectedclient $_SERVER["HTTP_USER_AGENT"];
   
$headers getallheaders();
   if (isset(
$headers['Cookie']) || isset($headers['Accept-Language']) || isset($headers['Accept-Charset']))
   exit(
'It takes 46 muscles to frown but only 4 to flip \'em the bird.');
   
/////////////////////// FUNCTION DEFS ///////////////////////////////////
   
   
function crazyhour_announce() {
   global 
$TBDEV;
   
$crazyhour_filename $TBDEV['cache'].'crazy_hour.txt';
   
$crazyhour_cache fopen($crazyhour_filename,'r+');
   
$crazyhour_var fread($crazyhour_cachefilesize($crazyhour_filename));
   
fclose($crazyhour_cache);
   
   if (
$crazyhour_var >= TIME_NOW && $crazyhour_var TIME_NOW 3600// is crazyhour
       
return true;
       
    elseif (
$crazyhour_var 3600 TIME_NOW) {   // crazyhour over
        
$crazyhour['crazyhour_new']       = mktime(235959date('m'), date('d'), date('y'));
        
$crazyhour['crazyhour']['var']    = mt_rand($crazyhour['crazyhour_new'], ($crazyhour['crazyhour_new'] + 86400));
        
$fp fopen($crazyhour_filename'w');
        
fwrite($fp$crazyhour['crazyhour']['var']);
        
fclose($fp); 
        
/** log, shoutbot **/
        //$text = 'Next Crazyhour is at '.$crazyhour['crazyhour'];
        //mysql_query('INSERT INTO sitelog (added, txt) VALUES('.TIME_NOW.', '.sqlesc($text).')') or err("Crazyhour Err");     
        //mysql_query('INSERT INTO shoutbox (userid, date, text, text_parsed) VALUES (2, '.TIME_NOW.', '.sqlesc($text).', '.sqlesc($text).')') or err("Crazyhour Err 1");
        
return false;
        }
        else
        return 
false;
        }
      // crazyhour end

function whitelist($useragent$agentversion)
{
switch ($useragent)
{
case '-UT':
if($agentversion >= 1760 || in_array($agentversion, array(1610180)))
$result true;
break;
case '-AZ':
if($agentversion >= 2504)
$result true;
break;
case '-lt':
$result true;
break;
case '-T03':
$result true;
break;
case '-TR':
if($agentversion >= 960)
$result true;
break;
case 'M6-':
if($agentversion >= 603)
$result true;
break;
case '-KT':
if($agentversion >= 2240)
$result true;
break;
case '-BR':
if($agentversion >= 332)
$result true;
break;
case '-DE':
if($agentversion >= 570)
$result true;
break;
case '-HL':
if($agentversion >= 302)
$result true;
break;
default:
$result false;
}
return $result;
}

function 
auto_enter_cheater($userid$rate$upthis$diff$torrentid$client$ip$last_up)
{
mysql_query("INSERT INTO cheaters (added, userid, client, rate, beforeup, upthis, timediff, userip, torrentid) VALUES(" sqlesc(TIME_NOW) . ", " sqlesc($userid) . ", " sqlesc($client) . ", " sqlesc($rate) . ", " sqlesc($last_up) . ", " sqlesc($upthis) . ", " sqlesc($diff) . ", " sqlesc($ip) . ", " sqlesc($torrentid) . ")") or err("Cheater Err");
}

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" );

    if ( 
$_SERVER['HTTP_ACCEPT_ENCODING'] == 'gzip' )
    {
        
header"Content-Encoding: gzip" );
        echo 
gzencode$x9FORCE_GZIP );
    }
    else
        echo 
$x ;
}

function 
benc($obj) {
if (!is_array($obj) || !isset($obj["type"]) || !isset($obj["value"]))
return;
$c $obj["value"];
switch ($obj["type"]) {
case "string":
return benc_str($c);
case "integer":
return benc_int($c);
case "list":
return benc_list($c);
case "dictionary":
return benc_dict($c);
default:
return;
}
}

function 
benc_str($s) {
return strlen($s) . ":$s";
}

function 
benc_int($i) {
return "i" $i "e";
}

function 
benc_list($a) {
$s "l";
foreach ($a as $e) {
$s .= benc($e);
}
$s .= "e";
return $s;
}

function 
benc_dict($d) {
$s "d";
$keys array_keys($d);
sort($keys);
foreach ($keys as $k) {
$v $d[$k];
$s .= benc_str($k);
$s .= benc($v);
}
$s .= "e";
return $s;
}

function 
hash_where($name$hash) {
    
$shhash preg_replace('/ *$/s'""$hash);
    return 
"($name = " sqlesc($hash) . " OR $name = " sqlesc($shhash) . ")";
}

function 
sqlesc($x) {
    return 
"'".mysql_real_escape_string($x)."'";
}

function 
portblacklisted($port)
{
    
//=== new portblacklisted ....... ==> direct connect 411 ot 413,  bittorrent 6881 to 6889, kazaa 1214, gnutella 6346 to 6347, emule 4662, winmx 6699, IRC bot based trojans 65535
    
$portblacklisted = array(4114124136881 ,68826883688468856886688768891214634663474662669965535);
        if (
in_array($port$portblacklisted)) return true;

    return 
false;
}
/////////////////////// FUNCTION DEFS END ///////////////////////////////
$parts = array();
if( !isset(
$_GET['passkey']) OR !preg_match('/^[0-9a-fA-F]{32}$/i'$_GET['passkey'], $parts) ) 
err("Invalid Passkey");
else
$GLOBALS['passkey'] = $parts[0];

foreach (array(
"info_hash","peer_id","event","ip","localip") as $x
{
if(isset(
$_GET["$x"]))
$GLOBALS[$x] = "" $_GET[$x];
}

foreach (array(
"port","downloaded","uploaded","left") as $x)
{
$GLOBALS[$x] = $_GET[$x];
}

foreach (array(
"passkey","info_hash","peer_id","port","downloaded","uploaded","left") as $x)

if (!isset(
$x)) err("Missing key: $x");

foreach (array(
"info_hash","peer_id") as $x)

if (
strlen($GLOBALS[$x]) != 20err("Invalid $x (" strlen($GLOBALS[$x]) . " - " urlencode($GLOBALS[$x]) . ")");

unset(
$x);

$info_hash bin2hex($info_hash);

$ip $_SERVER['REMOTE_ADDR'];

$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;
}
}

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

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

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

if (!(
$db = @mysql_connect ($TBDEV['mysql_host'], $TBDEV['mysql_user'], $TBDEV['mysql_pass']) AND $select = @mysql_select_db($TBDEV['mysql_db'], $db)))
err('Please call back later');

$useragent substr($peer_id12);
$agentversion substr($peer_id34);
//===  make white list and ban others
if(($useragent == "UT" && $agentversion 1800) || ($useragent == "AZ" && $agentversion >= 3000 || $useragent == "AZ" && $agentversion 2500) || ($useragent == "UT" && $agentversion 2000) || ($useragent == "T" && $agentversion 0317) || ($useragent == "BC" && $agentversion 0070) || ($useragent == "BS" && $agentversion 0412) || ($useragent == "LH" && $agentversion 3200) || ($useragent == "QB" && $agentversion 1000) || ($useragent == "HL" && $agentversion 0290))
err("$agent is banned. Please read the FAQ for a list of allowed clients!");

$white_list = array("AZ""UT""TO""BC""BS""LH""QB""HL""T""03");
if (!
in_array($useragent$white_list))
err("$agent is banned. Please read the FAQ for a list of allowed clients!");

$user $mc1->get_value('u_passkey_'.$passkey);
if (
$user === false) {
$user_query mysql_query("SELECT id, uploaded, downloaded, class, downloadpos, parked, free_switch, highspeed, enabled FROM users WHERE passkey=".sqlesc($passkey)) or err("Tracker error 2");
if (
mysql_num_rows($user_query) != 1)
err("Unknown passkey. Please redownload the torrent from {$TBDEV['baseurl']}.");
$user mysql_fetch_assoc($user_query);
        
$user['id']         = (int)$user['id'];
        
$user['uploaded']   = (float)$user['uploaded'];
        
$user['downloaded'] = (float)$user['downloaded'];
        
$user['class']      = (int)$user['class'];
        
$user['downloadpos']      = (int)$user['downloadpos'];
        
$user['free_switch']  = (int)$user['free_switch'];
        
$mc1->cache_value('u_passkey_'.$passkey$user$TBDEV['expires']['user_passkey']);
}

if(
$user['enabled'] == 'no')
err('Permission denied, you\'re not enabled');

$res mysql_query("SELECT torrents.id, torrents.banned, torrents.free, torrents.seeders + torrents.leechers AS numpeers, torrents.added AS ts, freeslots.free AS freeslot, freeslots.double AS doubleslot FROM torrents LEFT JOIN freeslots ON (torrents.id=freeslots.tid AND freeslots.uid=".sqlesc($user['id']).") WHERE info_hash = ".sqlesc($info_hash));//" . hash_where("info_hash", $info_hash));
$torrent mysql_fetch_assoc($res);
if (!
$torrent)
err("torrent not registered with this tracker CODE 2");

$torrentid $torrent["id"];

$fields 'seeder, peer_id, ip, port, uploaded, downloaded, userid, ('.TIME_NOW.' - last_action) AS announcetime, last_action AS ts';

$numpeers $torrent["numpeers"];
$limit "";
if (
$numpeers $rsize)
$limit "ORDER BY RAND() LIMIT $rsize";
// If user is a seeder, then only supply leechers.
// This helps with the zero upload cheat, as it doesn't supply anyone who has
// a full copy.
$wantseeds "";
if ( 
$seeder == 'yes' )
$wantseeds "AND seeder = 'no'";
$res mysql_query"SELECT $fields FROM peers WHERE torrent = $torrentid AND connectable = 'yes' $wantseeds $limit) or err'peers query failure' );
//////////////////// START NEW COMPACT MODE/////////////////////////////
if($_GET['compact'] != 1)
{
$resp "d" benc_str("interval") . "i" $TBDEV['announce_interval'] . "e" benc_str("private") . 'i1e' benc_str("peers") . "l";
}
else
{
$resp "d" benc_str("interval") . "i" $TBDEV['announce_interval'] ."e" benc_str("private") . 'i1e'benc_str("min interval") . "i" 300 ."e5:"."peers" ;
}

$peer = array();
$peer_num 0;
while (
$row mysql_fetch_assoc($res))
{
if(
$_GET['compact'] != 1)
{
$row["peer_id"] = str_pad($row["peer_id"], 20);
if (
$row["peer_id"] === $peer_id)
{
$self $row;
continue;
}
$resp .= "d" .
benc_str("ip") . benc_str($row["ip"]);
if (!
$_GET['no_peer_id']) {
$resp .= benc_str("peer id") . benc_str($row["peer_id"]);
}
$resp .= benc_str("port") . "i" $row["port"] . "e" "e";
}
else
{
$peer_ip explode('.'$row["ip"]);
$peer_ip pack("C*"$peer_ip[0], $peer_ip[1], $peer_ip[2], $peer_ip[3]);
$peer_port pack("n*", (int)$row["port"]);
$time intval((TIME_NOW 7680) / 60);
if(
$_GET['left'] == 0)
{
$time += 128;
}
$time pack("C"$time);
$peer[] = $time $peer_ip $peer_port;
$peer_num++;
}
}
if (
$_GET['compact']!=1)
$resp .= "ee";
else
{
$o "";
for(
$i=0;$i<$peer_num;$i++)
{
$o .= substr($peer[$i], 16);
}
$resp .= strlen($o) . ':' $o 'e';
}
$selfwhere "torrent = $torrentid AND " hash_where("peer_id"$peer_id);
///////////////////////////// END NEW COMPACT MODE////////////////////////////////
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))
{
$valid = @mysql_fetch_row(@mysql_query("SELECT COUNT(*) FROM peers WHERE torrent=$torrentid AND passkey=" sqlesc($passkey)));
if (
$valid[0] >= && $seeder == 'no'err("Connection limit exceeded! You may only leech from one location at a time.");
if (
$valid[0] >= && $seeder == 'yes'err("Connection limit exceeded!");
}
else
{
$upthis max(0$uploaded $self["uploaded"]);
$downthis max(0$downloaded $self["downloaded"]);
  
$upspeed = ($upthis $upthis $self["announcetime"] : 0);
  
$downspeed = ($downthis $downthis $self["announcetime"] : 0);
  
$announcetime = ($self["seeder"] == "yes" "seedtime = seedtime + $self[announcetime]"leechtime = leechtime + $self[announcetime]");
  
//==sitepot
  
$Pot_query mysql_query("SELECT value_u FROM avps WHERE arg = 'sitepot'") or err("Sitepot Err");
  
$SitePot mysql_fetch_assoc($Pot_query);
  
///////////////////happyhour by putyn
  
$happy mysql_query"SELECT id, multiplier from happyhour where userid=" sqlesc$userid ) . " AND torrentid=" sqlesc$torrentid ) . " " );
  
$happyhour mysql_num_rows$happy ) == false true;
  
$happy_multi mysql_fetch_row$happy );
  
$multiplier $happy_multi["multiplier"];
  if ( 
$happyhour ) {
  
$upthis $upthis $multiplier;
  
$downthis 0;
  }

   
//==freeleech/doubleupload system by ezero - recoded block by putyn
   
$q mysql_query("SELECT * FROM events ORDER BY startTime DESC LIMIT 1") or err("Events Err");
 $a mysql_fetch_assoc($q);
 if($a["startTime"] < TIME_NOW && $a["endTime"] > TIME_NOW)
 {
 if($a['freeleechEnabled'] == 1)
 $downthis 0;
 if($a['duploadEnabled'] == 1){
 $upthis *=2;
 $downthis 0;
 }
 if($a['hdownEnabled'] == 1){
 $downthis $downthis 2;
 }
 }
   
   if (
$upthis || $downthis 0)
   {
   
$isfree =   '';
   
$isdouble '';
   include(
"cache/free_cache.php");
   if (isset(
$free))
   {
   foreach (
$free as $fl) {
   
$isfree =   ($fl['modifier'] == || $fl['modifier'] == 3) && $fl['expires'] > TIME_NOW;
   
$isdouble = ($fl['modifier'] == || $fl['modifier'] == 3) && $fl['expires'] > TIME_NOW;
   }
   }
   
   
$crazyhour crazyhour_announce();
   if (!(
$crazyhour || $user['free_switch'] != || $isfree || $torrent['free'] != || $SitePot['value_u'] >= 10000 || $torrent['vip'] != || ($torrent['freeslot'] != 0)))
   
$updq[0] = "downloaded = downloaded + $downthis";
   if (
$crazyhour// crazyhour
   
$updq[1]="uploaded = uploaded + ($upthis*3)";
   else
   
$updq[1] = "uploaded = uploaded + ".(($torrent['doubleslot'] != || $isdouble) ? ($upthis*2) : $upthis);
   
$udq=implode(',',$updq);
   
mysql_query("UPDATE users SET $udq WHERE id=".$user['id']) or err('Tracker error 3');
   }

      
//=== abnormal upload detection
if ($user['highspeed'] == 'no' && $upthis 103872)
{
      
//=== Work out difference
      
$diff = (TIME_NOW $self['ts']);
      
$rate = ($upthis / ($diff 1));
      
$last_up $user['uploaded'];
      
//=== about 1 MB/s
      
if ($rate 103872
      {
  auto_enter_cheater($user['id'], $rate$upthis$diff$torrentid$agent$ip$last_up );
      }
//=== end abnormal upload detection
      
}

///////////////////////////////////////////////////////////////////////////////
 
if (portblacklisted($port))
{
 err("Port $port is blacklisted.");
}
elseif ( $TBDEV['connectable_check'] )
{
$sockres = @fsockopen($ip$port$errno$errstr5);
if (!$sockres)
$connectable "no";
else
{
$connectable "yes";
@fclose($sockres);
}
}

 
$finished $finished1 '';
 
$updateset = array();
 
 if (isset(
$self) && $event == "stopped") {
 
mysql_query("DELETE FROM peers WHERE $selfwhere") or err("Delete Err");

 
//===09 sir_snuggles hit and run
 
$res_snatch mysql_query("SELECT seedtime, uploaded, downloaded, finished, start_date AS start_snatch FROM snatched WHERE torrentid = $torrentid AND userid = {$user['id']}") or err('Snatch Error 1');
 
$a mysql_fetch_array($res_snatch);
 
//=== only run the function if the ratio is below 1
 
if( ($a['uploaded'] + $upthis) < ($a['downloaded'] + $downthis) && $a['finished'] == 'yes')
 {
 
$HnR_time_seeded = ($a['seedtime'] + $self['announcetime']);
 
//=== get times per class
 
switch (true)
 { 
 
//=== user
 
case ($user['class'] < UC_POWER_USER):
 
$days_3 2*86400//== 2 days
 
$days_14 2*86400//== 2 days
 
$days_over_14 86400//== 1 day
 
break;
 
//=== poweruser
 
case ($user['class'] == UC_POWER_USER):
 
$days_3 129600//== 36 hours
 
$days_14 129600//== 36 hours
 
$days_over_14 64800//== 18 hours
 
break;
 
//=== vip / donor?
 
case ($user['class'] == UC_VIP):
 
$days_3 129600//== 36 hours
 
$days_14 86400//== 24 hours
 
$days_over_14 43200//== 12 hours
 
break;
 
//=== uploader / staff and above (we don't need this for uploaders now do we?
 
case ($user['class'] >= UC_UPLOADER):
 
$days_3 43200//== 12 hours
 
$days_14 43200//== 12 hours
 
$days_over_14 43200//== 12 hours
 
break;
 }

 switch(
true
 {
 case ((
$a['start_snatch'] - $torrent['ts']) < 7*86400):
 
$minus_ratio = ($days_3 $HnR_time_seeded);
 break;
 case ((
$a['start_snatch'] - $torrent['ts']) < 21*86400):
 
$minus_ratio = ($days_14 $HnR_time_seeded);
 break;
 case ((
$a['start_snatch'] - $torrent['ts']) >= 21*86400):
 
$minus_ratio = ($days_over_14 $HnR_time_seeded);
 break;
 }
 
$hit_and_run = (($minus_ratio && ($a['uploaded'] + $upthis) < ($a['downloaded'] + $downthis)) ? ", seeder='no', hit_and_run= '".TIME_NOW."'" ", hit_and_run = '0'");
 } 
//=== end if not 1:1 ratio
 
else
 
$hit_and_run ", hit_and_run = '0'";
 
//=== end hit and run
 
 
if (mysql_affected_rows()) {
 
$updateset[] = ($self["seeder"] == "yes" "seeders = seeders - 1" "leechers = leechers - 1");
 
mysql_query("UPDATE snatched SET ip = ".sqlesc($ip).", port = $port, connectable = '$connectable', uploaded = uploaded + $upthis, downloaded = downloaded + $downthis, to_go = $left, upspeed = $upspeed, downspeed = $downspeed$announcetime, last_action = ".TIME_NOW.", seeder = '$seeder', agent = ".sqlesc($agent).$hit_and_run WHERE torrentid = $torrentid AND userid = {$user['id']}") or err("SL Err 1");
 }
 } elseif (isset(
$self)) {

 if (
$event == "completed") {
 
$updateset[] = "times_completed = times_completed + 1";
 
$finished ", finishedat = ".TIME_NOW."";
 
$finished1 ", complete_date = ".TIME_NOW.", finished = 'yes'";
 }

 
mysql_query("UPDATE peers SET ip = ".sqlesc($ip).", port = $port, connectable = '$connectable', uploaded = $uploaded, downloaded = $downloaded, to_go = $left, last_action = ".TIME_NOW.", seeder = '$seeder', agent = ".sqlesc($agent).$finished WHERE $selfwhere") or err("PL Err 1");

 if (
mysql_affected_rows()) {
 if (
$seeder <> $self["seeder"])
 
$updateset[] = ($seeder == "yes" "seeders = seeders + 1, leechers = leechers - 1" "seeders = seeders - 1, leechers = leechers + 1");
 
$anntime "timesann = timesann + 1";
 
mysql_query("UPDATE snatched SET ip = ".sqlesc($ip).", port = $port, connectable = '$connectable', uploaded = uploaded + $upthis, downloaded = downloaded + $downthis, to_go = $left, upspeed = $upspeed, downspeed = $downspeed$announcetime, last_action = ".TIME_NOW.", seeder = '$seeder', agent = ".sqlesc($agent).$finished1$anntime WHERE torrentid = $torrentid AND userid = {$user['id']}") or err("SL Err 2");
 }
 } else {
 if (
$user["parked"] == "yes")
 
err("Your account is parked! (Read the FAQ)");
 elseif (
$user["downloadpos"] == OR $user["downloadpos"] > )
 
err("Your downloading priviledges have been disabled! (Read the rules)");

 
mysql_query("INSERT INTO peers (torrent, userid, peer_id, ip, port, connectable, uploaded, downloaded, to_go, started, last_action, seeder, agent, downloadoffset, uploadoffset, passkey) VALUES ($torrentid{$user['id']}, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, '$connectable', $uploaded$downloaded$left, ".TIME_NOW.", ".TIME_NOW.", '$seeder', ".sqlesc($agent).", $downloaded$uploaded, ".sqlesc($passkey).")") or err("PL Err 2");

 if (
mysql_affected_rows()) {
 
$updateset[] = ($seeder == "yes" "seeders = seeders + 1" "leechers = leechers + 1");
 
$anntime "timesann = timesann + 1";
 
mysql_query("UPDATE snatched SET ip = ".sqlesc($ip).", port = $port, connectable = '$connectable', to_go = $left, last_action = ".TIME_NOW.", seeder = '$seeder', agent = ".sqlesc($agent).", $anntime, hit_and_run = '0', mark_of_cain = 'no' WHERE torrentid = $torrentid AND userid = {$user['id']}") or err("SL Err 3");
 if (!
mysql_affected_rows() && $seeder == "no")
 
mysql_query("INSERT INTO snatched (torrentid, userid, peer_id, ip, port, connectable, uploaded, downloaded, to_go, start_date, last_action, seeder, agent) VALUES ($torrentid{$user['id']}, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, '$connectable', $uploaded$downloaded$left, ".TIME_NOW.", ".TIME_NOW.", '$seeder', ".sqlesc($agent).")") or err("SL Err 4");
 }
 }

if (
$seeder == "yes")
{
if ($torrent["banned"] != "yes")
$updateset[] = "visible = 'yes'";
$updateset[] = "last_action = ".TIME_NOW;
}

if (
count($updateset))
mysql_query("UPDATE torrents SET ".join(","$updateset)." WHERE id = $torrentid");

benc_resp_raw($resp);
?>


[attachment deleted by admin]