IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Torrent patcher для e107
ISQman
сообщение 19.10.2009, 18:07
Сообщение #1


Активный участник
***

Группа: Пользователи
Сообщений: 30
Регистрация: 6.10.2009
Пользователь №: 2 900



прошу помощи... не могу понять где косяк, не добавляет анонс http://retracker.local/, точнее добавляет, но торрент клиент не видит О_о
вот файлы, которые используются для ракадирования/кодирования и выдачи файлов юзверям
Прикрепленные файлы
Прикрепленный файл  patcher.zip ( 3.25 килобайт ) Кол-во скачиваний: 13
 
Перейти в начало страницы
 
+Цитировать сообщение
ISQman
сообщение 21.10.2009, 9:18
Сообщение #2


Активный участник
***

Группа: Пользователи
Сообщений: 30
Регистрация: 6.10.2009
Пользователь №: 2 900



жаль... я так понял, что не скоро пойму в чём гвоздь sad.gif
Перейти в начало страницы
 
+Цитировать сообщение
ISQman
сообщение 21.10.2009, 11:18
Сообщение #3


Активный участник
***

Группа: Пользователи
Сообщений: 30
Регистрация: 6.10.2009
Пользователь №: 2 900



в общем максимум что мождет получится в торрент файле это:
d8:announce
79:
http://mytorrent.myhost.ua/announce.php?pk...79863c5e7bd4813
: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
Сообщение #4


Активный участник
***

Группа: Пользователи
Сообщений: 30
Регистрация: 6.10.2009
Пользователь №: 2 900



разобрался, можно делать 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
Сообщение #5


Активный участник
***

Группа: Админы
Сообщений: 660
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Цитата(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
Сообщение #6


Активный участник
***

Группа: Пользователи
Сообщений: 30
Регистрация: 6.10.2009
Пользователь №: 2 900



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

да и Ваш вариант не работает, работает более упрощённая схема:
Код
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
Сообщение #7


Активный участник
***

Группа: Админы
Сообщений: 660
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Цитата(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 объявляются массивы.


--------------------
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия службы мониторинга серверов Сейчас: 24.4.2017, 14:13
Rambler's Top100