forked from premiere/premiere-libtorrent
move test_trackers_extensions over to a simulation and some minor metadata extension and tracker re-announce fixes
This commit is contained in:
parent
2c89fa40e2
commit
225b82d9a0
|
@ -243,7 +243,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
if (url < e.url) return true;
|
if (url < e.url) return true;
|
||||||
if (url > e.url) return false;
|
if (url > e.url) return false;
|
||||||
return type < e.type;
|
return type < e.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The URL of the web seed
|
// The URL of the web seed
|
||||||
|
|
|
@ -29,5 +29,6 @@ alias libtorrent-sims :
|
||||||
[ run test_dht.cpp ]
|
[ run test_dht.cpp ]
|
||||||
[ run test_pe_crypto.cpp ]
|
[ run test_pe_crypto.cpp ]
|
||||||
[ run test_metadata_extension.cpp ]
|
[ run test_metadata_extension.cpp ]
|
||||||
|
[ run test_trackers_extension.cpp ]
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,17 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/io_service.hpp"
|
#include "libtorrent/io_service.hpp"
|
||||||
#include "libtorrent/settings_pack.hpp"
|
#include "libtorrent/settings_pack.hpp"
|
||||||
#include "libtorrent/add_torrent_params.hpp"
|
#include "libtorrent/add_torrent_params.hpp"
|
||||||
|
#include "libtorrent/torrent_handle.hpp"
|
||||||
|
|
||||||
#ifndef TORRENT_SWARM_SETUP_PROVIDER_HPP_INCLUDED
|
#ifndef TORRENT_SWARM_SETUP_PROVIDER_HPP_INCLUDED
|
||||||
#define TORRENT_SWARM_SETUP_PROVIDER_HPP_INCLUDED
|
#define TORRENT_SWARM_SETUP_PROVIDER_HPP_INCLUDED
|
||||||
|
|
||||||
|
namespace libtorrent
|
||||||
|
{
|
||||||
|
class alert;
|
||||||
|
class session;
|
||||||
|
}
|
||||||
|
|
||||||
struct swarm_setup_provider
|
struct swarm_setup_provider
|
||||||
{
|
{
|
||||||
// can be used to check expected end conditions
|
// can be used to check expected end conditions
|
||||||
|
|
|
@ -38,6 +38,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/time.hpp"
|
#include "libtorrent/time.hpp"
|
||||||
#include "setup_swarm.hpp"
|
#include "setup_swarm.hpp"
|
||||||
#include "settings.hpp"
|
#include "settings.hpp"
|
||||||
|
#include "setup_transfer.hpp" // for create_torrent
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "test.hpp"
|
#include "test.hpp"
|
||||||
#include "setup_transfer.hpp"
|
|
||||||
#include "test_utils.hpp"
|
|
||||||
#include "test_utils.hpp"
|
#include "test_utils.hpp"
|
||||||
#include "swarm_config.hpp"
|
#include "swarm_config.hpp"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2008-2015, Arvid Norberg
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the author nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup_swarm.hpp"
|
||||||
|
#include "swarm_config.hpp"
|
||||||
|
#include "libtorrent/alert.hpp"
|
||||||
|
#include "libtorrent/extensions/lt_trackers.hpp"
|
||||||
|
#include "test.hpp"
|
||||||
|
|
||||||
|
enum flags
|
||||||
|
{
|
||||||
|
no_metadata = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
struct test_swarm_config : swarm_config
|
||||||
|
{
|
||||||
|
test_swarm_config(int flags)
|
||||||
|
: swarm_config()
|
||||||
|
, m_flags(flags)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void on_session_added(int idx, session& ses) override
|
||||||
|
{
|
||||||
|
ses.add_extension(create_lt_trackers_plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual libtorrent::add_torrent_params add_torrent(int idx) override
|
||||||
|
{
|
||||||
|
add_torrent_params p = swarm_config::add_torrent(idx);
|
||||||
|
|
||||||
|
if (m_flags & no_metadata)
|
||||||
|
{
|
||||||
|
p.info_hash = sha1_hash("aaaaaaaaaaaaaaaaaaaa");
|
||||||
|
p.ti.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure neither peer has any content
|
||||||
|
// TODO: it would be more efficient to not create the content in the first
|
||||||
|
// place
|
||||||
|
p.save_path = save_path(1);
|
||||||
|
|
||||||
|
if (idx == 1)
|
||||||
|
{
|
||||||
|
p.trackers.push_back("http://test.non-existent.com/announce");
|
||||||
|
}
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool on_alert(libtorrent::alert const* alert
|
||||||
|
, int session_idx
|
||||||
|
, std::vector<libtorrent::torrent_handle> const& handles
|
||||||
|
, libtorrent::session& ses) override
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((m_flags & no_metadata) == 0)
|
||||||
|
{
|
||||||
|
if (handles[0].trackers().size() == 1
|
||||||
|
&& handles[1].trackers().size() == 1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void on_exit(std::vector<torrent_handle> const& torrents) override
|
||||||
|
{
|
||||||
|
TEST_CHECK(torrents.size() > 0);
|
||||||
|
|
||||||
|
// a peer that does not have metadata should not exchange trackers, since
|
||||||
|
// it may be a private torrent
|
||||||
|
if (m_flags & no_metadata)
|
||||||
|
{
|
||||||
|
TEST_EQUAL(torrents[0].trackers().size(), 0);
|
||||||
|
TEST_EQUAL(torrents[1].trackers().size(), 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TEST_EQUAL(torrents[0].trackers().size(), 1);
|
||||||
|
TEST_EQUAL(torrents[1].trackers().size(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
TORRENT_TEST(plain)
|
||||||
|
{
|
||||||
|
test_swarm_config cfg(0);
|
||||||
|
setup_swarm(2, cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(no_metadata)
|
||||||
|
{
|
||||||
|
test_swarm_config cfg(no_metadata);
|
||||||
|
setup_swarm(2, cfg);
|
||||||
|
}
|
||||||
|
|
|
@ -3156,7 +3156,7 @@ namespace libtorrent
|
||||||
// a warning if there isn't one
|
// a warning if there isn't one
|
||||||
std::string protocol = req.url.substr(0, req.url.find(':'));
|
std::string protocol = req.url.substr(0, req.url.find(':'));
|
||||||
int proxy_type = settings().get_int(settings_pack::proxy_type);
|
int proxy_type = settings().get_int(settings_pack::proxy_type);
|
||||||
|
|
||||||
// http can run over any proxy, so as long as one is used
|
// http can run over any proxy, so as long as one is used
|
||||||
// it's OK. If no proxy is configured, skip this tracker
|
// it's OK. If no proxy is configured, skip this tracker
|
||||||
if ((protocol == "http" || protocol == "https")
|
if ((protocol == "http" || protocol == "https")
|
||||||
|
|
|
@ -669,7 +669,7 @@ namespace libtorrent
|
||||||
// event, we need to let this announce through
|
// event, we need to let this announce through
|
||||||
bool need_send_complete = is_seed && !complete_sent;
|
bool need_send_complete = is_seed && !complete_sent;
|
||||||
|
|
||||||
return now > next_announce
|
return now >= next_announce
|
||||||
&& (now >= min_announce || need_send_complete)
|
&& (now >= min_announce || need_send_complete)
|
||||||
&& (fails < fail_limit || fail_limit == 0)
|
&& (fails < fail_limit || fail_limit == 0)
|
||||||
&& !updating;
|
&& !updating;
|
||||||
|
|
|
@ -382,7 +382,8 @@ namespace libtorrent { namespace
|
||||||
m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
||||||
, "have: %d invalid piece %d metadata size: %d"
|
, "have: %d invalid piece %d metadata size: %d"
|
||||||
, int(m_torrent.valid_metadata()), piece
|
, int(m_torrent.valid_metadata()), piece
|
||||||
, int(m_tp.get_metadata_size()));
|
, m_torrent.valid_metadata()
|
||||||
|
? int(m_tp.get_metadata_size()) : 0);
|
||||||
#endif
|
#endif
|
||||||
write_metadata_packet(metadata_dont_have, piece);
|
write_metadata_packet(metadata_dont_have, piece);
|
||||||
return true;
|
return true;
|
||||||
|
@ -495,7 +496,7 @@ namespace libtorrent { namespace
|
||||||
// request queues
|
// request queues
|
||||||
std::vector<int> m_sent_requests;
|
std::vector<int> m_sent_requests;
|
||||||
std::vector<int> m_incoming_requests;
|
std::vector<int> m_incoming_requests;
|
||||||
|
|
||||||
torrent& m_torrent;
|
torrent& m_torrent;
|
||||||
bt_peer_connection& m_pc;
|
bt_peer_connection& m_pc;
|
||||||
ut_metadata_plugin& m_tp;
|
ut_metadata_plugin& m_tp;
|
||||||
|
@ -559,7 +560,7 @@ namespace libtorrent { namespace
|
||||||
m_torrent.add_redundant_bytes(size, torrent::piece_unknown);
|
m_torrent.add_redundant_bytes(size, torrent::piece_unknown);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_metadata)
|
if (!m_metadata)
|
||||||
{
|
{
|
||||||
// verify the total_size
|
// verify the total_size
|
||||||
|
@ -567,7 +568,7 @@ namespace libtorrent { namespace
|
||||||
{
|
{
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
||||||
, "metadata size too big: %d", total_size);
|
, "metadata size too big: %d", total_size);
|
||||||
#endif
|
#endif
|
||||||
// #error post alert
|
// #error post alert
|
||||||
return false;
|
return false;
|
||||||
|
@ -582,7 +583,7 @@ namespace libtorrent { namespace
|
||||||
{
|
{
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
||||||
, "piece: %d INVALID", piece);
|
, "piece: %d INVALID", piece);
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -592,7 +593,7 @@ namespace libtorrent { namespace
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
source.m_pc.peer_log(peer_log_alert::info, "UT_METADATA"
|
||||||
, "total_size: %d INCONSISTENT WITH: %d"
|
, "total_size: %d INCONSISTENT WITH: %d"
|
||||||
, total_size, m_metadata_size);
|
, total_size, m_metadata_size);
|
||||||
#endif
|
#endif
|
||||||
// they disagree about the size!
|
// they disagree about the size!
|
||||||
return false;
|
return false;
|
||||||
|
@ -600,7 +601,7 @@ namespace libtorrent { namespace
|
||||||
|
|
||||||
if (piece * 16 * 1024 + size > m_metadata_size)
|
if (piece * 16 * 1024 + size > m_metadata_size)
|
||||||
{
|
{
|
||||||
// this piece is invalid
|
// this piece is invalid
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,6 @@ test-suite libtorrent :
|
||||||
[ run test_http_connection.cpp ]
|
[ run test_http_connection.cpp ]
|
||||||
[ run test_torrent.cpp ]
|
[ run test_torrent.cpp ]
|
||||||
[ run test_transfer.cpp ]
|
[ run test_transfer.cpp ]
|
||||||
[ run test_trackers_extension.cpp ]
|
|
||||||
[ run test_time_critical.cpp ]
|
[ run test_time_critical.cpp ]
|
||||||
[ run test_pex.cpp ]
|
[ run test_pex.cpp ]
|
||||||
[ run test_priority.cpp ]
|
[ run test_priority.cpp ]
|
||||||
|
|
|
@ -22,7 +22,6 @@ test_programs = \
|
||||||
test_time_critical \
|
test_time_critical \
|
||||||
test_torrent \
|
test_torrent \
|
||||||
test_tracker \
|
test_tracker \
|
||||||
test_trackers_extension \
|
|
||||||
test_transfer \
|
test_transfer \
|
||||||
enum_if \
|
enum_if \
|
||||||
test_utp \
|
test_utp \
|
||||||
|
@ -176,7 +175,6 @@ test_resume_SOURCES = test_resume.cpp
|
||||||
test_ssl_SOURCES = test_ssl.cpp
|
test_ssl_SOURCES = test_ssl.cpp
|
||||||
test_torrent_SOURCES = test_torrent.cpp
|
test_torrent_SOURCES = test_torrent.cpp
|
||||||
test_tracker_SOURCES = test_tracker.cpp
|
test_tracker_SOURCES = test_tracker.cpp
|
||||||
test_trackers_extension_SOURCES = test_trackers_extension.cpp
|
|
||||||
test_transfer_SOURCES = test_transfer.cpp
|
test_transfer_SOURCES = test_transfer.cpp
|
||||||
enum_if_SOURCES = enum_if.cpp
|
enum_if_SOURCES = enum_if.cpp
|
||||||
test_utp_SOURCES = test_utp.cpp
|
test_utp_SOURCES = test_utp.cpp
|
||||||
|
|
|
@ -154,6 +154,24 @@ void test_running_torrent(boost::shared_ptr<torrent_info> info, boost::int64_t f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(long_names)
|
||||||
|
{
|
||||||
|
entry info;
|
||||||
|
info["pieces"] = "aaaaaaaaaaaaaaaaaaaa";
|
||||||
|
info["name"] = "slightly shorter name, it's kind of sad that people started the trend of incorrectly encoding the regular name field and then adding another one with correct encoding";
|
||||||
|
info["name.utf-8"] = "this is a long ass name in order to try to make make_magnet_uri overflow and hopefully crash. Although, by the time you read this that particular bug should have been fixed";
|
||||||
|
info["piece length"] = 16 * 1024;
|
||||||
|
info["length"] = 3245;
|
||||||
|
entry torrent;
|
||||||
|
torrent["info"] = info;
|
||||||
|
|
||||||
|
std::vector<char> buf;
|
||||||
|
bencode(std::back_inserter(buf), torrent);
|
||||||
|
error_code ec;
|
||||||
|
boost::shared_ptr<torrent_info> ti(boost::make_shared<torrent_info>(&buf[0], buf.size(), boost::ref(ec)));
|
||||||
|
TEST_CHECK(!ec);
|
||||||
|
}
|
||||||
|
|
||||||
TORRENT_TEST(total_wanted)
|
TORRENT_TEST(total_wanted)
|
||||||
{
|
{
|
||||||
file_storage fs;
|
file_storage fs;
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright (c) 2008, Arvid Norberg
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in
|
|
||||||
the documentation and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of the author nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived
|
|
||||||
from this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "libtorrent/session.hpp"
|
|
||||||
#include "libtorrent/hasher.hpp"
|
|
||||||
#include "libtorrent/thread.hpp"
|
|
||||||
#include <boost/make_shared.hpp>
|
|
||||||
#include <boost/tuple/tuple.hpp>
|
|
||||||
|
|
||||||
#include "test.hpp"
|
|
||||||
#include "setup_transfer.hpp"
|
|
||||||
#include "libtorrent/extensions/metadata_transfer.hpp"
|
|
||||||
#include "libtorrent/extensions/ut_metadata.hpp"
|
|
||||||
#include "libtorrent/extensions/lt_trackers.hpp"
|
|
||||||
#include "libtorrent/bencode.hpp"
|
|
||||||
|
|
||||||
using boost::tuples::ignore;
|
|
||||||
|
|
||||||
TORRENT_TEST(trackers_extension)
|
|
||||||
{
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
|
||||||
using namespace libtorrent;
|
|
||||||
namespace lt = libtorrent;
|
|
||||||
|
|
||||||
// these are declared before the session objects
|
|
||||||
// so that they are destructed last. This enables
|
|
||||||
// the sessions to destruct in parallel
|
|
||||||
session_proxy p1;
|
|
||||||
session_proxy p2;
|
|
||||||
|
|
||||||
settings_pack s;
|
|
||||||
s.set_bool(settings_pack::enable_upnp, false);
|
|
||||||
s.set_bool(settings_pack::enable_natpmp, false);
|
|
||||||
s.set_bool(settings_pack::enable_lsd, false);
|
|
||||||
s.set_bool(settings_pack::enable_dht, false);
|
|
||||||
s.set_str(settings_pack::listen_interfaces, "0.0.0.0:48130");
|
|
||||||
|
|
||||||
lt::session ses1(s, 0);
|
|
||||||
|
|
||||||
s.set_str(settings_pack::listen_interfaces, "0.0.0.0:49130");
|
|
||||||
lt::session ses2(s, 0);
|
|
||||||
|
|
||||||
ses1.add_extension(create_lt_trackers_plugin);
|
|
||||||
ses2.add_extension(create_lt_trackers_plugin);
|
|
||||||
|
|
||||||
add_torrent_params atp;
|
|
||||||
atp.flags &= ~add_torrent_params::flag_paused;
|
|
||||||
atp.flags &= ~add_torrent_params::flag_auto_managed;
|
|
||||||
atp.info_hash = sha1_hash("12345678901234567890");
|
|
||||||
atp.save_path = "./";
|
|
||||||
error_code ec;
|
|
||||||
torrent_handle tor1 = ses1.add_torrent(atp, ec);
|
|
||||||
atp.trackers.push_back("http://test.non-existent.com/announce");
|
|
||||||
torrent_handle tor2 = ses2.add_torrent(atp, ec);
|
|
||||||
|
|
||||||
tor2.connect_peer(tcp::endpoint(address_v4::from_string("127.0.0.1"), ses1.listen_port()));
|
|
||||||
|
|
||||||
// trackers are NOT supposed to be exchanged for torrents that we
|
|
||||||
// don't have metadata for, since they might be private
|
|
||||||
for (int i = 0; i < 10; ++i)
|
|
||||||
{
|
|
||||||
// make sure this function can be called on
|
|
||||||
// torrents without metadata
|
|
||||||
print_alerts(ses1, "ses1", false, true);
|
|
||||||
print_alerts(ses2, "ses2", false, true);
|
|
||||||
|
|
||||||
if (tor1.trackers().size() != 0) break;
|
|
||||||
test_sleep(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CHECK(tor1.trackers().size() == 0);
|
|
||||||
|
|
||||||
entry info;
|
|
||||||
info["pieces"] = "aaaaaaaaaaaaaaaaaaaa";
|
|
||||||
info["name"] = "slightly shorter name, it's kind of sad that people started the trend of incorrectly encoding the regular name field and then adding another one with correct encoding";
|
|
||||||
info["name.utf-8"] = "this is a long ass name in order to try to make make_magnet_uri overflow and hopefully crash. Although, by the time you read this that particular bug should have been fixed";
|
|
||||||
info["piece length"] = 16 * 1024;
|
|
||||||
info["length"] = 3245;
|
|
||||||
entry torrent;
|
|
||||||
torrent["info"] = info;
|
|
||||||
|
|
||||||
std::vector<char> buf;
|
|
||||||
bencode(std::back_inserter(buf), torrent);
|
|
||||||
boost::shared_ptr<torrent_info> ti(boost::make_shared<torrent_info>(&buf[0], buf.size(), boost::ref(ec)));
|
|
||||||
TEST_CHECK(!ec);
|
|
||||||
|
|
||||||
atp.ti = ti;
|
|
||||||
atp.info_hash.clear();
|
|
||||||
atp.save_path = "./";
|
|
||||||
atp.trackers.clear();
|
|
||||||
|
|
||||||
tor1 = ses1.add_torrent(atp, ec);
|
|
||||||
atp.trackers.push_back("http://test.non-existent.com/announce");
|
|
||||||
tor2 = ses2.add_torrent(atp, ec);
|
|
||||||
tor2.connect_peer(tcp::endpoint(address_v4::from_string("127.0.0.1"), ses1.listen_port()));
|
|
||||||
|
|
||||||
TEST_CHECK(tor1.trackers().size() == 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < 60; ++i)
|
|
||||||
{
|
|
||||||
// make sure this function can be called on
|
|
||||||
// torrents without metadata
|
|
||||||
print_alerts(ses1, "ses1", false, true);
|
|
||||||
print_alerts(ses2, "ses2", false, true);
|
|
||||||
|
|
||||||
if (tor1.trackers().size() == 1) break;
|
|
||||||
test_sleep(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CHECK(tor1.trackers().size() == 1);
|
|
||||||
|
|
||||||
// this allows shutting down the sessions in parallel
|
|
||||||
p1 = ses1.abort();
|
|
||||||
p2 = ses2.abort();
|
|
||||||
#endif // TORRENT_DISABLE_EXTENSIONS
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue