*** empty log message ***
This commit is contained in:
parent
5e0dbf78b0
commit
3ed0745cb1
|
@ -133,18 +133,29 @@ void clear()
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::string to_string(float v)
|
||||||
|
{
|
||||||
|
std::stringstream s;
|
||||||
|
s.precision(4);
|
||||||
|
s.flags(std::ios_base::right);
|
||||||
|
s.width(5);
|
||||||
|
s.fill(' ');
|
||||||
|
s << v;
|
||||||
|
return s.str();
|
||||||
|
}
|
||||||
|
|
||||||
std::string add_suffix(float val)
|
std::string add_suffix(float val)
|
||||||
{
|
{
|
||||||
const char* prefix[] = {"B", "kB", "MB", "GB", "TB"};
|
const char* prefix[] = {"B ", "kB", "MB", "GB", "TB"};
|
||||||
const int num_prefix = sizeof(prefix) / sizeof(const char*);
|
const int num_prefix = sizeof(prefix) / sizeof(const char*);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < num_prefix; ++i)
|
for (i = 0; i < num_prefix; ++i)
|
||||||
{
|
{
|
||||||
if (val < 1024.f)
|
if (val < 1024.f)
|
||||||
return boost::lexical_cast<std::string>(val) + prefix[i];
|
return to_string(val) + prefix[i];
|
||||||
val /= 1024.f;
|
val /= 1024.f;
|
||||||
}
|
}
|
||||||
return boost::lexical_cast<std::string>(val) + prefix[i];
|
return to_string(val) + prefix[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
|
@ -252,14 +263,14 @@ int main(int argc, char* argv[])
|
||||||
boost::posix_time::time_duration t = s.next_announce;
|
boost::posix_time::time_duration t = s.next_announce;
|
||||||
// std::cout << "next announce: " << boost::posix_time::to_simple_string(t) << "\n";
|
// std::cout << "next announce: " << boost::posix_time::to_simple_string(t) << "\n";
|
||||||
std::cout << "next announce: " << t.hours() << ":" << t.minutes() << ":" << t.seconds() << "\n";
|
std::cout << "next announce: " << t.hours() << ":" << t.minutes() << ":" << t.seconds() << "\n";
|
||||||
/*
|
|
||||||
for (std::vector<peer_info>::iterator i = peers.begin();
|
for (std::vector<peer_info>::iterator i = peers.begin();
|
||||||
i != peers.end();
|
i != peers.end();
|
||||||
++i)
|
++i)
|
||||||
{
|
{
|
||||||
std::cout << "d: " << add_suffix(i->down_speed) << "/s (" << add_suffix(i->total_download)
|
std::cout << "d: " << add_suffix(i->down_speed) << "/s (" << add_suffix(i->total_download)
|
||||||
<< ") u: " << add_suffix(i->up_speed) << "/s (" << add_suffix(i->total_upload)
|
<< ") u: " << add_suffix(i->up_speed) << "/s (" << add_suffix(i->total_upload)
|
||||||
<< ") ratio: " << static_cast<float>(i->total_upload+1) / static_cast<float>(i->total_download+1)
|
<< ") diff: " << add_suffix(i->total_download - i->total_upload)
|
||||||
<< " flags: "
|
<< " flags: "
|
||||||
<< static_cast<const char*>((i->flags & peer_info::interesting)?"I":"_")
|
<< static_cast<const char*>((i->flags & peer_info::interesting)?"I":"_")
|
||||||
<< static_cast<const char*>((i->flags & peer_info::choked)?"C":"_")
|
<< static_cast<const char*>((i->flags & peer_info::choked)?"C":"_")
|
||||||
|
@ -267,8 +278,8 @@ int main(int argc, char* argv[])
|
||||||
<< static_cast<const char*>((i->flags & peer_info::remote_choked)?"c":"_") << "\n";
|
<< static_cast<const char*>((i->flags & peer_info::remote_choked)?"c":"_") << "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
/*
|
||||||
i->get_download_queue(queue);
|
i->get_download_queue(queue);
|
||||||
for (std::vector<partial_piece_info>::iterator i = queue.begin();
|
for (std::vector<partial_piece_info>::iterator i = queue.begin();
|
||||||
i != queue.end();
|
i != queue.end();
|
||||||
|
@ -283,7 +294,7 @@ int main(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
std::cout << "\n";
|
std::cout << "\n";
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
std::cout << "___________________________________\n";
|
std::cout << "___________________________________\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -342,6 +342,7 @@ namespace libtorrent
|
||||||
// this peer given the current download rate
|
// this peer given the current download rate
|
||||||
// and the current share ratio with this peer.
|
// and the current share ratio with this peer.
|
||||||
// this limit will maintain a 1:1 share ratio.
|
// this limit will maintain a 1:1 share ratio.
|
||||||
|
// -1 means no limit
|
||||||
int m_send_quota_limit;
|
int m_send_quota_limit;
|
||||||
|
|
||||||
// for every valid piece we receive where this
|
// for every valid piece we receive where this
|
||||||
|
@ -369,6 +370,7 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(m_send_quota_left > 0 || m_send_quota_left == -1);
|
||||||
assert(has_data());
|
assert(has_data());
|
||||||
if (!m_added_to_selector)
|
if (!m_added_to_selector)
|
||||||
{
|
{
|
||||||
|
|
|
@ -762,15 +762,27 @@ void libtorrent::peer_connection::second_tick()
|
||||||
// both peers uses this technique! It could be
|
// both peers uses this technique! It could be
|
||||||
// enough to just have a constant positive bias
|
// enough to just have a constant positive bias
|
||||||
// of the send_quota_limit
|
// of the send_quota_limit
|
||||||
int bias = (static_cast<int>(m_statistics.total_download())
|
int diff = static_cast<int>(m_statistics.total_download())
|
||||||
- static_cast<int>(m_statistics.total_upload())) / 1024;
|
- static_cast<int>(m_statistics.total_upload());
|
||||||
|
|
||||||
// the maximum send_quota given our download rate from this peer
|
if (diff > m_torrent->torrent_file().piece_length())
|
||||||
int m_send_quota_limit = m_statistics.download_rate() + bias;
|
{
|
||||||
if (m_send_quota_limit < 500) m_send_quota_limit = 500;
|
// if we have downloaded more than one piece more
|
||||||
|
// than we have uploaded, have an unlimited
|
||||||
// TODO: temporary
|
// upload rate
|
||||||
m_send_quota_limit = 1024*1024;
|
m_send_quota = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if we have downloaded too much, response with an
|
||||||
|
// upload rate of 10 kB/s more than we dowlload
|
||||||
|
// if we have uploaded too much, send with a rate of
|
||||||
|
// 10 kB/s less than we receive
|
||||||
|
int bias = (diff > 0 ? 10 : -10) * 1024;
|
||||||
|
// the maximum send_quota given our download rate from this peer
|
||||||
|
m_send_quota_limit = m_statistics.download_rate() + bias;
|
||||||
|
if (m_send_quota_limit < 500) m_send_quota_limit = 500;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
|
@ -93,7 +93,7 @@ namespace
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: IMPLEMENT!
|
// TODO: upload limit support is currently broken
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1427,7 +1427,8 @@ namespace libtorrent {
|
||||||
|
|
||||||
in.read(buf + buf_pos, read_bytes);
|
in.read(buf + buf_pos, read_bytes);
|
||||||
|
|
||||||
assert(read_bytes == in.gcount());
|
int actual_read = in.gcount();
|
||||||
|
assert(read_bytes == actual_read);
|
||||||
|
|
||||||
left_to_read -= read_bytes;
|
left_to_read -= read_bytes;
|
||||||
buf_pos += read_bytes;
|
buf_pos += read_bytes;
|
||||||
|
@ -1590,7 +1591,7 @@ namespace libtorrent {
|
||||||
std::vector<char> piece_data(m_info.piece_length());
|
std::vector<char> piece_data(m_info.piece_length());
|
||||||
std::size_t piece_offset = 0;
|
std::size_t piece_offset = 0;
|
||||||
|
|
||||||
std::size_t current_piece = 0;
|
int current_piece = 0;
|
||||||
std::size_t bytes_to_read = piece_size;
|
std::size_t bytes_to_read = piece_size;
|
||||||
std::size_t bytes_current_read = 0;
|
std::size_t bytes_current_read = 0;
|
||||||
std::size_t seek_into_next = 0;
|
std::size_t seek_into_next = 0;
|
||||||
|
@ -1679,6 +1680,7 @@ namespace libtorrent {
|
||||||
{
|
{
|
||||||
m_unallocated_slots.push_back(current_piece);
|
m_unallocated_slots.push_back(current_piece);
|
||||||
++current_piece;
|
++current_piece;
|
||||||
|
assert(current_piece <= m_info.num_pieces());
|
||||||
}
|
}
|
||||||
|
|
||||||
seek_into_next = pos - file_end;
|
seek_into_next = pos - file_end;
|
||||||
|
|
|
@ -376,12 +376,12 @@ namespace libtorrent
|
||||||
|
|
||||||
const entry::dictionary_type& msg = e.dict();
|
const entry::dictionary_type& msg = e.dict();
|
||||||
i = msg.find("interval");
|
i = msg.find("interval");
|
||||||
if (i == msg.end()) throw std::runtime_error("invalid response from tracker");
|
if (i == msg.end()) throw std::runtime_error("invalid response from tracker (no interval)");
|
||||||
|
|
||||||
m_duration = i->second.integer();
|
m_duration = i->second.integer();
|
||||||
|
|
||||||
i = msg.find("peers");
|
i = msg.find("peers");
|
||||||
if (i == msg.end()) throw std::runtime_error("invalid response from tracker");
|
if (i == msg.end()) throw std::runtime_error("invalid response from tracker (no peers)");
|
||||||
|
|
||||||
peer_list.clear();
|
peer_list.clear();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue