multiTracker

Тема в разделе "Модификации для TorrentPier (архив)", создана пользователем TheMist36, 24 ноя 2011.

  1. TheMist36

    TheMist36 Пользователь

    Сообщения:
    5
    Симпатии:
    6
    Помогите переделать файл functions_multi_tracker.php

    знаю что в новой версии к базе запросы DB() а в старой $db надо сменить но не помогло что ещё не пойму ну "руки мои" понятно, а что и где ещё помогите плиз.

    Код:
    <?php
    /**
    *
    * @author lEx0
    * @version 1.0.0
    * @package TorrentPier
    * @name TorrentPier Multi Tracker Mod
    *
    */
    
    function httpPost($ip=null,$port=80,$uri=null,$content=null) {
        if (empty($ip))        { return false; }
        if (!is_numeric($port)) { return false; }
        if (empty($uri))        { return false; }
        //if (empty($content))    { return false; }
    
        // generate headers in array.
        $t  = array();
        $t[] = 'GET ' . $uri . ' HTTP/1.1';
        //$t[] = 'Content-Type: text/html';
        $t[] = 'Host: ' . $ip . ':' . $port;
        $t[] = 'User-Agent: uTorrent/1850(17091)';
        $t[] = 'Accept-Encoding: gzip';
        //$t[] = 'Content-Length: ' . strlen($content);
        //$t[] = 'Connection: close';
        $t  = implode("\r\n",$t) . "\r\n\r\n" . $content;
        //
        // Open socket, provide error report vars and timeout of 10
        // seconds.
        //
        $fp  = @fsockopen($ip,$port,$errno,$errstr,5);
        //
        // Send headers and content.
        //
        if (!@fwrite($fp,$t)) {
            @fclose($fp);
            return false;
            }
        //
        // Read all of response into $rsp and close the socket.
        //
        $rsp = '';
        while(!feof($fp)) { $rsp .= fgets($fp,8192); }
        fclose($fp);
        //
        // Call parseHttpResponse() to return the results.
        //
        return parseHttpResponse($rsp);
        }
    
    //
    // Accepts provided http content, checks for a valid http response,
    // unchunks if needed, returns http content without headers on
    // success, false on any errors.
    //
    function parseHttpResponse($content=null) {
        if (empty($content)) { return false; }
        // split into array, headers and content.
        $hunks = explode("\r\n\r\n",trim($content));
        if (!is_array($hunks) or count($hunks) < 2) {
            return false;
            }
        $header  = $hunks[count($hunks) - 2];
        $body    = $hunks[count($hunks) - 1];
        $headers = explode("\n",$header);
        unset($hunks);
        unset($header);
        if (!validateHttpResponse($headers)) { return false; }
        if (in_array('Transfer-Coding: chunked',$headers)) {
            return trim(unchunkHttpResponse($body));
            } else {
            return trim($body);
            }
        }
    
    //
    // Validate http responses by checking header.  Expects array of
    // headers as argument.  Returns boolean.
    //
    function validateHttpResponse($headers=null) {
        if (!is_array($headers) or count($headers) < 1) { return false; }
        switch(trim(strtolower($headers[0]))) {
            case 'http/1.0 100 ok':
            case 'http/1.0 200 ok':
            case 'http/1.1 100 ok':
            case 'http/1.1 200 ok':
                return true;
            break;
            }
        return false;
        }
    
    //
    // Unchunk http content.  Returns unchunked content on success,
    // false on any errors...  Borrows from code posted above by
    // jbr at ya-right dot com.
    //
    function unchunkHttpResponse($str=null) {
        if (!is_string($str) or strlen($str) < 1) { return false; }
        $eol = "\r\n";
        $add = strlen($eol);
        $tmp = $str;
        $str = '';
        do {
            $tmp = ltrim($tmp);
            $pos = strpos($tmp, $eol);
            if ($pos === false) { return false; }
            $len = hexdec(substr($tmp,0,$pos));
            if (!is_numeric($len) or $len < 0) { return false; }
            $str .= substr($tmp, ($pos + $add), $len);
            $tmp  = substr($tmp, ($len + $pos + $add));
            $check = trim($tmp);
            } while(!empty($check));
        unset($tmp);
        return $str;
        }
    
    function _use_mulitracker($attach_id)
    {
        global $db;
    
        $torrent = $db->fetch_row('
            SELECT
                multi_updated_date,
                multi_tracker_use
            FROM
                ' . BT_TORRENTS_TABLE . '
            WHERE
                attach_id = ' . $db->escape_string($attach_id));
    
        if(!$torrent['multi_tracker_use'])
        {
            return FALSE;
        }
    
        return $torrent;
    }
    
    function multi_tracker_update($attach_id, $force_update = FALSE, $return_result = FALSE)
    {
        global $db, $bb_cfg, $userdata;
    
        $attach_id = (int) $attach_id;
    
        if($attach_id == '' || $attach_id == 0)
        {
            return FALSE;
        }
    
        if( $force_update === FALSE )
        {
            $torrent = _use_mulitracker($attach_id);
            if( $torrent === FALSE )
            {
                return FALSE;
            }
    
            if(time()< $torrent['multi_updated_date']+$bb_cfg['m_expire_time'] )
            {
                return FALSE;
            }
        }
    
        $result = $db->fetch_row("
            SELECT
                physical_filename
            FROM
                " . ATTACHMENTS_DESC_TABLE . "
            WHERE
                    attach_id = " . $db->escape_string($attach_id) . "
                AND
                    extension = 'torrent'
                AND
                    tracker_status = 1
            LIMIT 1
        ");
    
        if(
            !count($result)                        ||
            @$result['physical_filename'] == ''    ||
            is_null(@$result['physical_filename'])    /*||
            @$result['physical_filename'] == 0*/
        )
        {
            return FALSE;
        }
    
        require_once 'includes/class.bdecode.php';
        require_once 'includes/class.http.php';
        $torToParse                = new BDECODE('files/'.$result['physical_filename']);
    
        $parsedTrackers            = return_announcers($torToParse->result);
        if( $parsedTrackers === FALSE )
        {
            return FALSE;
        }
    
        $dbId['complete']            = 0;
        $dbId['incomplete']        = 0;
    
        foreach ($parsedTrackers AS $trackers)
        {
            if(array_key_exists('6',$trackers))
            {
                //echo $trackers[6]."\n".strlen($trackers[6])."\n".strpos($trackers[6],'&');
                if(strpos($trackers[6],'?'))
                {
                    $perf = '&amp;';
                    if( strrpos($trackers[6],'&') )
                    {
                        if( strlen($trackers[6]) == (strpos($trackers[6],'&')+1))
                        {
                            $perf = '';
                        }
                    }
                }
                else
                {
                    $perf = '?';
                }
            }
            else
            {
                $perf = '?';
            }
    
            if(!$trackers[5])
            {
                $port = 80;
            }
            else
            {
                $port = $trackers[5];
            }
    
            $info_hash = sha1(bencode($torToParse->result['info']),true);
    
            $request =
                $trackers[6].
                $perf.
                "info_hash="    . urlencode($info_hash) .
                "&peer_id=-UT1850-%c3B%bb%04%1eYz%c6%11%0e%c7%e7" .
                "&port="        . mt_rand(10000,50000) .
                "&uploaded=0&downloaded=0&left=0&corrupt=0&key=8C5EC0D3&event=started&numwant=200&compact=1&no_peer_id=1";
            $request = str_replace('&amp;','&',$request);
            $requestOut        = httpPost($trackers[2],$port,$request);
            if(!is_string($requestOut))
            {
                continue;
            }
            require_once 'includes/functions_torrent.php';
            $bDa    = bdecode($requestOut);
            $dbId['complete']    += @$bDa['complete'];
            $dbId['incomplete']    += @$bDa['incomplete'];
        }
    
        if(!$dbId['complete'] && !$dbId['incomplete'])
        {
            //$dbId['m_dead_torrent'] = @$dbId['m_dead_torrent']++;
    
            /*if( $bb_cfg['m_dead_torrent'] <= @$dbId['m_dead_torrent'] )
            {*/
                $db->query("
                        UPDATE
                            " . BT_TORRENTS_TABLE . "
                        SET
                            multi_tracker_use = 0
                        WHERE
                            attach_id = " . $db->escape_string($attach_id) . "");
                return FALSE;
            /*}*/
        }
        $db->query("
            UPDATE
                " . BT_TORRENTS_TABLE . "
            SET
                multi_trackers_and_peers = '" . $db->escape_string(serialize($dbId)) . "',
                multi_updated_date = " . time() ."
            WHERE
                attach_id = " . $db->escape_string($attach_id) . "");
        if($return_result === TRUE)
        {
            return $dbId;
        }
    
        return TRUE;
     
    }
    
    function _update_torrent_state($a, $s = 0)
    {
        global $db;
    
        $db->query("
            UPDATE
                " . BT_TORRENTS_TABLE . " b
            SET
                b.multi_tracker_use = $s
            WHERE
                attach_id = $a");
    }
    
    function get_external_peers($attach_id)
    {
        global $db, $bb_cfg;
    
        $attach_id = (int) $attach_id;
    
        if($attach_id == '' || $attach_id == 0)
        {
            return FALSE;
        }
    
        if(!$result = $db->fetch_row("
                    SELECT
                        multi_trackers_and_peers,
                        multi_updated_date
                    FROM
                        " . BT_TORRENTS_TABLE ."
                    WHERE
                        attach_id = " . $db->escape_string($attach_id)))
        {
            return FALSE;
        }
    
        if($result['multi_updated_date']+$bb_cfg['m_expire_time']>=time())
        {
            multi_tracker_update($attach_id);
        }
    
        if(!is_array($result) || !array_key_exists('multi_trackers_and_peers',$result))
        {
            return FALSE;
        }
        $result = unserialize($result['multi_trackers_and_peers']);
        return $result;
    }
    
    function return_announcers($bencode)
    {
        global $bb_cfg;
    
        if(array_key_exists('announce-list',$bencode))
        {
            foreach ($bencode['announce-list'] AS $torTracker)
            {
                if(!stristr($bb_cfg['bt_announce_url'], $torTracker[0]))
                {
                    $parsedTrackers[] = $torTracker[0];
                }
            }
        }
        else
        {
            if(!stristr($bb_cfg['bt_announce_url'], $bencode['announce']))
            {
                $parsedTrackers[] = $bencode['announce'];
            }
        }
    
        $goodTrackers = array();
    
        foreach( $parsedTrackers AS $tracker2parse )
        {
            if(preg_match('#^
                (http|udp)
                \\:\\/\\/
                ([a-z0-9\-]+\.([a-z0-9\-]+\.)?
                [a-z]{2,5})
                (\:([0-9]{2,5}))?
                (\\/(.*))?
            #ix', $tracker2parse, $oTu))
            {
                $goodTrackers[] = $oTu;
            }
            else
            {
                continue;
            }
        }
        if( count($goodTrackers) > 0 )
        {
            return $goodTrackers;
        }
        else
        {
    
            return FALSE;
        }
    }
                
    
     
    nemec2000 нравится это.
  2. krumax

    krumax Пользователь

    Сообщения:
    1.122
    Симпатии:
    328
    Версия TP:
    иная
    TheMist36, ещё таблицы надо изменить по аналогии
    BT_TORRENTS_TABLE = BB_BT_TORRENTS
     
  3. TheMist36

    TheMist36 Пользователь

    Сообщения:
    5
    Симпатии:
    6
    спасибо а все одинаково DB() на $db менять?

    Код:
    function _use_mulitracker($attach_id)
    {
        global DB();
    сразу ошибку выдаёт Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE or '$' in в этой строке global DB();
     
  4. Zenden

    Zenden Пользователь

    Сообщения:
    395
    Симпатии:
    314
    global DB(); нет такой глобальной, удали эту строчку.
     
  5. TheMist36

    TheMist36 Пользователь

    Сообщения:
    5
    Симпатии:
    6
    теперь здесь тогда вылезла DB() Id['complete'] = 0;

    Parse error: syntax error, unexpected T_STRING in
     
  6. krumax

    krumax Пользователь

    Сообщения:
    1.122
    Симпатии:
    328
    Версия TP:
    иная
    TheMist36, так а зачем название переменной надо было менять? :)
     
  7. DarkMod

    DarkMod Пользователь

    Сообщения:
    1.449
    Симпатии:
    375
    PHP:
    <?php
    /**
    *
    * @author lEx0
    * @version 1.0.0
    * @package TorrentPier
    * @name TorrentPier Multi Tracker Mod
    *
    */

    function httpPost($ip=null,$port=80,$uri=null,$content=null) {
    if (empty(
    $ip)) { return false; }
    if (!
    is_numeric($port)) { return false; }
    if (empty(
    $uri)) { return false; }
    //if (empty($content)) { return false; }

    // generate headers in array.
    $t = array();
    $t[] = 'GET ' $uri ' HTTP/1.1';
    //$t[] = 'Content-Type: text/html';
    $t[] = 'Host: ' $ip ':' $port;
    $t[] = 'User-Agent: uTorrent/1850(17091)';
    $t[] = 'Accept-Encoding: gzip';
    //$t[] = 'Content-Length: ' . strlen($content);
    //$t[] = 'Connection: close';
    $t implode("\r\n",$t) . "\r\n\r\n" $content;
    //
    // Open socket, provide error report vars and timeout of 10
    // seconds.
    //
    $fp = @fsockopen($ip,$port,$errno,$errstr,5);
    //
    // Send headers and content.
    //
    if (!@fwrite($fp,$t)) {
    @
    fclose($fp);
    return 
    false;
    }
    //
    // Read all of response into $rsp and close the socket.
    //
    $rsp '';
    while(!
    feof($fp)) { $rsp .= fgets($fp,8192); }
    fclose($fp);
    //
    // Call parseHttpResponse() to return the results.
    //
    return parseHttpResponse($rsp);
    }

    //
    // Accepts provided http content, checks for a valid http response,
    // unchunks if needed, returns http content without headers on
    // success, false on any errors.
    //
    function parseHttpResponse($content=null) {
    if (empty(
    $content)) { return false; }
    // split into array, headers and content.
    $hunks explode("\r\n\r\n",trim($content));
    if (!
    is_array($hunks) or count($hunks) < 2) {
    return 
    false;
    }
    $header $hunks[count($hunks) - 2];
    $body $hunks[count($hunks) - 1];
    $headers explode("\n",$header);
    unset(
    $hunks);
    unset(
    $header);
    if (!
    validateHttpResponse($headers)) { return false; }
    if (
    in_array('Transfer-Coding: chunked',$headers)) {
    return 
    trim(unchunkHttpResponse($body));
    } else {
    return 
    trim($body);
    }
    }

    //
    // Validate http responses by checking header. Expects array of
    // headers as argument. Returns boolean.
    //
    function validateHttpResponse($headers=null) {
    if (!
    is_array($headers) or count($headers) < 1) { return false; }
    switch(
    trim(strtolower($headers[0]))) {
    case 
    'http/1.0 100 ok':
    case 
    'http/1.0 200 ok':
    case 
    'http/1.1 100 ok':
    case 
    'http/1.1 200 ok':
    return 
    true;
    break;
    }
    return 
    false;
    }

    //
    // Unchunk http content. Returns unchunked content on success,
    // false on any errors... Borrows from code posted above by
    // jbr at ya-right dot com.
    //
    function unchunkHttpResponse($str=null) {
    if (!
    is_string($str) or strlen($str) < 1) { return false; }
    $eol "\r\n";
    $add strlen($eol);
    $tmp $str;
    $str '';
    do {
    $tmp ltrim($tmp);
    $pos strpos($tmp$eol);
    if (
    $pos === false) { return false; }
    $len hexdec(substr($tmp,0,$pos));
    if (!
    is_numeric($len) or $len 0) { return false; }
    $str .= substr($tmp, ($pos $add), $len);
    $tmp substr($tmp, ($len $pos $add));
    $check trim($tmp);
    } while(!empty(
    $check));
    unset(
    $tmp);
    return 
    $str;
    }

    function 
    _use_mulitracker($attach_id)
    {

    $torrent DB()->fetch_row('
    SELECT
    multi_updated_date,
    multi_tracker_use
    FROM
    BB_BT_TORRENTS '
    WHERE
    attach_id = ' 
    DB()->escape_string($attach_id));

    if(!
    $torrent['multi_tracker_use'])
    {
    return 
    FALSE;
    }

    return 
    $torrent;
    }

    function 
    multi_tracker_update($attach_id$force_update FALSE$return_result FALSE)
    {
    global 
    $bb_cfg$userdata;

    $attach_id = (int) $attach_id;

    if(
    $attach_id == '' || $attach_id == 0)
    {
    return 
    FALSE;
    }

    if( 
    $force_update === FALSE )
    {
    $torrent _use_mulitracker($attach_id);
    if( 
    $torrent === FALSE )
    {
    return 
    FALSE;
    }

    if(
    time()< $torrent['multi_updated_date']+$bb_cfg['m_expire_time'] )
    {
    return 
    FALSE;
    }
    }

    $result DB()->fetch_row("
    SELECT
    physical_filename
    FROM
    BB_ATTACHMENTS_DESC "
    WHERE
    attach_id = " 
    DB()->escape_string($attach_id) . "
    AND
    extension = 'torrent'
    AND
    tracker_status = 1
    LIMIT 1
    "
    );

    if(
    !
    count($result) ||
    @
    $result['physical_filename'] == '' ||
    is_null(@$result['physical_filename']) /*||
    @$result['physical_filename'] == 0*/
    )
    {
    return 
    FALSE;
    }

    require_once 
    'includes/class.bdecode.php';
    require_once 
    'includes/class.http.php';
    $torToParse = new BDECODE('files/'.$result['physical_filename']);

    $parsedTrackers return_announcers($torToParse->result);
    if( 
    $parsedTrackers === FALSE )
    {
    return 
    FALSE;
    }

    $dbId['complete'] = 0;
    $dbId['incomplete'] = 0;

    foreach (
    $parsedTrackers AS $trackers)
    {
    if(
    array_key_exists('6',$trackers))
    {
    //echo $trackers[6]."\n".strlen($trackers[6])."\n".strpos($trackers[6],'&');
    if(strpos($trackers[6],'?'))
    {
    $perf '&amp;';
    if( 
    strrpos($trackers[6],'&') )
    {
    if( 
    strlen($trackers[6]) == (strpos($trackers[6],'&')+1))
    {
    $perf '';
    }
    }
    }
    else
    {
    $perf '?';
    }
    }
    else
    {
    $perf '?';
    }

    if(!
    $trackers[5])
    {
    $port 80;
    }
    else
    {
    $port $trackers[5];
    }

    $info_hash sha1(bencode($torToParse->result['info']),true);

    $request =
    $trackers[6].
    $perf.
    "info_hash=" urlencode($info_hash) .
    "&peer_id=-UT1850-%c3B%bb%04%1eYz%c6%11%0e%c7%e7" .
    "&port=" mt_rand(10000,50000) .
    "&uploaded=0&downloaded=0&left=0&corrupt=0&key=8C5EC0D3&event=started&numwant=200&compact=1&no_peer_id=1";
    $request str_replace('&amp;','&',$request);
    $requestOut httpPost($trackers[2],$port,$request);
    if(!
    is_string($requestOut))
    {
    continue;
    }
    require_once 
    'includes/functions_torrent.php';
    $bDa bdecode($requestOut);
    $dbId['complete'] += @$bDa['complete'];
    $dbId['incomplete'] += @$bDa['incomplete'];
    }

    if(!
    $dbId['complete'] && !$dbId['incomplete'])
    {
    //$dbId['m_dead_torrent'] = @$dbId['m_dead_torrent']++;

    /*if( $bb_cfg['m_dead_torrent'] <= @$dbId['m_dead_torrent'] )
    {*/
    DB()->query("
    UPDATE
    BB_BT_TORRENTS "
    SET
    multi_tracker_use = 0
    WHERE
    attach_id = " 
    DB()->escape_string($attach_id) . "");
    return 
    FALSE;
    /*}*/
    }
    DB()->query("
    UPDATE
    BB_BT_TORRENTS "
    SET
    multi_trackers_and_peers = '" 
    DB()->escape_string(serialize($dbId)) . "',
    multi_updated_date = " 
    time() ."
    WHERE
    attach_id = " 
    DB()->escape_string($attach_id) . "");
    if(
    $return_result === TRUE)
    {
    return 
    $dbId;
    }

    return 
    TRUE;

    }

    function 
    _update_torrent_state($a$s 0)
    {

    DB()->query("
    UPDATE
    BB_BT_TORRENTS " b
    SET
    b.multi_tracker_use = 
    $s
    WHERE
    attach_id = 
    $a");
    }

    function 
    get_external_peers($attach_id)
    {
    global 
    $bb_cfg;

    $attach_id = (int) $attach_id;

    if(
    $attach_id == '' || $attach_id == 0)
    {
    return 
    FALSE;
    }

    if(!
    $result DB()->fetch_row("
    SELECT
    multi_trackers_and_peers,
    multi_updated_date
    FROM
    BB_BT_TORRENTS ."
    WHERE
    attach_id = " 
    DB()->escape_string($attach_id)))
    {
    return 
    FALSE;
    }

    if(
    $result['multi_updated_date']+$bb_cfg['m_expire_time']>=time())
    {
    multi_tracker_update($attach_id);
    }

    if(!
    is_array($result) || !array_key_exists('multi_trackers_and_peers',$result))
    {
    return 
    FALSE;
    }
    $result unserialize($result['multi_trackers_and_peers']);
    return 
    $result;
    }

    function 
    return_announcers($bencode)
    {
    global 
    $bb_cfg;

    if(
    array_key_exists('announce-list',$bencode))
    {
    foreach (
    $bencode['announce-list'] AS $torTracker)
    {
    if(!
    stristr($bb_cfg['bt_announce_url'], $torTracker[0]))
    {
    $parsedTrackers[] = $torTracker[0];
    }
    }
    }
    else
    {
    if(!
    stristr($bb_cfg['bt_announce_url'], $bencode['announce']))
    {
    $parsedTrackers[] = $bencode['announce'];
    }
    }

    $goodTrackers = array();

    foreach( 
    $parsedTrackers AS $tracker2parse )
    {
    if(
    preg_match('#^(http|udp)\\:\\/\\/([a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]{2,5})(\:([0-9]{2,5}))?(\\/(.*))?#ix'$tracker2parse$oTu))
    {
    $goodTrackers[] = $oTu;
    }
    else
    {
    continue;
    }
    }
    if( 
    count($goodTrackers) > )
    {
    return 
    $goodTrackers;
    }
    else
    {

    return 
    FALSE;
    }
    }
     
  8. dimka3210

    dimka3210 Пользователь

    Сообщения:
    1.306
    Симпатии:
    519
    $db это свойство класса.
    DB() функция.
     
  9. TheMist36

    TheMist36 Пользователь

    Сообщения:
    5
    Симпатии:
    6
    cgfcb
    [​IMG]
    DarkMod, спасибо за помощь ошибок не выскакивает как и не показывает функцию (
    на версиях TorrentPier_II_R261_(Stable) и TorrentPier_v.2.0.7_svn.r539_flyindiz_svn.r191 всё работало без особого допиливания, не могу разобраться почему невидно вывода функции

    выложил весь мод, я думаю многие спасибо скажут за доработку
     

    Вложения:

    • root.rar
      Размер файла:
      25,5 КБ
      Просмотров:
      180
    Volt, 473577249, carbon и 2 другим нравится это.
  10. Ragnar

    Ragnar Пользователь

    Сообщения:
    178
    Симпатии:
    33
    Версия TP:
    иная
    При обновлении пишит ERROR UPDATE и ничего не показывает. В БД также пусто, все значения по нулям. Где копать?
     

Поделиться этой страницей