diff --git a/CMakeLists.txt b/CMakeLists.txt index 74b5b5c47..fd246ce55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,7 +162,6 @@ option(tcmalloc "link against google performance tools tcmalloc" OFF) option(pool-allocators "Uses a pool allocator for disk and piece buffers" ON) option(encryption "link against openssl and enable encryption" ON) option(dht "enable support for Mainline DHT" ON) -option(resolve-countries "enable support for resolving countries from peer IPs" ON) option(unicode "enable unicode support" ON) option(deprecated-functions "enable deprecated functions for backwards compatibility" ON) option(exceptions "build with exception support" ON) @@ -285,10 +284,6 @@ if (NOT pool-allocators) add_definitions(-DTORRENT_DISABLE_POOL_ALLOCATOR) endif() -if (NOT resolve-countries) - add_definitions(-DTORRENT_DISABLE_RESOLVE_COUNTRIES) -endif() - if (unicode) add_definitions(-DUNICODE -D_UNICODE) endif() diff --git a/ChangeLog b/ChangeLog index 956b362b1..d5c1b4943 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ + * removed feature to resolve country for peers * added support for BEP 32, "IPv6 extension for DHT" * overhauled listen socket and UDP socket handling, improving multi-home support and bind-to-device diff --git a/Jamfile b/Jamfile index 5733700fd..a96641f7a 100644 --- a/Jamfile +++ b/Jamfile @@ -476,9 +476,6 @@ feature crypto : built-in openssl gcrypt : composite propagated ; feature.compose openssl : TORRENT_USE_OPENSSL ; feature.compose gcrypt : TORRENT_USE_GCRYPT ; -feature resolve-countries : on off : composite propagated link-incompatible ; -feature.compose off : TORRENT_DISABLE_RESOLVE_COUNTRIES ; - feature character-set : unicode ansi : composite propagated link-incompatible ; feature.compose unicode : _UNICODE UNICODE ; diff --git a/bindings/python/src/peer_info.cpp b/bindings/python/src/peer_info.cpp index 3fd7fd045..dcd6679d0 100644 --- a/bindings/python/src/peer_info.cpp +++ b/bindings/python/src/peer_info.cpp @@ -25,15 +25,6 @@ boost::int64_t get_download_queue_time(peer_info const& pi) return total_seconds(pi.download_queue_time); } -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES -str get_country(peer_info const& pi) -{ - return str(pi.country, 2); -} -#endif -#endif // TORRENT_NO_DEPRECATE - tuple get_local_endpoint(peer_info const& pi) { return boost::python::make_tuple(pi.local_endpoint.address().to_string(), pi.local_endpoint.port()); @@ -87,11 +78,6 @@ void bind_peer_info() .def_readonly("receive_buffer_size", &peer_info::receive_buffer_size) .def_readonly("used_receive_buffer", &peer_info::used_receive_buffer) .def_readonly("num_hashfails", &peer_info::num_hashfails) -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - .add_property("country", get_country) -#endif -#endif // TORRENT_NO_DEPRECATE .def_readonly("download_queue_length", &peer_info::download_queue_length) .def_readonly("upload_queue_length", &peer_info::upload_queue_length) .def_readonly("failcount", &peer_info::failcount) diff --git a/bindings/python/src/torrent_handle.cpp b/bindings/python/src/torrent_handle.cpp index 1fee602dd..5b87bc9c2 100644 --- a/bindings/python/src/torrent_handle.cpp +++ b/bindings/python/src/torrent_handle.cpp @@ -351,14 +351,6 @@ void bind_torrent_handle() void (torrent_handle::*rename_file1)(int, std::wstring const&) const = &torrent_handle::rename_file; #endif -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 1.1 -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - bool (torrent_handle::*resolve_countries0)() const = &torrent_handle::resolve_countries; - void (torrent_handle::*resolve_countries1)(bool) = &torrent_handle::resolve_countries; -#endif -#endif // TORRENT_NO_DEPRECATE - #define _ allow_threads class_("torrent_handle") @@ -397,11 +389,6 @@ void bind_torrent_handle() // deprecated #ifndef TORRENT_NO_DEPRECATE - // resolve countries deprecated in 1.1 -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - .def("resolve_countries", _(resolve_countries0)) - .def("resolve_countries", _(resolve_countries1)) -#endif .def("get_torrent_info", &get_torrent_info) .def("super_seeding", super_seeding0) .def("filter_piece", _(&torrent_handle::filter_piece)) diff --git a/docs/building.rst b/docs/building.rst index 42c5c8939..38fe72b54 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -577,9 +577,6 @@ defines you can use to control the build. | | use wide character API, to properly support | | | non-ansi characters. | +----------------------------------------+-------------------------------------------------+ -| ``TORRENT_DISABLE_RESOLVE_COUNTRIES`` | Defining this will disable the ability to | -| | resolve countries of origin for peer IPs. | -+----------------------------------------+-------------------------------------------------+ | ``TORRENT_DISABLE_INVARIANT_CHECKS`` | This will disable internal invariant checks in | | | libtorrent. The invariant checks can sometime | | | be quite expensive, they typically don't scale | diff --git a/include/libtorrent/peer_connection.hpp b/include/libtorrent/peer_connection.hpp index 0ad62c415..59799c3f3 100644 --- a/include/libtorrent/peer_connection.hpp +++ b/include/libtorrent/peer_connection.hpp @@ -669,18 +669,6 @@ namespace libtorrent , void* userdata = NULL, block_cache_reference ref = block_cache_reference()); -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - void set_country(char const* c) - { - TORRENT_ASSERT(strlen(c) == 2); - m_country[0] = c[0]; - m_country[1] = c[1]; - } - bool has_country() const { return m_country[0] != 0; } -#endif -#endif // TORRENT_NO_DEPRECATE - int outstanding_bytes() const { return m_outstanding_bytes; } int send_buffer_size() const @@ -1115,16 +1103,6 @@ namespace libtorrent // TODO: 2 rename this target queue size boost::uint16_t m_desired_queue_size; -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - // in case the session settings is set - // to resolve countries, this is set to - // the two character country code this - // peer resides in. - char m_country[2]; -#endif -#endif // TORRENT_NO_DEPRECATE - // if set to non-zero, this peer will always prefer // to request entire n pieces, rather than blocks. // where n is the value of this variable. diff --git a/include/libtorrent/peer_info.hpp b/include/libtorrent/peer_info.hpp index 11d21e478..c790ead51 100644 --- a/include/libtorrent/peer_info.hpp +++ b/include/libtorrent/peer_info.hpp @@ -399,19 +399,6 @@ namespace libtorrent char write_state; #ifndef TORRENT_NO_DEPRECATE - // country code deprecated in 1.1 - - // the two letter `ISO 3166 country code`__ for the country the peer is - // connected from. If the country hasn't been resolved yet, both chars - // are set to 0. If the resolution failed for some reason, the field is - // set to "--". If the resolution service returns an invalid country - // code, it is set to "!!". The ``countries.nerd.dk`` service is used to - // look up countries. This field will remain set to 0 unless the torrent - // is set to resolve countries, see `resolve_countries()`_. - // - // __ http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html - char country[2]; - // the number of bytes per second we are allowed to send to or receive // from this peer. It may be -1 if there's no local limit on the peer. // The global limit and the torrent limit may also be enforced. diff --git a/include/libtorrent/torrent.hpp b/include/libtorrent/torrent.hpp index 565c6db72..ddc68d640 100644 --- a/include/libtorrent/torrent.hpp +++ b/include/libtorrent/torrent.hpp @@ -559,20 +559,6 @@ namespace libtorrent state_updated(); } -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 1.1 - -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - void resolve_countries(bool r); - bool resolving_countries() const; - - void resolve_peer_country(boost::shared_ptr const& p) const; - void on_country_lookup(error_code const& error - , std::vector
const& host_list - , boost::shared_ptr p) const; -#endif -#endif // TORRENT_NO_DEPRECATE - // -------------------------------------------- // BANDWIDTH MANAGEMENT @@ -1506,24 +1492,12 @@ namespace libtorrent // from a non-downloading/seeding state, the torrent is paused. bool m_stop_when_ready:1; -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - // this is true while there is a country - // resolution in progress. To avoid flodding - // the DNS request queue, only one ip is resolved - // at a time. - mutable bool m_resolving_country:1; - - // this is true if the user has enabled - // country resolution in this torrent - bool m_resolve_countries:1; -#endif -#endif - // set to false when saving resume data. Set to true // whenever something is downloaded bool m_need_save_resume_data:1; + // 2 bits here + // ---- // total time we've been available as a seed on this torrent. diff --git a/include/libtorrent/torrent_handle.hpp b/include/libtorrent/torrent_handle.hpp index 63e534306..3d2a3c2f0 100644 --- a/include/libtorrent/torrent_handle.hpp +++ b/include/libtorrent/torrent_handle.hpp @@ -236,7 +236,7 @@ namespace libtorrent { // TODO: 3 consider replacing all the setters and getters for pause, // resume, stop-when-ready, share-mode, upload-mode, super-seeding, - // apply-ip-filter, resolve-countries, pinned, sequential-download, + // apply-ip-filter, pinned, sequential-download, // seed-mode // with just set_flags() and clear_flags() using the flags from // add_torrent_params. Perhaps those flags should have a more generic @@ -832,20 +832,6 @@ namespace libtorrent void queue_position_top() const; void queue_position_bottom() const; -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 1.1 - - // Sets or gets the flag that determines if countries should be resolved - // for the peers of this torrent. It defaults to false. If it is set to - // true, the peer_info structure for the peers in this torrent will have - // their ``country`` member set. See peer_info for more information on - // how to interpret this field. - TORRENT_DEPRECATED - void resolve_countries(bool r); - TORRENT_DEPRECATED - bool resolve_countries() const; -#endif - // For SSL torrents, use this to specify a path to a .pem file to use as // this client's certificate. The certificate must be signed by the // certificate in the .torrent file to be valid. diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index 958049353..c6532d05b 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -218,11 +218,6 @@ namespace libtorrent m_quota[1] = 0; TORRENT_ASSERT(pack.peerinfo == 0 || pack.peerinfo->banned == false); -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - std::fill(m_country, m_country + 2, 0); -#endif -#endif // TORRENT_NO_DEPRECATE #ifndef TORRENT_DISABLE_LOGGING error_code ec; TORRENT_ASSERT(m_socket->remote_endpoint(ec) == m_remote || ec); @@ -4411,15 +4406,6 @@ namespace libtorrent p.download_queue_time = download_queue_time(); p.queue_bytes = m_outstanding_bytes; -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - p.country[0] = m_country[0]; - p.country[1] = m_country[1]; -#else - std::fill(p.country, p.country + 2, 0); -#endif -#endif // TORRENT_NO_DEPRECATE - p.total_download = statistics().total_payload_download(); p.total_upload = statistics().total_payload_upload(); #ifndef TORRENT_NO_DEPRECATE diff --git a/src/torrent.cpp b/src/torrent.cpp index 1cb3e95ff..0d2eb5e66 100644 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -241,12 +241,6 @@ namespace libtorrent , m_seed_mode(false) , m_super_seeding(false) , m_stop_when_ready((p.flags & add_torrent_params::flag_stop_when_ready) != 0) -#ifndef TORRENT_NO_DEPRECATE -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - , m_resolving_country(false) - , m_resolve_countries(false) -#endif -#endif , m_need_save_resume_data((p.flags & add_torrent_params::flag_need_save_resume) != 0) , m_seeding_time(0) , m_max_uploads((1<<24)-1) @@ -6453,166 +6447,6 @@ namespace libtorrent } } -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 1.1 -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - namespace - { - unsigned long swap_bytes(unsigned long a) - { - return (a >> 24) | ((a & 0xff0000) >> 8) | ((a & 0xff00) << 8) | ((a & 0xff) << 24); - } - } - - void torrent::resolve_countries(bool r) - { m_resolve_countries = r; } - - bool torrent::resolving_countries() const - { - return m_resolve_countries && !settings().get_bool(settings_pack::force_proxy); - } - - void torrent::resolve_peer_country(boost::shared_ptr const& p) const - { - TORRENT_ASSERT(is_single_thread()); - if (m_resolving_country - || is_local(p->remote().address()) - || p->has_country() - || p->is_connecting() - || p->in_handshake() - || p->remote().address().is_v6()) return; - - boost::asio::ip::address_v4 reversed(swap_bytes(p->remote().address().to_v4().to_ulong())); - error_code ec; - std::string hostname = reversed.to_string(ec) + ".zz.countries.nerd.dk"; - if (ec) - { - p->set_country("!!"); - return; - } - m_resolving_country = true; - m_ses.async_resolve(hostname, resolver_interface::abort_on_shutdown - , boost::bind(&torrent::on_country_lookup, shared_from_this(), _1, _2, p)); - } - - namespace - { - struct country_entry - { - int code; - char const* name; - }; - } - - void torrent::on_country_lookup(error_code const& error - , std::vector
const& host_list - , boost::shared_ptr p) const - { - TORRENT_ASSERT(is_single_thread()); - - INVARIANT_CHECK; - - m_resolving_country = false; - - if (m_abort) return; - - // must be ordered in increasing order - static const country_entry country_map[] = - { - { 4, "AF"}, { 8, "AL"}, { 10, "AQ"}, { 12, "DZ"}, { 16, "AS"} - , { 20, "AD"}, { 24, "AO"}, { 28, "AG"}, { 31, "AZ"}, { 32, "AR"} - , { 36, "AU"}, { 40, "AT"}, { 44, "BS"}, { 48, "BH"}, { 50, "BD"} - , { 51, "AM"}, { 52, "BB"}, { 56, "BE"}, { 60, "BM"}, { 64, "BT"} - , { 68, "BO"}, { 70, "BA"}, { 72, "BW"}, { 74, "BV"}, { 76, "BR"} - , { 84, "BZ"}, { 86, "IO"}, { 90, "SB"}, { 92, "VG"}, { 96, "BN"} - , {100, "BG"}, {104, "MM"}, {108, "BI"}, {112, "BY"}, {116, "KH"} - , {120, "CM"}, {124, "CA"}, {132, "CV"}, {136, "KY"}, {140, "CF"} - , {144, "LK"}, {148, "TD"}, {152, "CL"}, {156, "CN"}, {158, "TW"} - , {162, "CX"}, {166, "CC"}, {170, "CO"}, {174, "KM"}, {175, "YT"} - , {178, "CG"}, {180, "CD"}, {184, "CK"}, {188, "CR"}, {191, "HR"} - , {192, "CU"}, {203, "CZ"}, {204, "BJ"}, {208, "DK"}, {212, "DM"} - , {214, "DO"}, {218, "EC"}, {222, "SV"}, {226, "GQ"}, {231, "ET"} - , {232, "ER"}, {233, "EE"}, {234, "FO"}, {238, "FK"}, {239, "GS"} - , {242, "FJ"}, {246, "FI"}, {248, "AX"}, {250, "FR"}, {254, "GF"} - , {258, "PF"}, {260, "TF"}, {262, "DJ"}, {266, "GA"}, {268, "GE"} - , {270, "GM"}, {275, "PS"}, {276, "DE"}, {288, "GH"}, {292, "GI"} - , {296, "KI"}, {300, "GR"}, {304, "GL"}, {308, "GD"}, {312, "GP"} - , {316, "GU"}, {320, "GT"}, {324, "GN"}, {328, "GY"}, {332, "HT"} - , {334, "HM"}, {336, "VA"}, {340, "HN"}, {344, "HK"}, {348, "HU"} - , {352, "IS"}, {356, "IN"}, {360, "ID"}, {364, "IR"}, {368, "IQ"} - , {372, "IE"}, {376, "IL"}, {380, "IT"}, {384, "CI"}, {388, "JM"} - , {392, "JP"}, {398, "KZ"}, {400, "JO"}, {404, "KE"}, {408, "KP"} - , {410, "KR"}, {414, "KW"}, {417, "KG"}, {418, "LA"}, {422, "LB"} - , {426, "LS"}, {428, "LV"}, {430, "LR"}, {434, "LY"}, {438, "LI"} - , {440, "LT"}, {442, "LU"}, {446, "MO"}, {450, "MG"}, {454, "MW"} - , {458, "MY"}, {462, "MV"}, {466, "ML"}, {470, "MT"}, {474, "MQ"} - , {478, "MR"}, {480, "MU"}, {484, "MX"}, {492, "MC"}, {496, "MN"} - , {498, "MD"}, {500, "MS"}, {504, "MA"}, {508, "MZ"}, {512, "OM"} - , {516, "NA"}, {520, "NR"}, {524, "NP"}, {528, "NL"}, {530, "AN"} - , {533, "AW"}, {540, "NC"}, {548, "VU"}, {554, "NZ"}, {558, "NI"} - , {562, "NE"}, {566, "NG"}, {570, "NU"}, {574, "NF"}, {578, "NO"} - , {580, "MP"}, {581, "UM"}, {583, "FM"}, {584, "MH"}, {585, "PW"} - , {586, "PK"}, {591, "PA"}, {598, "PG"}, {600, "PY"}, {604, "PE"} - , {608, "PH"}, {612, "PN"}, {616, "PL"}, {620, "PT"}, {624, "GW"} - , {626, "TL"}, {630, "PR"}, {634, "QA"}, {634, "QA"}, {638, "RE"} - , {642, "RO"}, {643, "RU"}, {646, "RW"}, {654, "SH"}, {659, "KN"} - , {660, "AI"}, {662, "LC"}, {666, "PM"}, {670, "VC"}, {674, "SM"} - , {678, "ST"}, {682, "SA"}, {686, "SN"}, {690, "SC"}, {694, "SL"} - , {702, "SG"}, {703, "SK"}, {704, "VN"}, {705, "SI"}, {706, "SO"} - , {710, "ZA"}, {716, "ZW"}, {724, "ES"}, {732, "EH"}, {736, "SD"} - , {740, "SR"}, {744, "SJ"}, {748, "SZ"}, {752, "SE"}, {756, "CH"} - , {760, "SY"}, {762, "TJ"}, {764, "TH"}, {768, "TG"}, {772, "TK"} - , {776, "TO"}, {780, "TT"}, {784, "AE"}, {788, "TN"}, {792, "TR"} - , {795, "TM"}, {796, "TC"}, {798, "TV"}, {800, "UG"}, {804, "UA"} - , {807, "MK"}, {818, "EG"}, {826, "GB"}, {834, "TZ"}, {840, "US"} - , {850, "VI"}, {854, "BF"}, {858, "UY"}, {860, "UZ"}, {862, "VE"} - , {876, "WF"}, {882, "WS"}, {887, "YE"}, {891, "CS"}, {894, "ZM"} - }; - - if (error || host_list.empty()) - { - // this is used to indicate that we shouldn't - // try to resolve it again - p->set_country("--"); - return; - } - - int idx = 0; - while (idx < host_list.size() && !host_list[idx].is_v4()) - ++idx; - - if (idx >= host_list.size()) - { - p->set_country("--"); - return; - } - - // country is an ISO 3166 country code - int country = host_list[idx].to_v4().to_ulong() & 0xffff; - - // look up the country code in the map - const int size = sizeof(country_map)/sizeof(country_map[0]); - country_entry tmp = {country, ""}; - country_entry const* j = - std::lower_bound(country_map, country_map + size, tmp - , boost::bind(&country_entry::code, _1) < boost::bind(&country_entry::code, _2)); - if (j == country_map + size - || j->code != country) - { - // unknown country! - p->set_country("!!"); -#ifndef TORRENT_DISABLE_LOGGING - debug_log("IP \"%s\" was mapped to unknown country: %d" - , print_address(p->remote().address()).c_str(), country); -#endif - return; - } - - p->set_country(j->name); - } -#endif -#endif // TORRENT_NO_DEPRECATE - boost::shared_ptr torrent::get_torrent_copy() { if (!m_torrent_file->is_valid()) return boost::shared_ptr(); @@ -7007,13 +6841,6 @@ namespace libtorrent peer_info& p = v->back(); peer->get_peer_info(p); -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 1.1 -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - if (resolving_countries()) - resolve_peer_country(peer->self()); -#endif -#endif // TORRENT_NO_DEPRECATE } } diff --git a/src/torrent_handle.cpp b/src/torrent_handle.cpp index ff0c1a976..9e7ae2fda 100644 --- a/src/torrent_handle.cpp +++ b/src/torrent_handle.cpp @@ -730,25 +730,6 @@ namespace libtorrent TORRENT_ASYNC_CALL1(super_seeding, on); } -#ifndef TORRENT_NO_DEPRECATE - void torrent_handle::resolve_countries(bool r) - { -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - TORRENT_ASYNC_CALL1(resolve_countries, r); -#endif - } - - bool torrent_handle::resolve_countries() const - { -#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES - TORRENT_SYNC_CALL_RET(bool, false, resolving_countries); - return r; -#else - return false; -#endif - } -#endif // TORRENT_NO_DEPRECATE - void torrent_handle::get_full_peer_list(std::vector& v) const { TORRENT_SYNC_CALL1(get_full_peer_list, &v);