upload only extension
This commit is contained in:
parent
498a43c123
commit
111f5faecb
|
@ -198,6 +198,9 @@ namespace libtorrent
|
||||||
|
|
||||||
bool is_seed() const;
|
bool is_seed() const;
|
||||||
|
|
||||||
|
void set_upload_only(bool u) { m_upload_only = u; }
|
||||||
|
bool upload_only() const { return m_upload_only; }
|
||||||
|
|
||||||
bool has_timed_out() const;
|
bool has_timed_out() const;
|
||||||
|
|
||||||
// will send a keep-alive message to the peer
|
// will send a keep-alive message to the peer
|
||||||
|
@ -638,6 +641,9 @@ namespace libtorrent
|
||||||
// is used to fill the bitmask in init()
|
// is used to fill the bitmask in init()
|
||||||
bool m_have_all;
|
bool m_have_all;
|
||||||
|
|
||||||
|
// set to true when this peer is only uploading
|
||||||
|
bool m_upload_only;
|
||||||
|
|
||||||
// the number of pieces this peer
|
// the number of pieces this peer
|
||||||
// has. Must be the same as
|
// has. Must be the same as
|
||||||
// std::count(m_have_piece.begin(),
|
// std::count(m_have_piece.begin(),
|
||||||
|
|
|
@ -1301,6 +1301,12 @@ namespace libtorrent
|
||||||
m_max_out_request_queue = 1;
|
m_max_out_request_queue = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (entry* upload_only = root.find_key("upload_only"))
|
||||||
|
{
|
||||||
|
if (upload_only->type() == entry::int_t && upload_only->integer() != 0)
|
||||||
|
set_upload_only(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (entry* myip = root.find_key("yourip"))
|
if (entry* myip = root.find_key("yourip"))
|
||||||
{
|
{
|
||||||
// TODO: don't trust this blindly
|
// TODO: don't trust this blindly
|
||||||
|
@ -1321,6 +1327,11 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we're finished and this peer is uploading only
|
||||||
|
// disconnect it
|
||||||
|
if (t->is_finished() && upload_only())
|
||||||
|
disconnect("upload to upload connection, closing");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bt_peer_connection::dispatch_message(int received)
|
bool bt_peer_connection::dispatch_message(int received)
|
||||||
|
@ -1556,6 +1567,9 @@ namespace libtorrent
|
||||||
detail::write_address(remote().address(), out);
|
detail::write_address(remote().address(), out);
|
||||||
handshake["yourip"] = remote_address;
|
handshake["yourip"] = remote_address;
|
||||||
handshake["reqq"] = m_ses.settings().max_allowed_in_request_queue;
|
handshake["reqq"] = m_ses.settings().max_allowed_in_request_queue;
|
||||||
|
boost::shared_ptr<torrent> t = associated_torrent().lock();
|
||||||
|
TORRENT_ASSERT(t);
|
||||||
|
if (t->is_finished()) handshake["upload_only"] = 1;
|
||||||
|
|
||||||
tcp::endpoint ep = m_ses.get_ipv6_interface();
|
tcp::endpoint ep = m_ses.get_ipv6_interface();
|
||||||
if (ep != tcp::endpoint())
|
if (ep != tcp::endpoint())
|
||||||
|
|
|
@ -96,6 +96,7 @@ namespace libtorrent
|
||||||
, m_failed(false)
|
, m_failed(false)
|
||||||
, m_ignore_bandwidth_limits(false)
|
, m_ignore_bandwidth_limits(false)
|
||||||
, m_have_all(false)
|
, m_have_all(false)
|
||||||
|
, m_upload_only(false)
|
||||||
, m_num_pieces(0)
|
, m_num_pieces(0)
|
||||||
, m_desired_queue_size(2)
|
, m_desired_queue_size(2)
|
||||||
, m_free_upload(0)
|
, m_free_upload(0)
|
||||||
|
@ -195,6 +196,7 @@ namespace libtorrent
|
||||||
, m_failed(false)
|
, m_failed(false)
|
||||||
, m_ignore_bandwidth_limits(false)
|
, m_ignore_bandwidth_limits(false)
|
||||||
, m_have_all(false)
|
, m_have_all(false)
|
||||||
|
, m_upload_only(false)
|
||||||
, m_num_pieces(0)
|
, m_num_pieces(0)
|
||||||
, m_desired_queue_size(2)
|
, m_desired_queue_size(2)
|
||||||
, m_free_upload(0)
|
, m_free_upload(0)
|
||||||
|
@ -1108,10 +1110,10 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_seed())
|
if (upload_only())
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_peer_info);
|
TORRENT_ASSERT(m_peer_info);
|
||||||
m_peer_info->seed = true;
|
if (is_seed()) m_peer_info->seed = true;
|
||||||
if (t->is_finished() && m_ses.settings().close_redundant_connections)
|
if (t->is_finished() && m_ses.settings().close_redundant_connections)
|
||||||
{
|
{
|
||||||
disconnect("seed to seed connection redundant");
|
disconnect("seed to seed connection redundant");
|
||||||
|
@ -1231,6 +1233,7 @@ namespace libtorrent
|
||||||
m_num_pieces = num_pieces;
|
m_num_pieces = num_pieces;
|
||||||
|
|
||||||
if (interesting) t->get_policy().peer_is_interesting(*this);
|
if (interesting) t->get_policy().peer_is_interesting(*this);
|
||||||
|
else if (upload_only()) disconnect("upload to upload connections");
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
|
|
|
@ -73,6 +73,8 @@ namespace libtorrent
|
||||||
// we want large blocks as well, so
|
// we want large blocks as well, so
|
||||||
// we can request more bytes at once
|
// we can request more bytes at once
|
||||||
request_large_blocks(true);
|
request_large_blocks(true);
|
||||||
|
set_upload_only(true);
|
||||||
|
|
||||||
// we only want left-over bandwidth
|
// we only want left-over bandwidth
|
||||||
set_priority(0);
|
set_priority(0);
|
||||||
shared_ptr<torrent> tor = t.lock();
|
shared_ptr<torrent> tor = t.lock();
|
||||||
|
|
Loading…
Reference in New Issue