*** empty log message ***

This commit is contained in:
Arvid Norberg 2003-12-08 01:37:30 +00:00
parent 5e0dbf78b0
commit 3ed0745cb1
6 changed files with 47 additions and 20 deletions

View File

@ -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";
} }

View File

@ -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)
{ {

View File

@ -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;
}
} }
// -------------------------- // --------------------------

View File

@ -93,7 +93,7 @@ namespace
return; return;
} }
// TODO: IMPLEMENT! // TODO: upload limit support is currently broken
assert(false); assert(false);

View File

@ -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;

View File

@ -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();