forked from premiere/premiere-libtorrent
merged changes from RC_1_0
This commit is contained in:
parent
07af6f6216
commit
862844e546
|
@ -27,6 +27,7 @@
|
|||
* almost completely changed the storage interface (for custom storage)
|
||||
* added support for hashing pieces in multiple threads
|
||||
|
||||
* support IPv6 traffic class (via the TOS setting)
|
||||
* made uTP re-enter slow-start after time-out
|
||||
* fixed uTP upload performance issue
|
||||
* fix missing support for DHT put salt
|
||||
|
|
|
@ -1162,6 +1162,8 @@ int main(int argc, char* argv[])
|
|||
// if there's a flag but no argument following, ignore it
|
||||
if (argc == i) continue;
|
||||
char const* arg = argv[i+1];
|
||||
if (arg == NULL) arg = "";
|
||||
|
||||
switch (argv[i][1])
|
||||
{
|
||||
case 'f': g_log_file = fopen(arg, "w+"); break;
|
||||
|
|
|
@ -135,6 +135,20 @@ namespace libtorrent
|
|||
};
|
||||
#endif
|
||||
|
||||
struct traffic_class
|
||||
{
|
||||
traffic_class(char val): m_value(val) {}
|
||||
template<class Protocol>
|
||||
int level(Protocol const&) const { return IPPROTO_IPV6; }
|
||||
template<class Protocol>
|
||||
int name(Protocol const&) const { return IPV6_TCLASS; }
|
||||
template<class Protocol>
|
||||
int const* data(Protocol const&) const { return &m_value; }
|
||||
template<class Protocol>
|
||||
size_t size(Protocol const&) const { return sizeof(m_value); }
|
||||
int m_value;
|
||||
};
|
||||
|
||||
struct type_of_service
|
||||
{
|
||||
#ifdef WIN32
|
||||
|
|
|
@ -520,6 +520,12 @@ namespace libtorrent
|
|||
peer_log(">>> SET_TOS[ tos: %d e: %s ]", m_settings.get_int(settings_pack::peer_tos), ec.message().c_str());
|
||||
#endif
|
||||
}
|
||||
#if TORRENT_USE_IPV6
|
||||
else if (m_remote.address().is_v6() && m_settings.get_int(settings_pack::peer_tos) != 0)
|
||||
{
|
||||
m_socket->set_option(traffic_class(m_settings.get_int(settings_pack::peer_tos)), ec);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined TORRENT_VERBOSE_LOGGING
|
||||
|
@ -6368,6 +6374,12 @@ namespace libtorrent
|
|||
peer_log(">>> SET_TOS[ tos: %d e: %s ]", m_settings.get_int(settings_pack::peer_tos), ec.message().c_str());
|
||||
#endif
|
||||
}
|
||||
#if TORRENT_USE_IPV6
|
||||
else if (m_remote.address().is_v6() && m_settings.get_int(settings_pack::peer_tos) != 0)
|
||||
{
|
||||
m_socket->set_option(traffic_class(m_settings.get_int(settings_pack::peer_tos)), ec);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
for (extension_list_t::iterator i = m_extensions.begin()
|
||||
|
|
|
@ -2597,12 +2597,9 @@ retry:
|
|||
}
|
||||
|
||||
if (m_settings.get_int(settings_pack::peer_tos) != 0) {
|
||||
m_udp_socket.set_option(type_of_service(m_settings.get_int(settings_pack::peer_tos)), ec);
|
||||
#if defined TORRENT_VERBOSE_LOGGING
|
||||
session_log(">>> SET_TOS[ udp_socket tos: %x e: %s ]"
|
||||
, m_settings.get_int(settings_pack::peer_tos), ec.message().c_str());
|
||||
#endif
|
||||
update_peer_tos();
|
||||
}
|
||||
|
||||
ec.clear();
|
||||
|
||||
set_socket_buffer_size(m_udp_socket, m_settings, ec);
|
||||
|
@ -7034,7 +7031,14 @@ retry:
|
|||
void session_impl::update_peer_tos()
|
||||
{
|
||||
error_code ec;
|
||||
|
||||
#if TORRENT_USE_IPV6
|
||||
if (m_udp_socket.local_endpoint(ec).address().is_v6())
|
||||
m_udp_socket.set_option(traffic_class(m_settings.get_int(settings_pack::peer_tos)), ec);
|
||||
else
|
||||
#endif
|
||||
m_udp_socket.set_option(type_of_service(m_settings.get_int(settings_pack::peer_tos)), ec);
|
||||
|
||||
#if defined TORRENT_VERBOSE_LOGGING
|
||||
session_log(">>> SET_TOS [ udp_socket tos: %x e: %s ]"
|
||||
, m_settings.get_int(settings_pack::peer_tos)
|
||||
|
|
|
@ -93,17 +93,25 @@ int test_main()
|
|||
std::vector<udp::endpoint> list;
|
||||
read_endpoint_list<udp::endpoint>(&e, list);
|
||||
|
||||
#if TORRENT_USE_IPV6
|
||||
TEST_EQUAL(list.size(), 2);
|
||||
TEST_EQUAL(list[0], udp::endpoint(address_v4::from_string("16.5.128.1"), 1337));
|
||||
TEST_EQUAL(list[1], udp::endpoint(address_v6::from_string("1000::ffff"), 1337));
|
||||
#else
|
||||
TEST_EQUAL(list.size(), 1);
|
||||
#endif
|
||||
TEST_EQUAL(list[0], udp::endpoint(address_v4::from_string("16.5.128.1"), 1337));
|
||||
|
||||
entry e2 = bdecode(eplist, eplist + sizeof(eplist)-1);
|
||||
list.clear();
|
||||
read_endpoint_list<udp::endpoint>(&e2, list);
|
||||
|
||||
#if TORRENT_USE_IPV6
|
||||
TEST_EQUAL(list.size(), 2);
|
||||
TEST_EQUAL(list[0], udp::endpoint(address_v4::from_string("16.5.128.1"), 1337));
|
||||
TEST_EQUAL(list[1], udp::endpoint(address_v6::from_string("1000::ffff"), 1337));
|
||||
#else
|
||||
TEST_EQUAL(list.size(), 1);
|
||||
#endif
|
||||
TEST_EQUAL(list[0], udp::endpoint(address_v4::from_string("16.5.128.1"), 1337));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue