Версия для печати темы
Re-Tracker | Система локальных ретрекеров | Ретрекер _ Патчер торрентов _ Torrent patcher для e107
Автор: ISQman 19.10.2009, 18:07
прошу помощи... не могу понять где косяк, не добавляет анонс http://retracker.local/, точнее добавляет, но торрент клиент не видит О_о
вот файлы, которые используются для ракадирования/кодирования и выдачи файлов юзверям
Автор: ISQman 21.10.2009, 9:18
жаль... я так понял, что не скоро пойму в чём гвоздь
Автор: 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_символов
ЗЫ ясное дело, что я только чот преобразовал содержимое руками в более читабельный вид...
и ясное дело, что торрент не видит анонса
Автор: ISQman 23.10.2009, 16:40
разобрался, можно делать
в 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)
разобрался, можно делать
в 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 (пронумерованный массив), с такими граблями я столкнулся, когда в торрентах люди выложили по несколько файлов в релизе... из-за чего и пришлось парсить ссылки для анонс-листа и дополнять функции
а в целом всё работает как часики
Автор: 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)