В связи с переходом на линукс, встала проблема о использовании торрентов. И не просто использовании, а что бы как и раньше - не думать о рейтинге. Благо, тут всё opensource и всё намного проще чем в случае с uTorrent.
.
В качестве клиента я выбрал Deluge. Он лёгкий, достаточно быстрый и часто обновляется. Написан на питоне и использует libtorrent.
.
Так как патч будет для libtorrent, то он будет работать для всех клиентов, использующих эту либу.
И так, приступим.
.
Скачиваем свежий libtorrent-rasterbar, распаковываем в любую удобную папку.
Теперь, нужно найти в каком файле передаётся информация на трекер. Выполним поиск по содержимому файлов:
find -type f -exec grep -il "downloaded" {} ;
На выходе будет достаточно большой список файлов. Опытным путём, установлено, что нужные файлы:
./src/http_tracker_connection.cpp
./src/udp_tracker_connection.cpp
Их-то и предстоит патчить.
.
Как видно из названия, первый файл - для http соединений, а второй - для udp. Второй случай, конечно, много реже, но его так же не мешает пропатчить.
.
Теперь по порядку:
.
http_tracker_connection.cpp
Находим строку в которой есть "downloaded". У меня сразу был найдена нужная строка, выглядит примерно так:
snprintf(str, sizeof(str), "&peer_id=%s&port=%d&uploaded=%"PRId64 "&**downloaded**=%"PRId64"&**left**=%"PRId64"&corrupt=%"PRId64"&compact=1" "&numwant=%d&key=%x&no_peer_id=1" , escape_string((const char*)&tracker_req().pid[0], 20).c_str() , tracker_req().listen_port , stats ? tracker_req().uploaded : 0 , stats ? tracker_req().downloaded : 0 , stats ? tracker_req().left : 0 , stats ? tracker_req().corrupt : 0 , tracker_req().num_want , tracker_req().key); url += str;
Здесь нас интересуют параметры downloaded и left.
Теперь просто заменим строки
, stats ? tracker_req().downloaded : 0 , stats ? tracker_req().left : 0
на
, 0 , 0
Тут, конечно, можно добавить деление реально скачанного, например, на 5. Что бы уменьшить риск бана, но это уже по вкусу.
.
Далее, udp_tracker_connection.cpp:
Находим строки вида
detail::write_int64(stats ? req.downloaded : 0, out); // downloaded detail::write_int64(stats ? req.left : 0, out); // left
И по аналогии с http версией заменяем их на
detail::write_int64(0, out); // downloaded detail::write_int64(0, out); // left
Вот собственно и всё. Осталось скомпилировать и установить libtorrent:
./configure && make && make install
В случае с ubuntu, не забывайте о sudo.
.
Надо сказать, собирается он довольно долго. На моём Athlon X2 2.1 Ghz и 3GB озу это заняло около 15-ти минут.
.
Да, всё описанное действительно для версии 0.15.0. Например в 0.14.9 строки выглядят немного по другому, хотя найти их не составляет труда.