Страница 1 из 2

FlylinkDC++ и torrent

Добавлено: 23 сен 2016, 09:45
flylinkdc
Научил флайлинк качать торренты.
Высказывайте идеи как эффективнее интегрировать эту возможность с DC++.
Планирую сделать обработку клика по магниту типа btih т.к. их иногда кидают в чат
пока прикручивал либу сделал первый маленький pull request в upstream
https://github.com/arvidn/libtorrent/co ... d030d54751

Код интеграции с libtorrent получается достаточно простой: пример закачки сериала (Olga.2016.SATRip.Files-x)

Код: Выделить всё

void DownloadManager::test_torrent()
{
        using namespace libtorrent;
        namespace lt = libtorrent;
	lt::error_code ec;
	lt::settings_pack l_sett;
	l_sett.set_int(lt::settings_pack::alert_mask
	               , lt::alert::error_notification
	               | lt::alert::storage_notification
	               | lt::alert::status_notification
	               | lt::alert::progress_notification
	               | lt::alert::peer_notification);
	m_torrent_settings = std::make_unique<lt::session_settings>();
	m_torrent_session = std::make_unique<lt::session>(l_sett);
	m_torrent_session->start_lsd();
	m_torrent_session->start_upnp();
	m_torrent_session->start_natpmp();	
	l_sett.set_str(settings_pack::listen_interfaces, "0.0.0.0:8999");
	lt::dht_settings dht;
	dht.privacy_lookups = true;
	m_torrent_session->set_dht_settings(dht);
	{
		m_torrent_settings->use_dht_as_fallback = false;		
		m_torrent_session->add_dht_router(std::make_pair(
		                                      std::string("router.bittorrent.com"), 6881));
		m_torrent_session->add_dht_router(std::make_pair(
		                                      std::string("router.utorrent.com"), 6881));
		m_torrent_session->add_dht_router(std::make_pair(
		                                      std::string("router.bitcomet.com"), 6881));		                                      
		m_torrent_session->start_dht();
	}
	m_torrent_settings->user_agent = "FlylinkDC++/" LIBTORRENT_VERSION;
	m_torrent_settings->choking_algorithm = session_settings::auto_expand_choker;
	m_torrent_settings->disk_cache_algorithm = session_settings::avoid_readback;
	m_torrent_settings->volatile_read_cache = false;
	m_torrent_session->set_settings(*m_torrent_settings);
	
	lt::add_torrent_params p;
	p.save_path = ".";
	p.url = "magnet:?xt=urn:btih:9017152afa06f5964c88faad524a6d443fdea787";
	
	if (ec)
	{
		dcdebug("%s\n", ec.message().c_str());
		dcassert(0);
	}
	m_torrent_session->add_torrent(p, ec);
	if (ec)
	{
		dcdebug("%s\n", ec.message().c_str());
		dcassert(0);
	}
}

Добавлено: 24 сен 2016, 21:21
HackFresse
Не прошло и полгода.. )
Как эффективнее? А тут всё получается от ответа на простой вопрос - "а зачем вообще нужны торренты во флайлинке" ?

Добавлено: 25 сен 2016, 11:08
Snaiper
HackFresse писал(а):Не прошло и полгода.. )
Как эффективнее? А тут всё получается от ответа на простой вопрос - "а зачем вообще нужны торренты во флайлинке" ?
Ты ваше кто такой, чтоб умничать тут?

Добавлено: 25 сен 2016, 15:55
HackFresse
Я ваше Рафа из центра, а ты кто ваше?

Добавлено: 25 сен 2016, 17:10
Snaiper
HackFresse писал(а):Я ваше Рафа из центра, а ты кто ваше?
потише сиди братишка!

Добавлено: 26 сен 2016, 11:17
HackFresse
HackFresse писал(а):Как эффективнее? А тут всё получается от ответа на простой вопрос - "а зачем вообще нужны торренты во флайлинке" ?
Вопрос всё равно остаётся.
Полная реализация торрентов на низком уровне займёт очень много времени (учитывая текущую скорость разработки и внедрения фич - очень, очень много). Поэтому в самом начале нужно ответить на вопрос "что именно из торрентов нужно флайлинку", и потом уже думать, как именно это сделать.

Добавлено: 26 сен 2016, 19:35
dimetro
Чтобы открывал файлы .torrent а не только магнет ссылки, полноценный DC++ & torrent клиент :-)

Добавлено: 27 сен 2016, 00:14
HackFresse
Про "полноценный DC++ & torrent клиент" - это ты, конечно, размечтался )
Хотя да, было/есть несколько мультипротокольных комбайнов (Shareaza, MLDonkey), офигенной штукой c необычным подходом был LiveDС (https://geektimes.ru/post/181906/ , если кто не в курсе)

Но касательно FlylinkDC++... всё сложно. Хотя всё очень просто )

Добавить фичу, "чтобы открывал файлы .torrent" - задачка на пару часов максимум.
1) Взять готовый класс, который парсит контент .torrent-файла, скормить ему файл раздачи, на выходе получить массив имён файлов с путями и размерами, из него сформировать xml
2) В просмотрщике файл-листов убрать фильтр на записи без TTH, чтобы показывался контент файл-листа из пункта 1
3) В просмотрщике добавить на клик правой кнопкой мышки запуск поиска/скачивания файла по названию и размеру

Итого: открыли торрент-трекер, почитали описание, а контент скачали в DC. Стильно, модно, молодёжно (всё совсем наоборот =) ).

Добавлено: 27 сен 2016, 09:10
flylinkdc
HackFresse писал(а):Итого: открыли торрент-трекер, почитали описание, а контент скачали в DC. Стильно, модно, молодёжно
А зачем качать файл в сети DC - там вечная проблема с источниками и закрытыми портами.
проще сразу отдать torrent файл либе libtorrent
http://www.libtorrent.org/examples.html
она сама нативно скачает все с торрент клиентов.
там поддержка DHT, поиск локальных пиров и т.д.
на ее базе работают qBittorrent, Deluge, mediaget и т.д.

Добавлено: 27 сен 2016, 10:52
HackFresse
Быстрый старт, сделать хоть что-то, начать хоть как-то

Потому что нельзя просто так взять и сделать "полноценный DC++ & torrent клиент ". Даже с готовой либой.
Чтобы использовать один и тот же интерфейс для закачки из разных сетей, нужен некий уровень абстракции, а FlylinkDC очень сильно захардкожен на использование только дц. Очень много рефакторинга нужно (а его в этом проекте не особо-то и любят).

Из "на ее базе работают qBittorrent, Deluge, mediaget и т.д." никак же не равно "взяли либу, и готовый торрент-клиент получился, только название поставить". Всё равно делать много чего нужно.

Например, в торрентах тоже порты пробрасывать нужно (внезапно). За счет большого числа активных торрент-юзеров (с проброшенными портами) качать будет, конечно, но ровно та же хрень, что и с пассивом в дц.

Сама тема, конечно, интересная и полезная, но либа была уже много лет как, а уверенность в её элементарной интеграции появилась только сейчас... Посмотрим, что получится))

Добавлено: 27 сен 2016, 11:02
HackFresse
flylinkdc писал(а):А зачем качать файл в сети DC - там вечная проблема с источниками и закрытыми портами.
проще сразу отдать torrent файл либе libtorrent
она сама нативно скачает все с торрент клиентов.
там поддержка DHT, поиск локальных пиров и т.д.
То неловкое чувство, когда разработчик популярного DC-клиента жалуется на то, что в его разработке вечная проблема с закачкой, закрытыми портами и отключенном DHT :-D

Добавлено: 27 сен 2016, 19:03
Snaiper
HackFresse писал(а):flylinkdc писал(а):А зачем качать файл в сети DC - там вечная проблема с источниками и закрытыми портами.
проще сразу отдать torrent файл либе libtorrent
она сама нативно скачает все с торрент клиентов.
там поддержка DHT, поиск локальных пиров и т.д.
То неловкое чувство, когда разработчик популярного DC-клиента жалуется на то, что в его разработке вечная проблема с закачкой, закрытыми портами и отключенном DHT
Ты падонак сетевой! Нука покажи свои заслуги в мире написания софта, сволач тока умеешь ванять тут!!!!

Добавлено: 28 сен 2016, 19:48
HackFresse
Snaiper писал(а):HackFresse писал(а):flylinkdc писал(а):А зачем качать файл в сети DC - там вечная проблема с источниками и закрытыми портами.
проще сразу отдать torrent файл либе libtorrent
она сама нативно скачает все с торрент клиентов.
там поддержка DHT, поиск локальных пиров и т.д.
То неловкое чувство, когда разработчик популярного DC-клиента жалуется на то, что в его разработке вечная проблема с закачкой, закрытыми портами и отключенном DHT
Ты падонак сетевой! Нука покажи свои заслуги в мире написания софта, сволач тока умеешь ванять тут!!!!
Утибоземой! Как покраснел аж! Не надо, дурашка, успокойся, соберись с мыслями, да по делу скажи чего-нибудь, доводы какие-нибудь обоснованные приведи.
Не можешь? Суровая действительность так жестока.. Когда правду-матку режут, больно?

Добавлено: 29 сен 2016, 06:16
Snaiper
HackFresse писал(а):нытик HackFresse писал(а):
Утибоземой! Как покраснел аж! Не надо, дурашка, успокойся, соберись с мыслями, да по делу скажи чего-нибудь, доводы какие-нибудь обоснованные приведи.
Не можешь? Суровая действительность так жестока.. Когда правду-матку режут, больно?
Иди уроки делай по математике, а не тут пиши людям выше тебя интеллектом, школьник 14 летний!

Добавлено: 29 сен 2016, 11:23
HackFresse
Уроки по математике! Школьник!
Изображение
А по теме есть что сказать, или интеллекту на 15 лет, только дразниться и хватает?

Добавлено: 29 сен 2016, 16:31
Snaiper
HackFresse писал(а):Уроки по математике! Школьник!

А по теме есть что сказать, или интеллекту на 15 лет, только дразниться и хватает?
Мальчик, глупый тролль ты, хочет из себя показать умника такого, сидит советы тут раскидывает бестолковые, шугливый иди улицу хоть посмотри, прогуляйся хотя бы!

Добавлено: 30 сен 2016, 12:34
HackFresse
Советы как раз толковые, ты просто понять их не можешь.
Обоснованных хоть как-то мыслей по поводу торрентов в дц сформулировать не в состоянии, вот и агришься

Добавлено: 30 сен 2016, 13:25
flylinkdc
1. Научил открывать .torrent файлы: - пока через менюшку руками. (возможно стоит приделать сканирование каталога)
2. Флай сидит на раздаче пока не закрыли клиента. (не научился пока восстанавливать раздачу после перезапуска :)
3. Если не докачали большой файл/ы - после запуска идет длительный процесс проверки целостности (это все клиенты так делают?)
4. В окне передачи показываю только торрент сами файлы не пргрессю - их может быть много.

https://yadi.sk/i/edo4HeswvvyPp

Вопрос:
Кто знает сервисы по поиску торрент файлов или магнеток по имени/размеру/SHA1 файла?

2HackFresse - убери из темы эту рожу в красной рубашке.

Добавлено: 30 сен 2016, 13:45
flylinkdc
Еще обнаружил одну неприятность ссылки бывают очень длинными.
пример

http://kino-tor.org/torrent/526186/devj ... rip-itunes


magnet:?xt=urn:btih:c5e31d0c60206be872f6d51cf7f0b64ff83806ff&dn=rutor.info_%D0%94%D0%B5%D0%B2%D1%8F%D1%82%D0%B0%D1%8F+%D0%B6%D0%B8%D0%B7%D0%BD%D1%8C+%D0%9B%D1%83%D0%B8+%D0%94%D1%80%D0%B0%D0%BA%D1%81%D0%B0+%2F+The+9th+Life+of+Louis+Drax+%282016%29+WEB-DLRip+%7C+iTunes&tr=udp://opentor.org:2710&tr=udp://opentor.org:2710&tr=http://retracker.local/announce

если ее кинуть в чат - уродская птоха выдает
[13:41:47] <PtokaX> The message was too long !

:(
Наверно нужно учить флай сокращать ссылки на лету?

Добавлено: 30 сен 2016, 17:28
HackFresse
1. Научил открывать .torrent файлы: - пока через менюшку руками. (возможно стоит приделать сканирование каталога)
Где посмотреть?
Спойлер
Изображение
Есть ли выбор, что именно качать из раздачи?
2. Флай сидит на раздаче пока не закрыли клиента. (не научился пока восстанавливать раздачу после перезапуска
Как и где смотреть список раздач, как ограничивать скорость/останавливать/удалять закачку/отдачу?
3. Если не докачали большой файл/ы - после запуска идет длительный процесс проверки целостности (это все клиенты так делают?)
Аналог пересчета ттх в дц после скачивания, переключатель можно попробовать поискать в документации
4. В окне передачи показываю только торрент сами файлы не пргрессю - их может быть много.
Мало того, что много, так еще и не понятно, что рисовать - закачка может идти фрагментированно (дефолтное поведение), в одном куске потока конец одного файла, весь второй и начало третьего файла
Кто знает сервисы по поиску торрент файлов или магнеток по имени/размеру/SHA1 файла?
Не нужно на них пока смотреть. Был btdigg.org ( https://habrahabr.ru/post/124496/), да помер. "Таки сабачка харошы быу....стольки малака давау "
Нагуглить альтернативы можно, но привязываться к ним не стоит. Сначала хотя бы базовый набор функций, а поиск альтернатив уже потом
убери из темы эту рожу в красной рубашке
Это для Snaiper, ему нравится. срач админы уберут, если тему почистить захотят, это я так, количество просмотров поднять
Еще обнаружил одну неприятность ссылки бывают очень длинными. ..если ее кинуть в чат - уродская птоха выдает [13:41:47] <PtokaX> The message was too long !
Это не птока уродская, а последствия внедрения лимитов для любителей копипасты. Грейлинк выдёт нотис перед отправкой, например
Спойлер
Изображение
Вопрос минорный, его нужно отдельно решать, что и как резать в строке, отправленной юзером в чат.

Добавлено: 30 сен 2016, 22:06
flylinkdc
Первая тест сборка доступна в авто обновлении на канале - бета.

Добавлено: 04 окт 2016, 19:57
HackFresse
Результатом внедрения торрентов стало выпиливание дц-шной DHT. Наблюдение продолжаю

Добавлено: 04 окт 2016, 20:08
flylinkdc
А какая польза была от той DHT?
и почему ее не приняли в upstream http://dcplusplus.sourceforge.net/

Добавлено: 05 окт 2016, 12:46
HackFresse
Печально, что эти вопросы задаёт не обычный юзер/домохозяйка, а сам разработчик программы для p2p файлообмена..
DHT характеризуется следующими свойствами:

Децентрализация: форма системы коллективных узлов без координации;
Масштабируемость: система будет одинаково эффективно функционировать при тысячах или миллионах узлов;
Отказоустойчивость: система будет одинаково надёжна (в некотором смысле) с узлами постоянно подключающимися, отключающимися и выдающими ошибки.
Число хабов снижается, число юзеров на хабах снижается.
А вот DHT как раз и нужен, чтобы найти источники для закачки файлов самостоятельно, в обход хабов и их ограничений на поиск, напрямую между клиентами.

Добавлено: 05 окт 2016, 16:04
flylinkdc
Цитировать из вик ты мастер, но ты не ответил на вопрос - почему DHT не приняли в upstream - оригинальный DC++?
Проблема в том, что реализация DHT от StrongDC++ не работала и только напрасно гоняла левый UDP-траф.
все кто остались в DC++ и имеют полезный контент и так сидят на топовых хабах которые сейчас простаивают без нагрузки.
кому нужно найти источники - сделает это и без DHT
у флая DHT активирован в libtorrent - там будет использоваться именно он.
и смысла держать еще один открытый UDP порт не вижу смысла.