Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Re-Tracker | Система локальных ретрекеров | Ретрекер _ Патчер торрентов _ Torrent patcher для e107

Автор: ISQman 19.10.2009, 18:07

прошу помощи... не могу понять где косяк, не добавляет анонс http://retracker.local/, точнее добавляет, но торрент клиент не видит О_о
вот файлы, которые используются для ракадирования/кодирования и выдачи файлов юзверям

 patcher.zip ( 3.25 килобайт ) : 14
 

Автор: ISQman 21.10.2009, 9:18

жаль... я так понял, что не скоро пойму в чём гвоздь sad.gif

Автор: ISQman 21.10.2009, 11:18

в общем максимум что мождет получится в торрент файле это:
d8:announce
79:
http://mytorrent.myhost.ua/announce.php?pk=0cbc6bdb172e4040d6e59e62e3079863c5e7bd4813
:announce-list
31:
http://retracker.local/announce
10:
created by
13:
uTorrent/190B
13:creation date
i
1255560628
e
8:
encoding
5:
UTF-8
4:infod
6:
length
i
411772928
e
4:
name
55:
House.M.D.s06e05.Instant.Karma.HDRip.Rus.1001cinema.avi
12:
piece length
i
524288
e
6:
pieces
15720:тут_sha1_хэш_длинной=15720_символов

ЗЫ ясное дело, что я только чот преобразовал содержимое руками в более читабельный вид...
и ясное дело, что торрент не видит анонса sad.gif

Автор: ISQman 23.10.2009, 16:40

разобрался, можно делать smile.gif
в bencode.php изменил функцию encodeList

Код
function encodeList($array, &$fd){
    $fd .= "l";
    // The empty list is defined as array();
    if (empty($array)){
        $fd .= "e";
        return;
    }
    for ($i = 0; isset($array[$i]); $i++){
        if (preg_match('{(?:(\w+://)|www\.)[\w-]+(\.[\w-]+)*\S*(?:(?<! [[:punct:]] ) | (?<= [-/&+*] ))}xis',$array[$i])){
            $fd .= "l";
            $this->decideEncode($array[$i], $fd);
            $fd .= "e";
        }else $this->decideEncode($array[$i], $fd);
    }
    $fd .= "e";
    return;
}

и чуть изменил download.php
Код
$torrA = BDecode($torrdata);
if($ulevel > -1){
    $torrA["announce"] = $announce."?pk=".$passkey;
    $torrA["announce-list"][0] = "http://retracker.local/announce";
    $torrA["announce-list"][1] = $torrA["announce"];
}else{
    $torrA["announce"] = $announce;
    $torrA["announce-list"][0] = "http://retracker.local/announce";
    $torrA["announce-list"][1] = $torrA["announce"];
}
//if(isset($torrA["announce-list"])) unset($torrA["announce-list"]);

Автор: FreeM@N 23.10.2009, 20:51

Цитата(ISQman @ 23.10.2009, 17:40) *
разобрался, можно делать smile.gif
в bencode.php изменил функцию encodeList

Т.к. ещё не смотрел то не буду комментировать...

Цитата(ISQman @ 23.10.2009, 17:40) *
и чуть изменил download.php

А вот здесь лучше сделать таким образом:
Код
$torrA = BDecode($torrdata);
$torrA["announce-list"] = array();
if($ulevel > -1){
    $torrA["announce"] = $announce."?pk=".$passkey;
    $torrA["announce-list"][] = array("http://retracker.local/announce");
    $torrA["announce-list"][] = array($torrA["announce"]);
}else{
    $torrA["announce"] = $announce;
    $torrA["announce-list"][] = array("http://retracker.local/announce");
    $torrA["announce-list"][] = array($torrA["announce"]);
}
//if(isset($torrA["announce-list"])) unset($torrA["announce-list"]);

В таком случае трекеры будут перебираться клиентом последовательно - т.е. сначала retracker.local, а затем тот, что в $torrA["announce"].
В вашем же варианте формат announce-list предполагал случайный выбор трекера их предложенных, тоже работает, но идея как я понял была именно сначала попробовать retracker.local, а потом уже основной.

Автор: ISQman 26.10.2009, 12:45

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

да и Ваш вариант не работает, работает более упрощённая схема:

Код
if($ulevel > -1){
    $torrA["announce"] = $announce."?pk=".$passkey;
    $torrA["announce-list"][] = "http://retracker.local/announce";
    $torrA["announce-list"][] = $torrA["announce"];
}else{
    $torrA["announce"] = $announce;
    $torrA["announce-list"][] = "http://retracker.local/announce";
    $torrA["announce-list"][] = $torrA["announce"];
}

вероятно из-за того, что данные должны быть list (пронумерованный массив), с такими граблями я столкнулся, когда в торрентах люди выложили по несколько файлов в релизе... из-за чего и пришлось парсить ссылки для анонс-листа и дополнять функции smile.gif а в целом всё работает как часики

Автор: FreeM@N 26.10.2009, 20:22

Цитата(ISQman @ 26.10.2009, 12:45) *
да и Ваш вариант не работает

Подозреваю что это из-за encodeList - какая-то узкоспециализированная функция, если взять кодировщик из PEAR::Bittorent2 то всё будет как нужно...

UPD: Посмотрел исходники - верните encodeList из исходников, она должна работать...да и вообще bdecode и bencode редактировать не нужно.

Цитата
вероятно из-за того, что данные должны быть list (пронумерованный массив)

Я бы мог записать и так:
Код
$torrA["announce-list"][0] = array(0=>"http://retracker.local/announce");
$torrA["announce-list"][1] = array(0=>$torrA["announce"]);

Но это абсолюто одно и тоже...посмотрите как в PHP объявляются массивы.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)