Closed chertov closed 7 years ago
bool DL_GroupParameters_IntegerBased::ValidateElement(unsigned int level, const Integer &g, const DL_FixedBasePrecomputation<Integer> *gpc) const
{
const Integer &p = GetModulus(), &q = GetSubgroupOrder();
bool pass = true;
===> pass = pass && GetFieldType() == 1 ? g.IsPositive() : g.NotNegative();
pass = pass && g < p && !IsIdentity(g);
это кусок из CRYPT, после которого все падает. Вызывается в class DL_PublicKeyImpl:
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
{
bool pass = GetAbstractGroupParameters().Validate(rng, level);
pass = pass && GetAbstractGroupParameters().ValidateElement(level, this->GetPublicElement(), &GetPublicPrecomputation());
return pass;
}
почему так, пока не понял
===> pass = pass && GetFieldType() == 1 ? g.IsPositive() : g.NotNegative();
в этот момент pass становится false
Похоже я знаю в чем дело: скорее всего коструктор переменной i2p::data::context вызывается раньше чем инициализируются константы из CryptoConst.h
UPD: Починил
сейчас попробую пересобрать...
В консоль пишет signature verification failed, вылетает тут
//! throws InvalidMaterial if this object fails Validate() test
virtual void ThrowIfInvalid(RandomNumberGenerator &rng, unsigned int level) const
===> {if (!Validate(rng, level)) throw InvalidMaterial("CryptoMaterial: this object contains invalid values");}
при чтении netDb\r0\routerInfo-0HRiZlDcB2eegk6sA0oreq3xQJSpoJacLmb141ROwfE=.dat
и как и раньше при последующих запусках
// когда читает router.info в void RouterInfo::ReadFromFile (const char * filename)
// выкидывает
/// Run-Time Check Failure #2 - Stack around the variable 'value' was corrupted.
void RouterInfo::ReadFromStream (std::istream& s)
{
...
// тут в конце
===> }
Удалите router.info и router.keys и запустите по новой. Это по поводу неверной подписи.
По второму вопросу что там с чтением из файла буду смотреть.
пробовал, вылетает... думаю пока линукс не поставлю и не сравню с ним трудно будет поймать...
кажется нашел... ноут правда повис)
помню спотыкался о нечто похожее... в винде приходилось явно указывать что читать файл нужно бинарным, а в древнем военном линуксе работало нормально
в RouterInfo.cpp, 44 строка
std::ifstream s(filename);
std::ifstream s(filename, std::ios::binary);
Да конечно так оно и есть, в юниксах же нет этого дурацкого \r\n. pull request сделайте
у меня скомпилился, запустился, повис и даже процесс не убивается) ушел на ребут
сейчас подготовлю
Я ж говорю наверное на условных переменных как надо не засыпает. Это смотреть и разбираться надо какой именно поток такую гадость делает.
перезапускал, когда грузит файлы из netDb, то вываливается Stack around the variable 'value' was corrupted и еще какой-то переменной...
попробуй в main все закомментить и смотреть что не так по проядку... как ловить эти условные переменные сейчас смутно представляю)
есть кусок кода в void RouterInfo::ReadFromStream (std::istream& s)
char key[50], value[50];
r += ReadString (key, s);
s.seekg (1, std::ios_base::cur); r++; // =
r += ReadString (value, s);
s.seekg (1, std::ios_base::cur); r++; // ;
использует функцию ReadString
size_t RouterInfo::ReadString (char * str, std::istream& s)
{
uint8_t len;
s.read ((char *)&len, 1);
s.read (str, len);
str[len] = 0;
return len+1;
}
значение переменной len в дебаггере бывает достигает 86, какой-то длинный идентификатор версии, номера билда/сборки что ли...
Спасибо за находку. Поправлю. Еще, если вас не затруднит, загляните внутрь самого файла что именно это.
странно выглядит... файл router.info str получается "caps=LR;coreVersion=0.9.8.1;netId=2;router.version=0.9.8.1;start_uptime=90m;" значение len=86
также проскакивают в этом же файле значения len 204... строка аналогичного вида
тупо увеличил везде буфферы до 500 вместо 50-ти...
//char key[50], value[50];
char key[500], value[500];
и оно начало работать)
248 routers loaded
Start listening port 17007
Creating zero hops inbound tunnel...
I2NP msg received len=545, type=23, msgID=0
VariableTunnelBuild
VariableTunnelBuild 1 records
Record 0 is ours
TransitTunnel gateway: 3700403565 created
I2NP msg received len=4370, type=23, msgID=555
VariableTunnelBuild
VariableTunnelBuild 1 records
VariableTunnelBuild reply for tunnel 575107807
TunnelBuildResponse 1 records.
Ret code=0
Inbound tunnel 575107807 has been created
I2NP msg received len=545, type=23, msgID=16777216
VariableTunnelBuild
VariableTunnelBuild 1 records
Record 0 is ours
TransitTunnel endpoint: 3807760356 created
TunnelGateway
TunnelGateway of 4625 bytes for tunnel 1840091100
Tunnel 1840091100 not found
Creating one hop outbound tunnel...
Connecting to 78.201.20.194:27989
Connected
Phase 1 sent: 288
Phase 2 received: 304
Phase 3 sent: 448
Phase 4 received: 48
NTCP session connected
Msg sent: 16
Msg sent: 656
Msg sent: 560
Pending tunnel build request 555 has not been responded. Deleted
на этом вылетело... вот тут:
~TunnelConfig ()
{
TunnelHopConfig * hop = m_FirstHop;
while (hop)
{
delete hop;
====> hop = hop->next;
}
}
По поводу строки в RouterInfo: там вообще то перед каждым полем идет 1 байт с длиной строки, который и чиатается в переменную len. 86 это код символа 'V' - явно где то все съехало, возможно из-за как раз лишнего символа конца строки в windows. На самом деле там сначала идут 2 байта длины всех эти свойств, а далеше уже поля, и похоже они где то потерялись.
да, чувствуется... там в дебаггере в строке видны квадратики, сразу показалось что он их разбить не смог перед этим 86 len было равно 0... ищу нестыковки...
delete hop;
====> hop = hop->next;
стабильно падает... а так уже видел в браузере 7070 сервер, циферки и адрес флибусты! хотелось бы ее сегодня увидеть)
Там где падает это явная "детская" ошибка :) Уже починил. Перекомпилируйте.
Ну и отлично! Работает не падает) набирает на 7070 какие-то айпишники, на флибусте пока пишет LeaseSet not found также пишет ошибки Read error: и Connect error:, текст квакозябрами... как вернуть нормальный кажется знаю
Долго он по времени может флибусту не открывать?
Вы свой внешний IP прописали? А то у вас тоннели не будут создаваться по причине того что соседи не будут знать как до вас достучаться. Смотрите что в консоли пишет - должно быть много "New RouterInfo added" потому что у вас сейчас сетевая база маленькая и будут постоянно обнаруживаться неизвестные узлы. Флибусту он откроет когда найдет ее LeaseSet, а найдет он ее тогда когда обратится к floodfill-у, который про нее знает. Вообщем надо терпеливо запрашивать эту страницу. Когда найдет LeaseSet, то станет посылать запрос в тоннели, через несколько попыток дело закончится успехом и придет страница. У меня примерно минуты через две после старта все получается, но у меня узлов много в базе.
В консоль пишет иногда Phase 1 sent: 288 Phase 2 read error: End of file. Wrong ident assumed
NTCP session terminated
3 routers deleted
А куда и как ip правильно прописать нужно и какой порт указать? Пробросить через роутер смогу...
Только что упало вот тут:
while (hop)
{
EncryptBuildRequestRecord (*hop->router,
CreateBuildRequestRecord (hop->router->GetIdentHash (),
hop->tunnelID,
hop->nextRouter->GetIdentHash (),
hop->nextTunnelID,
hop->layerKey, hop->ivKey,
hop->replyKey, hop->replyIV,
hop->next ? rnd.GenerateWord32 () : replyMsgID, // we set replyMsgID for last hop only
hop->isGateway, hop->isEndpoint),
===> records[i]);
i++;
hop = hop->next;
}
сообщение прочесть не успел...
То что та сторона дает отлуп после первого сообщения скорее всего означает что этот узел устарел и на том IP уже сидит другой I2P адрес.Я такие узлы удаляю из базы - со временем все приходит в норму и большинство узлов становятся живыми. Надо в main первой строчкой написать i2p::context.OverrideNTCPAddress (<внешний IP>, <порт>); IP адрес который у вас на роутере снаружи, порт можете выбрать любой, естественно пробрасываете его.
Почему там упало посмотрю, на первый взгляд опять выход за пределы диапазона.
Так, порты пробрасывал, но все равно не подключалось... зато нашел баги с загрузкой файлов
m_Timestamp = be64toh (m_Timestamp);
be64toh не преобразовывала нормально, версию endian.h с хабра заменил на ту что нашел (в первом сообщении топика ссылка)
Также после долгой работы вылетела в NetDb.cpp, void NetDb::HandleDatabaseSearchReplyMsg (I2NPMessage * msg) вот тут:
else
{
// no more requests for detination possible. delete it
m_RequestedDestinations.erase (it);
===> delete it->second;
}
Что значит не подключилась? С другими узлами соединяется? Тоннели создаются? Сообщения какие нибудь приходят?
Порт пробросил, сканер портов показывал что он открыт, но на флибусту не получалось зайти... С другими узлами соединяется, часто пишет что коннектед куда-то... сейчас не могу логи показать, но прикреплю позже
Так на флибусту сразу зайти и не получится. Сначала посмотрите насколько у вас увеличилось количество узлов в директории netDb. Когда их станет достаточно много после очередной попытки зайти на флибусту вы увидите сообщение вроде этого LesetSet num=5. Потом уже будет быстро.
под линуксом скомпилил на сервере... пришлось добавить в Makefile -lpthread в LDFLAGS, пробросил порт на винду и смотрел что там на 7070... флибуста открылась! под линуксом падает (выкидывает Segmentation fault), запустил под дебагером, но под дебагером падать не хочет)
На винде работает, но роутеры новые не добавляет... ip у меня серый, не доступен из инета... флибусту посмотреть не получается
Насчет Segmentation fault разершите создание core файлов командой ulimit -c unlimited. Когда грохнется снова то создастся файл core, потом его gdb i2p core и внутри команда where и будет понятно где. Я знаю что иногда грохается - не было времени посмотреть.
С серым IP в приниципе это не помеха, вы можете завести себе ipv6 адрес через тоннель, разумеется придется в нескольких местах поправить но принципиально ничего не поменяется. Сам этим еще не занимался потому что есть белый IP.
Пробросил порт, работает! находит новые роутеры и добавляет, но есть две проблемы:
1) видимо он сохраняет в netDb новые файлы... и сохраняются они криво, скорее всего опять с std::ios::binary что-то связано. При повторном запуске он не может их прочитать, пишет signature verification failed. Постараюсь пофиксить.
2) Во время работы с чистой netDb находит роутеры, подключается, но падает в нескольких местах... в NetDb.cpp
if (it != m_RequestedDestinations.end ())
{
m_RequestedDestinations.erase (it);
478 ===> delete it->second;
}
и в Garlic.cpp
if (it != m_Sessions.end ())
{
m_Sessions.erase (it);
240 ===> delete it->second;
}
GarlicRoutingSession * session = new GarlicRoutingSession (destination, 0); // not follow-on messages expected
Флибуста открылась под виндой!) orignal, спасибо за прекрасную работу!
Починил баг с сохранением файлов в NetDB, там std::ofstream::binary мешал. Добавил вывод в консоли русских символов. Ошибки на русском теперь нормально пишет. Работает уже минут 30, не падает! Загрузка процессора очень маленькая, памяти есть 5.5мб. Заметил что при обновлении 127.0.0.1:7070 страничка обновляется с существенной задержкой. Главная страница со статистикой подвисает секунд на 5, иногда обновляется мгновенно. При этом в консоли активно выводится лог, нет ощущения что приложение тормозит, может отдельный поток чего-то ждет...
Странно я у себя такого не замечал. На главной странице нечего ждать - там просто тупой проход несколькими итераторами.
P.S: Понял в чем дело: у вас там скорее всего еще где то запрос к Флибусте висит, там в запросе надо не подвешивать весь поток, а ждать асинхронно.
после нескольких часов работы вылетел... вот колл стек:
i2pd.exe!boost::asio::detail::win_iocp_socket_service_base::interlocked_compare_exchange_pointer(void * * dest, void * exch, void * cmp) Line 632
i2pd.exe!boost::asio::detail::win_iocp_socket_service_base::close(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type & impl, boost::system::error_code & ec) Line 176
i2pd.exe!boost::asio::stream_socket_service<boost::asio::ip::tcp>::close(boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::implementation_type & impl, boost::system::error_code & ec) Line 170
i2pd.exe!boost::asio::basic_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >::close() Line 357
i2pd.exe!i2p::ntcp::NTCPSession::Terminate() Line 53
i2pd.exe!i2p::ntcp::NTCPSession::HandleReceived(const boost::system::error_code & ecode, unsigned int bytes_transferred) Line 370
i2pd.exe!boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>::operator()(i2p::ntcp::NTCPSession * p, const boost::system::error_code & a1, unsigned int a2) Line 280
i2pd.exe!boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> >::operator()<boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list2<boost::system::error_code const &,unsigned int const &> >(boost::_bi::type<void> __formal, boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int> & f, boost::_bi::list2<boost::system::error_code const &,unsigned int const &> & a, int __formal) Line 393
i2pd.exe!boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >::operator()<boost::system::error_code,unsigned int>(const boost::system::error_code & a1, const unsigned int & a2) Line 103
i2pd.exe!boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >,boost::system::error_code,unsigned int>::operator()() Line 129
i2pd.exe!boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >,boost::system::error_code,unsigned int> >(boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >,boost::system::error_code,unsigned int> & function, ...) Line 70
i2pd.exe!boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >,boost::system::error_code,unsigned int>,boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > > >(boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > >,boost::system::error_code,unsigned int> & function, boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > > & context) Line 37
i2pd.exe!boost::asio::detail::win_iocp_socket_recv_op<boost::asio::mutable_buffers_1,boost::_bi::bind_t<void,boost::_mfi::mf2<void,i2p::ntcp::NTCPSession,boost::system::error_code const &,unsigned int>,boost::_bi::list3<boost::_bi::value<i2p::ntcp::NTCPSession *>,boost::arg<1>,boost::arg<2> > > >::do_complete(boost::asio::detail::win_iocp_io_service * owner, boost::asio::detail::win_iocp_operation * base, const boost::system::error_code & result_ec, unsigned int bytes_transferred) Line 97
i2pd.exe!boost::asio::detail::win_iocp_operation::complete(boost::asio::detail::win_iocp_io_service & owner, const boost::system::error_code & ec, unsigned int bytes_transferred) Line 46
i2pd.exe!boost::asio::detail::win_iocp_io_service::do_one(bool block, boost::system::error_code & ec) Line 404
i2pd.exe!boost::asio::detail::win_iocp_io_service::run(boost::system::error_code & ec) Line 162
i2pd.exe!boost::asio::io_service::run() Line 59
i2pd.exe!i2p::Transports::Run() Line 86
Понятно, там race condition, когда с одной стороны соединение закрывается и удаляется, а с другой стороны кто то пытается к нему обратиться.
c:\users\mikhail\documents\github\i2pd\streaming.cpp(381): error C3861: 'htonll': identifier not found
вот что словил при компиляции
http://msdn.microsoft.com/en-us/library/windows/desktop/jj710199%28v=vs.85%29.aspx
а вот почему) там Minimum supported client Windows 8 [desktop apps only] chertov, у вас там виндовс 8 чтоли? на 7ке не работает, там же в I2PEndian ровно это закомментировано было. Надо как-то чинить реализацию с хабра.
be64toh не преобразовывала нормально,
это прям точно?
ладно, с бигиндиан я разобрался. но теперь тоже эта фигня
https://github.com/orignal/i2pd/issues/5#issuecomment-32960340
как понять что там мне из базы удалить, чтобы заработало?
Ничего не надо удалять - сам догадается что те маршутизаторы неправильные и выкинет их. Если ничего не находит то надо снова официальный клиент погонять некоторое время чтобы он перечитал базу и скопировать. Meeh начал заниматься тем чтобы и здесь это работало также.
mikhail4021, работает и на семерке и на восьмерке! тут же от компилятора зависит скорее, а не от версии винды... версия с хабра мне самому больше нравилась, просто функция получала число и не преобразовывала... в деббагере это было явно видно, разбираться было некогда, поэтому и схватил старую версию... она работала
собрал последнюю версию... ip серый, но роутеры находит и флибуста открылась! я так понимаю i2pd теперь может и на серых ip работать? Это благодаря реализации SSU?
SSU еще не реализован полностью. Почему у вас работает с серым IP честно говоря не знаю, не должен. Посмотрите на главной странице как обстоят дела со входящими тоннелями и печатаются ли сообщения вида "Connected from".
Connected from не вижу... а на страничке статистики есть строки вида: -->3681576963:ZWzj-->4115847519:Uefo-->2786370774:me 72918 -->2155486015:YCXT-->1662340038:Uefo-->3818465328:me 60752 New RouterInfo added постоянно строчит, сохраняет подключался через йоту, причем ета к роутеру, а он в сеть раздает локальные ip... и вроде у еты сейчас адреса все серые, внешние только для юрлиц флибуста открывалась, постараюсь все проверить...
пытаюсь реализовать простенький прокси сервер, с помощью https://github.com/joyent/http-parser парсю запросы от браузера и получаю хост, путь нечто вроде flibusta.i2p и /index.php Сейчас можно как-нибудь сконвертить flibusta.i2p в base32 адрес? пока что железно забиваю... типа как в hosts "наброски" в моем форке в ветке proxy если интересно https://github.com/chertov/i2pd/tree/proxy
Если я из другого потока буду работать с i2pd аналогично тому как это происходит в HTTPServer ничего страшного не произойдет?) функции i2p::stream::CreateStream, i2p::data::netdb.FindLeaseSet, i2p::data::Base32ToByteStream должны адекватно работать?
извиняюсь что в топике про поддержку Windows... работает вроде бы прокси флибусту открыло!
все жутко тормозит, но даже по ссылкам удалось немного походить... изменения пока буду коммитить в свою ветку: https://github.com/chertov/i2pd/tree/proxy там каша не хочется в основной репозиторий ее заливать
минут по 3-10 загружает страничку (основу - html), потом пишет Leases expired, если обновлять, то через какое-то время находит новый leaseSet и все снова, но работает!
Сейчас можно как-нибудь сконвертить flibusta.i2p в base32 адрес?
Он на главной странице флибусты есть. Было бы неплохо также реализовать разыменование адресов. Это работа с фалума hosts.txt и hostsdb.blockfile
Connected from не вижу... а на страничке статистики есть строки вида: -->3681576963:ZWzj-->4115847519:Uefo-->2786370774:me 72918 -->2155486015:YCXT-->1662340038:Uefo-->3818465328:me 60752
Скорее всего дело вот в этом 1662340038:Uefo -у вас к этому узлу есть исходящее соединение где то.
все жутко тормозит, но даже по ссылкам удалось немного походить... изменения пока буду коммитить в свою ветку: https://github.com/chertov/i2pd/tree/proxy там каша не хочется в основной репозиторий ее заливать
Посмотрел ваш код: тормозит все из-за этого std::this_thread::sleep_for (std::chrono::seconds(10)); // wait for 10 seconds не следует этого делать внутри асинхронных операций. Я это сделал чисто для отладки. Вообще LeaseSet следует запрашивать независимо, более того я бы делал это по таймеру - как только появился интерес к какому ту адресу то запросить его первый раз, а потом бы заводит таймер на время истечения первого тоннеля. Другая беда но это уже у меня что еще пока нету асинхронной версии Receive в Stream. Еще не понял зачем вам понадобился Cи-шный функтор, сделайте его методом класса, а потом bind-ом.
я имел в виду тормоза на этапе загрузки страницы, после того как он уже получил leaseSet и начал грузить страницу... заголовок виден, и так и висит несколько минут... видимо это условия в самой сети i2p такие, но хочется проверить под линуксом... оригинальный клиент немного быстрее справлялся, но он дольше работал
На мой взгляд страничка не должна писать "LeaseSet not found" или "Leases expired", "Not responding"... клиент i2p должен делать все возможное для установки соединения и если уж за некоторое время (допустим 5 минут) не смог, то вернуть ошибку прокси-сервера... вроде бы есть такие стандартные. Но пока для отладки эти сообщения очень удобны.
Про таймер тоже подумал, т.к. часто ловил "Leases expired".
я имел в виду тормоза на этапе загрузки страницы, после того как он уже получил leaseSet и начал грузить страницу... заголовок виден, и так и висит несколько минут... видимо это условия в самой сети i2p такие, но хочется проверить под линуксом... оригинальный клиент немного быстрее справлялся, но он дольше работал
У меня ничего такого не наблюдается - если уж он получил первое сообщение то остальные приходят в течении нескольких секунд. Возможно у вас дело во входящих тоннелях, то есть тоннели как бы есть но реально они нерабочие, потому что последний перед вами узел не может до вас достучаться. Если хотите это проверить то можете попробовать убрать таймаут в NTCPSession.cpp чтобы не закрывать соединение принудительно после минуты неактивности. Правда потом другая сторона закроет правда не знаю через какое время.
На мой взгляд страничка не должна писать "LeaseSet not found" или "Leases expired", "Not responding"... клиент i2p должен делать все возможное для установки соединения и если уж за некоторое время (допустим 5 минут) не смог, то вернуть ошибку прокси-сервера... вроде бы есть такие стандартные. Но пока для отладки эти сообщения очень удобны.
Естественно не должна. Надо как в официальном клиенте выдавать страницу что не получается и объяснять почему. Эти сообщения я сделал именно для отладки чтобы смотреть в чем проблема.
Собрал исходники с помощью Visual Studio 2013. Вроде бы компилируется, запускается, но есть проблемы. При первом запуске создает два файла router.info и router.keys (в них какая-то каша). Виндовский фаервол спросил разрешить или нет, видимо сервер открыл порт. Пишет такой лог:
и падает в void Tunnel::Build (uint32_t replyMsgID, OutboundTunnel * outboundTunnel) в этой точке:
При последующих запусках не может распарсить router.info и соответственно вылетает.
При компиляции был собран boost 1.55 и crypto++ 5.6.2 и возникли следующие проблемы: 1) Компилятор vs2013 пока не умеет спецификаторы default, но, к счастью, их всего несколько. В коде эти конструкторы не использовались, поэтому большую часть просто закомментил (классы IdentHash и RouterInfo).
2) В винде нету endian.h, использовал такую версию https://gist.github.com/panzi/6856583
3) тип ssize_t отсутствует, не разбирался пока, просто убрал одну s)
4) Отсутствует gmtime_r. Пока оставил так:
5) функция sleep в винде начинается с заглавной буквы Sleep
Под линуксом не собирал, думаю стоит поставить линукс и искать 10 отличий) Очень бы хотелось иметь кросплатформенные исходники и собирать проект родным компилятором под виндой.