Название: Генерация .torrent файла Отправлено: XpycT от Август 04, 2009, 18:44 Доброго времени суток.
Прошу вашей помощи в доделке генерации .torrent файла (не каталога). Дело в том, что остался только хеш pieces, но никак не получается его сделать..точнее не пойму что именно для него надо. Вот что у меня имеется testapp.h Код testapp.cpp Код Ссылки на спецификацию формата: http://blog.bitcomet.com/bitcomet/post_413/ (http://blog.bitcomet.com/bitcomet/post_413/) http://bittorrent.org/beps/bep_0003.html (http://bittorrent.org/beps/bep_0003.html) http://wiki.theory.org/BitTorrentSpecification (http://wiki.theory.org/BitTorrentSpecification) Как я понял, надо прочитать весь файл, разбить его по 20 байт, и эти байты закриптовать в Sha1. Но как не пытаюсь сделать - созданный файл отличается от созданного в клиенте, и при его открытии выпадает сообщение о не битом формате :( Название: Re: Генерация .torrent файла Отправлено: Rcus от Август 04, 2009, 19:25 Нет, 20 байт это длина SHA1 хеша. До хешей есть поле длины куска... /* оставлю свои идеи по поводу еще одного торрент клиента при себе */
Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 04, 2009, 20:06 До хешей есть поле длины куска... Если оно и есть, то уже в самом хеше, ибо все , кроме последнего хеша генерируется правильно (пробовал заменить оригинальный текст сгенерированным. Все прекрасно качалось).Вопрос остается открыт :) Название: Re: Генерация .torrent файла Отправлено: SimpleSunny от Август 04, 2009, 20:38 Цитировать Если оно и есть, то уже в самом хеше, ибо все , кроме последнего хеша генерируется правильно (пробовал заменить оригинальный текст сгенерированным. Все прекрасно качалось). Немного оошибаешся. Вот выдержка из http://wiki.theory.org/BitTorrentSpecificationВопрос остается открыт :) Цитировать This section contains the field which are common to both mode, "single file" and "multiple file". т. е. разбиваем файл на куски размером piece length и применяем к ним функцию SHA1.* piece length: number of bytes in each piece (integer) * pieces: string consisting of the concatenation of all 20-byte SHA1 hash values, one per piece (byte string, i.e. not urlencoded) Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 04, 2009, 22:33 т. е. разбиваем файл на куски размером piece length и применяем к ним функцию SHA1. Я то понял, и бью по pieces lengthКод Но как на зло - результат не совпадает с тем, который должен получиться :( Название: Re: Генерация .torrent файла Отправлено: niXman от Август 04, 2009, 22:45 А откуда ты знаешь какой должен получиться?
Читать весь файл в память - плохая идея. Зачем создавать велосипед? Возьми код любого торрент клиента, выдери оттуда что нужно, и все. Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 04, 2009, 22:57 А откуда ты знаешь какой должен получиться? Cравнение по содержимому моего и "правельного" торрента, созданого с одного файла.Читать весь файл в память - плохая идея. Я понимаю, но на время разработки пойдет т.к. тестирую на файлике в 516кбЗачем создавать велосипед? Возьми код любого торрент клиента, выдери оттуда что нужно, и все. Все что я смотрел, используют libtorrent, которая еще и boost за собою тянет, да и к тому же как не крутил, под MinGW+Windows крикрутить ее к проекту не вышло :)Название: Re: Генерация .torrent файла Отправлено: niXman от Август 04, 2009, 23:05 Цитировать Все что я смотрел, используют libtorrent, которая еще и boost за собою тянет В libtorrent эта часть легко модифицируется чтоб работать без boost. Не хочешь выдерать, посмотри как это там реализовано.Цитировать да и к тому же как не крутил, под MinGW+Windows крикрутить ее к проекту не вышло У меня на оборот. Мингв-ом собирается, а вот студию заставить не получается.Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 05, 2009, 13:57 У меня на оборот. Мингв-ом собирается Не мог бы ты подсказать как правильно собрать его под виндой. Я скачал boostи libtorrent-rasterbar-0.14.4, прописал в системные переменные BOOST_BUILD_PATH и BOOST_ROOT и в бусте в user-config.jam поставил using gcc ;, но когда собираю libtorrentКод: bjam gcc link=static boost=source Код: BOOST_ROOT = d:\Qt4_tutorial\addin\boost_1_34_0 Код: D:\Qt4_tutorial\addin\libtorrent-rasterbar-0.14.4>bjam gcc link=static boost=sou Ну или на крайний случай можешь выложить откомпиленную либу :( Название: Re: Генерация .torrent файла Отправлено: spirit от Август 05, 2009, 14:22 с кьюти идет экзампл торрента QTDIR\examples\network\torrent\ или так не то что нужно?
Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 05, 2009, 14:42 с кьюти идет экзампл торрента QTDIR\examples\network\torrent\ или так не то что нужно? Да идет, и сделали там можно сказать все, кроме создание самого торрента, я там смотрел как они считывают хеш файлов, и по аналогу пробовал его записать..но не совпадает , пишет .torrent file is broken":) Название: Re: Генерация .torrent файла Отправлено: spirit от Август 05, 2009, 14:53 ясно. с тонкостями не разбирался просто. :)
Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 06, 2009, 08:29 Полтора дня с бубном вокруг библиотеки дали свое - смог нормально собрать проект windows+mingw+Qt.
Смешно лишь то - что под msvc собирается сразу и без внесения изменений в либу..а вот с mingw конечно обидно :(. Небольшой солюшен, может кому пригодится.
Код 2) Если компилятор ругается на PROTECTION_LEVEL_UNRESTRICTED(для IPv6), то в \libtorrent-rasterbar-0.14.4\src\session_impl.cpp в начало добавляем Код
3) Если ошибка libtorrent.a(file.o):file.cpp:(.text+0x717): undefined reference to `libtorrent::safe_convert(std::string const&)', то тут нашел такое решение. В файле \libtorrent-rasterbar-0.14.4\include\libtorrent\storage.hpp и \libtorrent-rasterbar-0.14.4\src\file.cpp удаляем директиву TORRENT_USE_WPATH, но не ее содержимое(строку оставляем). Если начнет материться на wpath, тогда надо будет еще в \libtorrent-rasterbar-0.14.4\src\storage.cpp в самом начале удалить директиву TORRENT_USE_WPATH(где функция safe_convert) но содержимое оставить, а вот дальше удялять все что в #if TORRENT_USE_WPATH ...#elseif, а то что в #elseif...#endif оставлять. В результате библиотека должна нормально собраться под MinGW. Ну а в проект слинковать по аналогу с джамовского файла, тоесть Код: TEMPLATE = app Может можно и проще исправить ошибки...допустим в config.hpp есть #define TORRENT_USE_WPATH 1, из-за которого весь геморрой, но когда я пытался его установить на 0, то получал еще больше ошибок :) Всем спасибо, тему можно закрывать ;) Название: Re: Генерация .torrent файла Отправлено: spirit от Август 06, 2009, 12:11 так может ты выложишь солюшен на вики? :)
Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 06, 2009, 13:06 так может ты выложишь солюшен на вики? :) Даже не знаю :) Дело в том что у меня в установленных библиотеках заблудиться можно..а в друг что упустил. Бедный юзверь прочитает солюшен, а собрать не сможет..и обидится на wiki ;D Хотя возможно посже и распишу поподробнее, будет и мне заметка на будущее :) Название: Re: Генерация .torrent файла Отправлено: spirit от Август 06, 2009, 13:10 так может ты выложишь солюшен на вики? :) Даже не знаю :) Дело в том что у меня в установленных библиотеках заблудиться можно..а в друг что упустил. Бедный юзверь прочитает солюшен, а собрать не сможет..и обидится на wiki ;D Хотя возможно посже и распишу поподробнее, будет и мне заметка на будущее :) Название: Re: Генерация .torrent файла Отправлено: niXman от Август 07, 2009, 23:08 У меня обратная проблема.
Нужно получить хэш всего контента из торрент файла. Но нельзя использовать сторонние библиотеки. То что хэш состоит из 20 байт, и то что он считается для кусков на которые разбит файл, я знаю. Т.е. теоретически, если сложить все эти значения, должен получиться полный хеш. Вот вопросы. 1. хеш значения в торрент файле записаны в raw? 2. как их складывать? они же не целые числа. Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 07, 2009, 23:40 У меня обратная проблема. Насколько я помню, когда искал ифу о том как разбивать на хеши, гдето промелькнула заметка, что начальный хеш получить невозможно... Хотя с уверенностью не скажу. Нужно получить хэш всего контента из торрент файла. Но нельзя использовать сторонние библиотеки. То что хэш состоит из 20 байт, и то что он считается для кусков на которые разбит файл, я знаю. Т.е. теоретически, если сложить все эти значения, должен получиться полный хеш. Вот вопросы. 1. хеш значения в торрент файле записаны в raw? 2. как их складывать? они же не целые числа. А сам пример торрент клиента в демках смотрел? Может там считается общая сумма.. Я его проглядывал мельном, и там был какой-то цикл считывания всех хешей и заносом его в QByteArray. Может то как раз оно :) Название: Re: Генерация .torrent файла Отправлено: SimpleSunny от Август 08, 2009, 00:24 У меня обратная проблема. Нужно получить хэш всего контента из торрент файла. Но нельзя использовать сторонние библиотеки. То что хэш состоит из 20 байт, и то что он считается для кусков на которые разбит файл, я знаю. Т.е. теоретически, если сложить все эти значения, должен получиться полный хеш. Вот вопросы. 1. хеш значения в торрент файле записаны в raw? 2. как их складывать? они же не целые числа. 2. В принципе целые числа (160 битные). Но из затеи ничего не выйдет, так как нет такой фукции f в общем виде, с помощью которой можно было бы сделать следущее: C=AB hash(C) = f(hash(A), hash(B)) Название: Re: Генерация .torrent файла Отправлено: niXman от Август 08, 2009, 01:22 Цитировать 2. В принципе целые числа (160 битные). можно подробней?Но из затеи ничего не выйдет, так как нет такой фукции f в общем виде, с помощью которой можно было бы сделать следущее: C=AB hash(C) = f(hash(A), hash(B)) Название: Re: Генерация .torrent файла Отправлено: XpycT от Август 11, 2009, 09:58 Вышла новая версия либы libtorrent, но танца с бубном аналогичны тем что писал :(.
Встал другой вопрос - как в Windows заставить при создании торрента нормально воспринимать русский язык (англ. файлы и пути создает нормально). Где-то в их архиве почты нашел аналогичную проблему.. на что они посоветовали конвертировать имена в UTF-8 при добавлении файла в торрент. Тоесть сейчас у меня допустим Код а они советуют что-то вроде Код Но в результате получаю ошибку как на скрине. Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 10:43 i want build QT + Libtorrent + Mingw but when i do your instruction
error: Цитировать cd C:\Users\BotNetVN\Desktop\boost_1_42_0\tools\jam\src (http://c.upanh.com/upload/4/736/CS0.8867275_1_1.png)bjam gcc release link=static boost= source why ? http://www.qtcentre.org/threads/29531-Build-Libtorrent-By-Mingw-windows-7 Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 10:44 i want build QT + Libtorrent + Mingw but when i do your instruction
error: Цитировать cd C:\Users\BotNetVN\Desktop\boost_1_42_0\tools\jam\src (http://c.upanh.com/upload/4/736/CS0.8867275_1_1.png)bjam gcc release link=static boost= source why ? http://www.qtcentre.org/threads/29531-Build-Libtorrent-By-Mingw-windows-7 if you free, can you upload your project ?, thanks Название: Re: Генерация .torrent файла Отправлено: niXman от Апрель 05, 2010, 11:06 run in console "g++" and show a screenshot
Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 12:48 yes,thank,i was found error set Path=c:\MinGw\bin;%Path%
but when i edit path in my computer then still error (http://c.upanh.com/upload/4/743/CS0.8873699_1_1.png) i was set enviroment set BOOST_BUILD_PATH=D:\boost_1_42_0\tools\build\v2 set BOOST_ROOT=D:\boost_1_42_0 (http://c.upanh.com/upload/4/743/CS0.8874203_1_1.png) Название: Re: Генерация .torrent файла Отправлено: niXman от Апрель 05, 2010, 13:14 Create in the directory with the source code of boost the *.bat file containing this string:
Цитировать bjam toolset=gcc --build-type=complete link=static install --builddir=c:\boost bjam.exe has to be in the some directory.or you may download it out of here: http://rghost.ru/1000037 Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 13:30 but i need build libtorrent.lib,hihi, i was build boost binary mingw 4.4.0: http://forums.congdongcviet.com/showthread.php?t=28355
http://www.mediafire.com/?ow4wdmzwmlk can you help me do that ? beacase i dont known location libboost in folder boost_1_42_0 Название: Re: Генерация .torrent файла Отправлено: niXman от Апрель 05, 2010, 13:36 that you want to do?
what have you done? what does not? Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 13:46 I wanted to write a program that can create. torrent on QTcreator , I know compiling boost library but I do not know how to compile library libtorrent.lib, I follow the instructions at this address: http://www.prog.org.ru/topic_12620_0.html, but I have trouble
(http://c.upanh.com/upload/4/743/CS0.8873699_1_1.png) can you help me build Libtorrent.lib note: I am not Russian, I am from Vietnam, I speak English was not good enough, thank you for your interest Название: Re: Генерация .torrent файла Отправлено: niXman от Апрель 05, 2010, 13:57 in the root of the sources of boost, type this:
Цитировать bjam toolset=gcc --build-type=complete link=static install --builddir=c:\boost and show the screenshotНазвание: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 14:15 yes,i was build boost lib (binary )
Цитировать bjam toolset=gcc --build-type=complete link=static install --builddir=c:\boost (http://c.upanh.com/upload/4/747/3L0.8877656_1_1.png) and then i run C:\Users\BotNetVN\Desktop\libtorrent-rasterbar-0.14.9\build.bat Цитировать bjam gcc release link=static runtime-link=static boost=source dht-support=off need-librt=no geoip=off upnp-logging=off character-set=ansi (http://c.upanh.com/upload/4/747/3L0.8877491_1_1.png) error .... why ? Название: Re: Генерация .torrent файла Отправлено: niXman от Апрель 05, 2010, 14:26 where is the error?
this is the warning ;) // oh, i see. show more information of build process. Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 05, 2010, 18:24 Цитировать bjam toolset=gcc --build-type=complete link=static install --builddir=c:\boost (http://c.upanh.com/upload/4/759/CS0.8889775_1_1.png) after I finished compiled boost ,what to do to be able to compile libtorrent I'm sorry, but I really want to compile libtorrent not boost (http://c.upanh.com/upload/4/760/VZ0.8890876_1_1.png) i see missing openssl/sha.h :(,why ? beacause i download this source code http://libtorrent.googlecode.com/files/libtorrent-rasterbar-0.14.9.tar.gz Название: Re: Генерация .torrent файла Отправлено: coder_gate от Апрель 13, 2010, 14:00 i builded success project create torrent but people on internet when use my .torrent cant download it beacause it dont seeding,can you help me seeding 1 file when it create .torrent ?
source code: http://www.mediafire.com/?j0do4g11ajr |