fixed local rate limit feature

This commit is contained in:
Arvid Norberg 2009-11-14 21:25:13 +00:00
parent c07b1d0981
commit 550c67a308
1 changed files with 19 additions and 20 deletions

View File

@ -3141,7 +3141,9 @@ namespace libtorrent
bool peer_connection::ignore_unchoke_slots() const bool peer_connection::ignore_unchoke_slots() const
{ {
return m_ignore_unchoke_slots return m_ignore_unchoke_slots
|| (m_ses.settings().ignore_limits_on_local_network && on_local_network()); || (m_ses.settings().ignore_limits_on_local_network
&& on_local_network()
&& m_ses.m_local_upload_channel.throttle() == 0);
} }
// defined in upnp.cpp // defined in upnp.cpp
@ -3403,13 +3405,18 @@ namespace libtorrent
m_bandwidth_channel[download_channel].use_quota(download_overhead); m_bandwidth_channel[download_channel].use_quota(download_overhead);
m_bandwidth_channel[upload_channel].use_quota(upload_overhead); m_bandwidth_channel[upload_channel].use_quota(upload_overhead);
bandwidth_channel* upc = &m_ses.m_upload_channel; bandwidth_channel* upc = 0;
bandwidth_channel* downc = &m_ses.m_download_channel; bandwidth_channel* downc = 0;
if (m_ignore_bandwidth_limits) if (m_ignore_bandwidth_limits)
{ {
upc = &m_ses.m_local_upload_channel; upc = &m_ses.m_local_upload_channel;
downc = &m_ses.m_local_download_channel; downc = &m_ses.m_local_download_channel;
} }
else
{
upc = &m_ses.m_upload_channel;
downc = &m_ses.m_download_channel;
}
int up_limit = m_bandwidth_channel[upload_channel].throttle(); int up_limit = m_bandwidth_channel[upload_channel].throttle();
int down_limit = m_bandwidth_channel[download_channel].throttle(); int down_limit = m_bandwidth_channel[download_channel].throttle();
@ -4024,7 +4031,7 @@ namespace libtorrent
{ {
int amount_to_send = m_send_buffer.size(); int amount_to_send = m_send_buffer.size();
int quota_left = m_quota[upload_channel]; int quota_left = m_quota[upload_channel];
if (!m_ignore_bandwidth_limits && amount_to_send > quota_left) if (amount_to_send > quota_left)
amount_to_send = quota_left; amount_to_send = quota_left;
TORRENT_ASSERT(amount_to_send > 0); TORRENT_ASSERT(amount_to_send > 0);
@ -4100,7 +4107,7 @@ namespace libtorrent
if (m_soft_packet_size && max_receive > m_soft_packet_size - m_recv_pos) if (m_soft_packet_size && max_receive > m_soft_packet_size - m_recv_pos)
max_receive = m_soft_packet_size - m_recv_pos; max_receive = m_soft_packet_size - m_recv_pos;
int quota_left = m_quota[download_channel]; int quota_left = m_quota[download_channel];
if (!m_ignore_bandwidth_limits && max_receive > quota_left) if (max_receive > quota_left)
max_receive = quota_left; max_receive = quota_left;
if (max_receive == 0) return; if (max_receive == 0) return;
@ -4329,11 +4336,8 @@ namespace libtorrent
(*m_logger) << "read " << bytes_transferred << " bytes\n"; (*m_logger) << "read " << bytes_transferred << " bytes\n";
#endif #endif
// correct the dl quota usage, if not all of the buffer was actually read // correct the dl quota usage, if not all of the buffer was actually read
if (!m_ignore_bandwidth_limits) TORRENT_ASSERT(bytes_transferred <= m_quota[download_channel]);
{ m_quota[download_channel] -= bytes_transferred;
TORRENT_ASSERT(bytes_transferred <= m_quota[download_channel]);
m_quota[download_channel] -= bytes_transferred;
}
if (m_disconnecting) if (m_disconnecting)
{ {
@ -4376,7 +4380,7 @@ namespace libtorrent
if (m_soft_packet_size && max_receive > m_soft_packet_size - m_recv_pos) if (m_soft_packet_size && max_receive > m_soft_packet_size - m_recv_pos)
max_receive = m_soft_packet_size - m_recv_pos; max_receive = m_soft_packet_size - m_recv_pos;
int quota_left = m_quota[download_channel]; int quota_left = m_quota[download_channel];
if (!m_ignore_bandwidth_limits && max_receive > quota_left) if (max_receive > quota_left)
max_receive = quota_left; max_receive = quota_left;
if (max_receive == 0) break; if (max_receive == 0) break;
@ -4439,8 +4443,7 @@ namespace libtorrent
// if we have requests or pending data to be sent or announcements to be made // if we have requests or pending data to be sent or announcements to be made
// we want to send data // we want to send data
return !m_send_buffer.empty() return !m_send_buffer.empty()
&& (m_quota[upload_channel] > 0 && m_quota[upload_channel] > 0
|| m_ignore_bandwidth_limits)
&& !m_connecting; && !m_connecting;
} }
@ -4448,8 +4451,7 @@ namespace libtorrent
{ {
boost::shared_ptr<torrent> t = m_torrent.lock(); boost::shared_ptr<torrent> t = m_torrent.lock();
bool bw_limit = (m_quota[download_channel] > 0 bool bw_limit = m_quota[download_channel] > 0;
|| m_ignore_bandwidth_limits);
if (!bw_limit) return false; if (!bw_limit) return false;
@ -4643,11 +4645,8 @@ namespace libtorrent
m_channel_state[upload_channel] = peer_info::bw_idle; m_channel_state[upload_channel] = peer_info::bw_idle;
if (!m_ignore_bandwidth_limits) TORRENT_ASSERT(bytes_transferred <= m_quota[upload_channel]);
{ m_quota[upload_channel] -= bytes_transferred;
TORRENT_ASSERT(bytes_transferred <= m_quota[upload_channel]);
m_quota[upload_channel] -= bytes_transferred;
}
m_statistics.trancieve_ip_packet(bytes_transferred, m_remote.address().is_v6()); m_statistics.trancieve_ip_packet(bytes_transferred, m_remote.address().is_v6());