Russian Qt Forum

Qt => Общие вопросы => Тема начата: XpycT от Август 04, 2009, 18:44



Название: Генерация .torrent файла
Отправлено: XpycT от Август 04, 2009, 18:44
Доброго времени суток.
Прошу вашей помощи в доделке генерации .torrent файла (не каталога). Дело в том, что остался только хеш pieces, но никак не получается его сделать..точнее не пойму что именно для него надо. Вот что у меня имеется
testapp.h
Код
C++ (Qt)
#ifndef TESTAPP_H
#define TESTAPP_H
 
#include <QDialog>
 
class testApp : public QDialog
{
   Q_OBJECT
public:
   testApp(QWidget *parent=0);
private slots:
   void generate();
};
 
#endif // TESTAPP_H
 
testapp.cpp
Код
C++ (Qt)
#include <QtGui>
#include "testapp.h"
 
testApp::testApp(QWidget *parent):QDialog(parent)
{
   QPushButton *openbtn=new QPushButton("OpenFile");
   QPushButton *genbtn=new QPushButton("Generate");
 
   QVBoxLayout *layout=new QVBoxLayout;
   layout->addWidget(openbtn);
   layout->addWidget(genbtn);
 
   setLayout(layout);
   connect(openbtn,SIGNAL(clicked()),this,SLOT(generate()));
}
void testApp::generate()
{
   QString announce="http://donald.org.ua/tracker/announce.php";
   QString createdby="BitTorrent/6120";
   int pieceslength= 256*1024;
   QString torrentcontent;
 
   QString fileName = QFileDialog::getOpenFileName(this,tr("Select Image"),
                                      QApplication::applicationDirPath(),
                                      tr("All Files (*.*)"));
   if(fileName.isEmpty())
           return;
 
   QFile file(fileName);
   QFileInfo fi(file);    
   if (!file.open(QIODevice::ReadOnly))
           return;
 
   QByteArray pieces = file.readAll();
   QByteArray tmp;
   QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Sha1);
   for (int i = 0; i < pieces.size(); i += 20){
               hash->reset();
               hash->addData(pieces.mid(i, 20));
               tmp.append(hash->result());
           }
 
 
   //hash->addData(pieces);
 
   torrentcontent = QString("d8:announce%1:%2")
                    .arg(announce.length()).arg(announce);
   torrentcontent.append(QString("10:created by%1:%2")
                         .arg(createdby.length()).arg(createdby));
   torrentcontent.append(QString("13:creation datei%1")
                         .arg(QDateTime::currentDateTime().currentDateTime().toTime_t()));
   torrentcontent.append(QString("e8:encoding5:UTF-84:infod6:lengthi%1e4:name%2:%3")
                         .arg(file.size()).arg(fi.fileName().length()).arg(fi.fileName()));
   torrentcontent.append(QString("12:piece lengthi%1e6:pieces%2:")
                         .arg(pieceslength).arg(hash->result().length()));
 
    QFile data("output.torrent");
    if (data.open(QFile::WriteOnly)) {
        QTextStream out(&data);
        out << torrentcontent << tmp;
 
    }
    data.close();
}
 
Ссылки на спецификацию формата:
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: 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)
т. е. разбиваем файл на куски размером piece length и применяем к ним функцию SHA1.


Название: Re: Генерация .torrent файла
Отправлено: XpycT от Август 04, 2009, 22:33
т. е. разбиваем файл на куски размером piece length и применяем к ним функцию SHA1.
Я то понял, и бью по pieces length
Код
C++ (Qt)
   int pieceslength= 64*1024;
   QByteArray pieces = QString(file.readAll()).toAscii();
   QByteArray tmp;
   QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Sha1);
   for (int i = 0; i < pieces.size(); i += pieceslength){
               hash->reset();
               hash->addData(pieces.mid(i, pieceslength));
               tmp.append(hash->result());
           }
   qDebug()  << tmp;
Но как на зло - результат не совпадает с тем, который должен получиться :(


Название: 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_1_34_0 получаю ошибку
Код:
BOOST_ROOT = d:\Qt4_tutorial\addin\boost_1_34_0
OS = NT
Building Boost.Regex with the optional Unicode/ICU support disabled.
Please refer to the Boost.Regex documentation for more information
(don't panic: this is a strictly optional feature).
error: Unable to find file or target named
error:     '/boost/system//boost_system'
error: referred from project at
error:     '.'
а в  boost_1_39_0
Код:
D:\Qt4_tutorial\addin\libtorrent-rasterbar-0.14.4>bjam gcc link=static boost=sou
rce
BOOST_ROOT = d:\Qt4_tutorial\addin\boost_1_39_0
OS = NT
WARNING: No python installation configured and autoconfiguration
         failed.  See http://www.boost.org/libs/python/doc/building.html
         for configuration instructions or pass --without-python to
         suppress this message and silently skip all Boost.Python targets
...patience...
...patience...
...found 2161 targets...
...updating 75 targets...
gcc.compile.c++ bin\gcc-mingw-3.4.5\debug\boost-source\link-static\threading-mul
ti\src\kademlia\dht_tracker.o
In file included from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/microse
c_time_clock.hpp:23,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/posix_t
ime/posix_time_types.hpp:11,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/detail/selec
t_reactor.hpp:25,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/impl/io_serv
ice.ipp:27,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/io_service.h
pp:550,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_io_obj
ect.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_socket
_acceptor.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/ip/tcp.hpp:2
0,
                 from include/libtorrent/socket.hpp:60,
                 from include/libtorrent/kademlia/node_entry.hpp:37,
                 from include/libtorrent/kademlia/routing_table.hpp:50,
                 from include/libtorrent/kademlia/node.hpp:40,
                 from src\kademlia\dht_tracker.cpp:45:
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp: In fu
nction `uint64_t boost::date_time::winapi::file_time_to_microseconds(const FileT
imeT&)':
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp:101: w
arning: left shift count >= width of type
include/libtorrent/bencode.hpp: In function `void libtorrent::detail::bdecode_re
cursive(InIt&, InIt, libtorrent::entry&, bool&, int) [with InIt = const char*]':

include/libtorrent/bencode.hpp:392:   instantiated from `libtorrent::entry libto
rrent::bdecode(InIt, InIt) [with InIt = const char*]'
src\kademlia\dht_tracker.cpp:447:   instantiated from here
include/libtorrent/bencode.hpp:250: error: `_strtoi64' was not declared in this
scope
include/libtorrent/bencode.hpp:250: warning: unused variable '_strtoi64'

    "g++"  -ftemplate-depth-128 -O0 -fno-inline -Wall -g -mthreads -Wno-missing-
braces -fno-strict-aliasing -DBOOST_ALL_NO_LIB -DBOOST_FILESYSTEM_STATIC_LINK=1
-DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION -DBOOST_SYSTEM_STATIC_LINK=1 -DBOOST_T
HREAD_USE_LIB -DBOOST_THREAD_USE_LIB=1 -DTORRENT_DEBUG -DTORRENT_DISABLE_GEO_IP
-DTORRENT_USE_OPENSSL -DUNICODE -DWIN32 -DWIN32_LEAN_AND_MEAN -D_FILE_OFFSET_BIT
S=64 -D_UNICODE -D_WIN32 -D_WIN32_WINNT=0x0500 -D__USE_W32_SOCKETS  -I"d:\Qt4_tu
torial\addin\boost_1_39_0" -I"\usr\sfw\include" -I"d:\Qt4_tutorial\addin\boost_1
_39_0" -I"include" -I"include\libtorrent" -I"zlib" -c -o "bin\gcc-mingw-3.4.5\de
bug\boost-source\link-static\threading-multi\src\kademlia\dht_tracker.o" "src\ka
demlia\dht_tracker.cpp"

...failed gcc.compile.c++ bin\gcc-mingw-3.4.5\debug\boost-source\link-static\thr
eading-multi\src\kademlia\dht_tracker.o...
gcc.compile.c++ bin\gcc-mingw-3.4.5\debug\boost-source\link-static\threading-mul
ti\src\kademlia\find_data.o
In file included from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/microse
c_time_clock.hpp:23,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/posix_t
ime/posix_time_types.hpp:11,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/detail/selec
t_reactor.hpp:25,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/impl/io_serv
ice.ipp:27,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/io_service.h
pp:550,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_io_obj
ect.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_socket
_acceptor.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/ip/tcp.hpp:2
0,
                 from include/libtorrent/socket.hpp:60,
                 from include/libtorrent/kademlia/node_entry.hpp:37,
                 from include/libtorrent/kademlia/routing_table.hpp:50,
                 from include/libtorrent/kademlia/traversal_algorithm.hpp:40,
                 from include/libtorrent/kademlia/find_data.hpp:38,
                 from src\kademlia\find_data.cpp:35:
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp: In fu
nction `uint64_t boost::date_time::winapi::file_time_to_microseconds(const FileT
imeT&)':
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp:101: w
arning: left shift count >= width of type
...interrupted
gcc.compile.c++ bin\gcc-mingw-3.4.5\debug\boost-source\link-static\threading-mul
ti\src\kademlia\node.o
In file included from src\kademlia\node.cpp:42:
include/libtorrent/hasher.hpp:46:25: openssl/sha.h: No such file or directory
In file included from src\kademlia\node.cpp:42:
include/libtorrent/hasher.hpp:116: error: `SHA_CTX' does not name a type
include/libtorrent/hasher.hpp: In constructor `libtorrent::hasher::hasher()':
include/libtorrent/hasher.hpp:90: error: `m_context' was not declared in this sc
ope
include/libtorrent/hasher.hpp:90: error: `SHA1_Init' was not declared in this sc
ope
include/libtorrent/hasher.hpp:90: warning: unused variable 'm_context'
include/libtorrent/hasher.hpp:90: warning: unused variable 'SHA1_Init'
include/libtorrent/hasher.hpp: In constructor `libtorrent::hasher::hasher(const
char*, int)':
include/libtorrent/hasher.hpp:93: error: `m_context' was not declared in this sc
ope
include/libtorrent/hasher.hpp:93: error: `SHA1_Init' was not declared in this sc
ope
include/libtorrent/hasher.hpp:96: error: `SHA1_Update' was not declared in this
scope
include/libtorrent/hasher.hpp:93: warning: unused variable 'SHA1_Init'
include/libtorrent/hasher.hpp:96: warning: unused variable 'SHA1_Update'
include/libtorrent/hasher.hpp: In member function `void libtorrent::hasher::upda
te(const char*, int)':
include/libtorrent/hasher.hpp:102: error: `m_context' was not declared in this s
cope
include/libtorrent/hasher.hpp:102: error: `SHA1_Update' was not declared in this
 scope
include/libtorrent/hasher.hpp:102: warning: unused variable 'm_context'
include/libtorrent/hasher.hpp:102: warning: unused variable 'SHA1_Update'
include/libtorrent/hasher.hpp: In member function `libtorrent::sha1_hash libtorr
ent::hasher::final()':
include/libtorrent/hasher.hpp:108: error: `m_context' was not declared in this s
cope
include/libtorrent/hasher.hpp:108: error: `SHA1_Final' was not declared in this
scope
include/libtorrent/hasher.hpp:108: warning: unused variable 'm_context'
include/libtorrent/hasher.hpp:108: warning: unused variable 'SHA1_Final'
include/libtorrent/hasher.hpp: In member function `void libtorrent::hasher::rese
t()':
include/libtorrent/hasher.hpp:112: error: `m_context' was not declared in this s
cope
include/libtorrent/hasher.hpp:112: error: `SHA1_Init' was not declared in this s
cope
include/libtorrent/hasher.hpp:112: warning: unused variable 'm_context'
include/libtorrent/hasher.hpp:112: warning: unused variable 'SHA1_Init'
In file included from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/microse
c_time_clock.hpp:23,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/posix_t
ime/posix_time_types.hpp:11,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/detail/selec
t_reactor.hpp:25,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/impl/io_serv
ice.ipp:27,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/io_service.h
pp:550,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_io_obj
ect.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/basic_socket
_acceptor.hpp:20,
                 from d:/Qt4_tutorial/addin/boost_1_39_0/boost/asio/ip/tcp.hpp:2
0,
                 from include/libtorrent/socket.hpp:60,
                 from include/libtorrent/kademlia/rpc_manager.hpp:45,
                 from src\kademlia\node.cpp:45:
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp: In fu
nction `uint64_t boost::date_time::winapi::file_time_to_microseconds(const FileT
imeT&)':
d:/Qt4_tutorial/addin/boost_1_39_0/boost/date_time/filetime_functions.hpp:101: w
arning: left shift count >= width of type
и далее аналогичные ошибки.

Ну или на крайний случай можешь выложить откомпиленную либу :(



Название: 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 конечно обидно :(.

Небольшой солюшен, может кому пригодится.
  • Качаем и собираем и статически собираем boost_1_39_0
  • Качаем Curl (в нем сразу есть и OpenSSL)
  • Качаем libtorrent-rasterbar-0.14.4 и вносим небольшие изменения:
1) Если компилятор выдает ошибки на _strtoi64, то в \libtorrent-rasterbar-0.14.4\include\libtorrent\bencode.hpp добавляем
   
Код
C++ (Qt)
#define _strtoi64(a,b,c) strtoll(a,b,c)
2) Если компилятор ругается на PROTECTION_LEVEL_UNRESTRICTED(для IPv6), то в \libtorrent-rasterbar-0.14.4\src\session_impl.cpp в начало добавляем
   
Код
C++ (Qt)
#define PROTECTION_LEVEL_UNRESTRICTED 10

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
TARGET = console
DEPENDPATH += .
INCLUDEPATH += . \
    ../../addin/libtorrent-rasterbar-0.14.4/include \ # путь к инклудам libtorrent
    ../../addin/boost_1_39_0 # наш буст
CONFIG += staticlib \
    static \
    console

SOURCES += main.cpp
# ну и либы от буста filesystem, thread, system, сам libtorrent, и если испольовали SSH то линкуем и виндосовские библиотеки.
win32:LIBS += -llibboost_system-mgw34-mt-1_39 -llibtorrent -llibboost_filesystem-mgw34 -llibboost_thread-mgw34-mt-1_39 -lws2_32 -lwsock32 -ladvapi32 -lwinmm -lssl32 -leay32 -lssleay32 -luser32 -lshell32 -lgdi32 -lcrypto -lssl

Может можно и проще исправить ошибки...допустим в 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 при добавлении файла в торрент. Тоесть сейчас у меня допустим
Код
C++ (Qt)
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
   QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
 
path full_path = complete(path(input_path.toLocal8Bit().data()));
а они советуют что-то вроде
Код
C++ (Qt)
path full_path = wchar_utf8((LPCTSTR)input_path.data());
Но в результате получаю ошибку как на скрине.


Название: 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


bjam gcc release link=static boost= source
(http://c.upanh.com/upload/4/736/CS0.8867275_1_1.png)

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


bjam gcc release link=static boost= source
(http://c.upanh.com/upload/4/736/CS0.8867275_1_1.png)

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