parent
dfc2206b9f
commit
ef1a24518d
|
@ -99,6 +99,7 @@ struct dht_node final : lt::dht::udp_socket_interface
|
||||||
, m_add_dead_nodes(flags & dht_network::add_dead_nodes)
|
, m_add_dead_nodes(flags & dht_network::add_dead_nodes)
|
||||||
, m_ipv6(flags & dht_network::bind_ipv6)
|
, m_ipv6(flags & dht_network::bind_ipv6)
|
||||||
{
|
{
|
||||||
|
m_dht_storage->update_node_ids({id_from_addr(m_io_service.get_ips().front())});
|
||||||
error_code ec;
|
error_code ec;
|
||||||
sock().open(m_ipv6 ? asio::ip::udp::v6() : asio::ip::udp::v4());
|
sock().open(m_ipv6 ? asio::ip::udp::v6() : asio::ip::udp::v4());
|
||||||
sock().bind(asio::ip::udp::endpoint(
|
sock().bind(asio::ip::udp::endpoint(
|
||||||
|
|
|
@ -152,6 +152,30 @@ int completed_pieces(lt::session& ses)
|
||||||
return h.status().num_pieces;
|
return h.status().num_pieces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
bool should_print(lt::alert* a)
|
||||||
|
{
|
||||||
|
using namespace libtorrent;
|
||||||
|
|
||||||
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
|
if (auto pla = alert_cast<peer_log_alert>(a))
|
||||||
|
{
|
||||||
|
if (pla->direction != peer_log_alert::incoming_message
|
||||||
|
&& pla->direction != peer_log_alert::outgoing_message)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (alert_cast<session_stats_alert>(a)
|
||||||
|
|| alert_cast<piece_finished_alert>(a)
|
||||||
|
|| alert_cast<block_finished_alert>(a)
|
||||||
|
|| alert_cast<block_downloading_alert>(a))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void utp_only(lt::settings_pack& p)
|
void utp_only(lt::settings_pack& p)
|
||||||
{
|
{
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
@ -327,10 +351,14 @@ void setup_swarm(int num_nodes
|
||||||
|
|
||||||
// only print alerts from the session under test
|
// only print alerts from the session under test
|
||||||
lt::time_duration d = a->timestamp() - start_time;
|
lt::time_duration d = a->timestamp() - start_time;
|
||||||
boost::uint32_t millis = lt::duration_cast<lt::milliseconds>(d).count();
|
boost::uint32_t const millis = lt::duration_cast<lt::milliseconds>(d).count();
|
||||||
std::printf("%4d.%03d: %-25s %s\n", millis / 1000, millis % 1000
|
|
||||||
, a->what()
|
if (should_print(a))
|
||||||
, a->message().c_str());
|
{
|
||||||
|
std::printf("%4d.%03d: %-25s %s\n", millis / 1000, millis % 1000
|
||||||
|
, a->what()
|
||||||
|
, a->message().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
// if a torrent was added save the torrent handle
|
// if a torrent was added save the torrent handle
|
||||||
if (lt::add_torrent_alert* at = lt::alert_cast<lt::add_torrent_alert>(a))
|
if (lt::add_torrent_alert* at = lt::alert_cast<lt::add_torrent_alert>(a))
|
||||||
|
|
|
@ -3264,12 +3264,14 @@ namespace libtorrent
|
||||||
|
|
||||||
abort_jobs();
|
abort_jobs();
|
||||||
|
|
||||||
|
TORRENT_ASSERT(m_magic == 0x1337);
|
||||||
|
|
||||||
// release the io_service to allow the run() call to return
|
// release the io_service to allow the run() call to return
|
||||||
// we do this once we stop posting new callbacks to it.
|
// we do this once we stop posting new callbacks to it.
|
||||||
COMPLETE_ASYNC("disk_io_thread::work");
|
COMPLETE_ASYNC("disk_io_thread::work");
|
||||||
w.reset();
|
w.reset();
|
||||||
|
// at this point, the disk_io_thread object may have been destructed.
|
||||||
TORRENT_ASSERT(m_magic == 0x1337);
|
// the call to w.reset() above is what synchronizes with the main thread
|
||||||
}
|
}
|
||||||
|
|
||||||
void disk_io_thread::abort_jobs()
|
void disk_io_thread::abort_jobs()
|
||||||
|
|
|
@ -507,7 +507,12 @@ namespace aux {
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
if (m_alerts.should_post<log_alert>())
|
// this alert is a bit special. Since it's so verbose it's not only
|
||||||
|
// filtered by its own alert type (log_alert) but also whether session
|
||||||
|
// stats alerts are actually enabled. Without session_stats alerts the
|
||||||
|
// headers aren't very useful anyway
|
||||||
|
if (m_alerts.should_post<log_alert>()
|
||||||
|
&& m_alerts.should_post<session_stats_alert>())
|
||||||
{
|
{
|
||||||
session_log(" *** session thread init");
|
session_log(" *** session thread init");
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ sha1_hash rand_hash()
|
||||||
address rand_v6()
|
address rand_v6()
|
||||||
{
|
{
|
||||||
address_v6::bytes_type bytes;
|
address_v6::bytes_type bytes;
|
||||||
for (int i = 0; i < int(bytes.size()); ++i) bytes[i] = rand();
|
for (int i = 0; i < int(bytes.size()); ++i) bytes[i] = lt::random();
|
||||||
return address_v6(bytes);
|
return address_v6(bytes);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -149,7 +149,27 @@ std::map<std::string, boost::int64_t> get_counters(libtorrent::session& s)
|
||||||
ret[metrics[i].name] = sa->values[metrics[i].value_index];
|
ret[metrics[i].name] = sa->values[metrics[i].value_index];
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
namespace {
|
||||||
|
bool should_print(lt::alert* a)
|
||||||
|
{
|
||||||
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
|
if (auto pla = alert_cast<peer_log_alert>(a))
|
||||||
|
{
|
||||||
|
if (pla->direction != peer_log_alert::incoming_message
|
||||||
|
&& pla->direction != peer_log_alert::outgoing_message)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (alert_cast<session_stats_alert>(a)
|
||||||
|
|| alert_cast<piece_finished_alert>(a)
|
||||||
|
|| alert_cast<block_finished_alert>(a)
|
||||||
|
|| alert_cast<block_downloading_alert>(a))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
alert const* wait_for_alert(lt::session& ses, int type, char const* name)
|
alert const* wait_for_alert(lt::session& ses, int type, char const* name)
|
||||||
{
|
{
|
||||||
time_point end = libtorrent::clock_type::now() + seconds(10);
|
time_point end = libtorrent::clock_type::now() + seconds(10);
|
||||||
|
@ -166,8 +186,11 @@ alert const* wait_for_alert(lt::session& ses, int type, char const* name)
|
||||||
for (std::vector<alert*>::iterator i = alerts.begin()
|
for (std::vector<alert*>::iterator i = alerts.begin()
|
||||||
, end(alerts.end()); i != end; ++i)
|
, end(alerts.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
std::fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name
|
if (should_print(*i))
|
||||||
, (*i)->what(), (*i)->message().c_str());
|
{
|
||||||
|
std::fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name
|
||||||
|
, (*i)->what(), (*i)->message().c_str());
|
||||||
|
}
|
||||||
if ((*i)->type() == type && !ret)
|
if ((*i)->type() == type && !ret)
|
||||||
{
|
{
|
||||||
ret = *i;
|
ret = *i;
|
||||||
|
@ -278,9 +301,7 @@ bool print_alerts(lt::session& ses, char const* name
|
||||||
{
|
{
|
||||||
std::fprintf(stderr, "%s: %s: [%s] (%s): %s\n", time_now_string(), name, (*i)->what(), print_endpoint(p->ip).c_str(), p->message().c_str());
|
std::fprintf(stderr, "%s: %s: [%s] (%s): %s\n", time_now_string(), name, (*i)->what(), print_endpoint(p->ip).c_str(), p->message().c_str());
|
||||||
}
|
}
|
||||||
else if ((*i)->message() != "block downloading"
|
else if (should_print(*i)
|
||||||
&& (*i)->message() != "block finished"
|
|
||||||
&& (*i)->message() != "piece finished"
|
|
||||||
&& !no_output)
|
&& !no_output)
|
||||||
{
|
{
|
||||||
std::fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name, (*i)->what(), (*i)->message().c_str());
|
std::fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name, (*i)->what(), (*i)->message().c_str());
|
||||||
|
@ -591,7 +612,7 @@ boost::shared_ptr<T> clone_ptr(boost::shared_ptr<T> const& ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char random_byte()
|
unsigned char random_byte()
|
||||||
{ return std::rand() & 0xff; }
|
{ return lt::random() & 0xff; }
|
||||||
|
|
||||||
void create_random_files(std::string const& path, const int file_sizes[], int num_files)
|
void create_random_files(std::string const& path, const int file_sizes[], int num_files)
|
||||||
{
|
{
|
||||||
|
|
|
@ -509,6 +509,7 @@ void do_test_dht(address(&rand_addr)())
|
||||||
obs observer;
|
obs observer;
|
||||||
counters cnt;
|
counters cnt;
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id(0)});
|
||||||
udp::endpoint source(rand_addr(), 20);
|
udp::endpoint source(rand_addr(), 20);
|
||||||
std::map<std::string, node*> nodes;
|
std::map<std::string, node*> nodes;
|
||||||
dht::node node(source.protocol(), &s, sett
|
dht::node node(source.protocol(), &s, sett
|
||||||
|
@ -1427,7 +1428,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
|
|
||||||
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
||||||
std::vector<udp::endpoint> nodesv;
|
std::vector<udp::endpoint> nodesv;
|
||||||
|
@ -1499,8 +1501,9 @@ void do_test_dht(address(&rand_addr)())
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
dht::node_id target = to_hash("1234876923549721020394873245098347598635");
|
dht::node_id target = to_hash("1234876923549721020394873245098347598635");
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
|
|
||||||
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
||||||
node.m_table.add_node(initial_node);
|
node.m_table.add_node(initial_node);
|
||||||
|
@ -1596,7 +1599,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
|
|
||||||
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
||||||
node.m_table.add_node(initial_node);
|
node.m_table.add_node(initial_node);
|
||||||
|
@ -1643,7 +1647,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
|
|
||||||
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
udp::endpoint initial_node(address_v4::from_string("4.4.4.4"), 1234);
|
||||||
node.m_table.add_node(initial_node);
|
node.m_table.add_node(initial_node);
|
||||||
|
@ -1731,7 +1736,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
int old_branching = sett.search_branching;
|
int old_branching = sett.search_branching;
|
||||||
sett.search_branching = 8;
|
sett.search_branching = 8;
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
enum { num_test_nodes = 8 };
|
enum { num_test_nodes = 8 };
|
||||||
node_entry nodes[num_test_nodes] =
|
node_entry nodes[num_test_nodes] =
|
||||||
{ node_entry(items[0].target, udp::endpoint(address_v4::from_string("1.1.1.1"), 1231))
|
{ node_entry(items[0].target, udp::endpoint(address_v4::from_string("1.1.1.1"), 1231))
|
||||||
|
@ -1832,7 +1838,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
int old_branching = sett.search_branching;
|
int old_branching = sett.search_branching;
|
||||||
sett.search_branching = 8;
|
sett.search_branching = 8;
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
enum { num_test_nodes = 8 };
|
enum { num_test_nodes = 8 };
|
||||||
node_entry nodes[num_test_nodes] =
|
node_entry nodes[num_test_nodes] =
|
||||||
{ node_entry(items[0].target, udp::endpoint(address_v4::from_string("1.1.1.1"), 1231))
|
{ node_entry(items[0].target, udp::endpoint(address_v4::from_string("1.1.1.1"), 1231))
|
||||||
|
@ -1935,7 +1942,8 @@ void do_test_dht(address(&rand_addr)())
|
||||||
int old_branching = sett.search_branching;
|
int old_branching = sett.search_branching;
|
||||||
sett.search_branching = 8;
|
sett.search_branching = 8;
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
dht::node node(udp::v4(), &s, sett, (node_id::min)(), &observer, cnt, nodes, *dht_storage);
|
dht_storage->update_node_ids({node_id::min()});
|
||||||
|
dht::node node(udp::v4(), &s, sett, node_id::min(), &observer, cnt, nodes, *dht_storage);
|
||||||
sha1_hash target = hasher(public_key, item_pk_len).final();
|
sha1_hash target = hasher(public_key, item_pk_len).final();
|
||||||
enum { num_test_nodes = 9 }; // we need K + 1 nodes to create the failing sequence
|
enum { num_test_nodes = 9 }; // we need K + 1 nodes to create the failing sequence
|
||||||
node_entry nodes[num_test_nodes] =
|
node_entry nodes[num_test_nodes] =
|
||||||
|
@ -2032,6 +2040,7 @@ TORRENT_TEST(dht_dual_stack)
|
||||||
counters cnt;
|
counters cnt;
|
||||||
std::map<std::string, node*> nodes;
|
std::map<std::string, node*> nodes;
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id(0)});
|
||||||
dht::node node4(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
dht::node node4(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
||||||
dht::node node6(udp::v6(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
dht::node node6(udp::v6(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
||||||
nodes.insert(std::make_pair("n4", &node4));
|
nodes.insert(std::make_pair("n4", &node4));
|
||||||
|
@ -2493,6 +2502,7 @@ TORRENT_TEST(read_only_node)
|
||||||
std::map<std::string, node*> nodes;
|
std::map<std::string, node*> nodes;
|
||||||
|
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id(0)});
|
||||||
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
||||||
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
||||||
bdecode_node response;
|
bdecode_node response;
|
||||||
|
@ -2583,6 +2593,7 @@ TORRENT_TEST(invalid_error_msg)
|
||||||
std::map<std::string, node*> nodes;
|
std::map<std::string, node*> nodes;
|
||||||
|
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id(0)});
|
||||||
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
||||||
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
||||||
|
|
||||||
|
@ -2624,6 +2635,7 @@ TORRENT_TEST(rpc_invalid_error_msg)
|
||||||
dht::routing_table table(node_id(), udp::v4(), 8, sett, &observer);
|
dht::routing_table table(node_id(), udp::v4(), 8, sett, &observer);
|
||||||
dht::rpc_manager rpc(node_id(), sett, table, &s, &observer);
|
dht::rpc_manager rpc(node_id(), sett, table, &s, &observer);
|
||||||
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
std::unique_ptr<dht_storage_interface> dht_storage(dht_default_storage_constructor(sett));
|
||||||
|
dht_storage->update_node_ids({node_id(0)});
|
||||||
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
dht::node node(udp::v4(), &s, sett, node_id(0), &observer, cnt, nodes, *dht_storage);
|
||||||
|
|
||||||
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
udp::endpoint source(address::from_string("10.0.0.1"), 20);
|
||||||
|
|
Loading…
Reference in New Issue