* Only request from the same tracker more than once if PEX is disabled.

* Added target_any.


git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@970 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
rakshasa
2007-08-31 11:44:21 +00:00
parent 332b4a303f
commit ac2f5a8882
6 changed files with 64 additions and 22 deletions
+12
View File
@@ -60,6 +60,7 @@ CommandMap::insert(key_type key, Command* variable, int flags, const char* parm,
return base_type::insert(itr, value_type(key, command_map_data_type(variable, flags, parm, doc)));
}
// The functions below should be reduced to just one.
void
CommandMap::insert_generic(key_type key, Command* variable, generic_slot targetSlot, int flags, const char* parm, const char* doc) {
iterator itr = insert(key, variable, flags, parm, doc);
@@ -68,6 +69,14 @@ CommandMap::insert_generic(key_type key, Command* variable, generic_slot targetS
itr->second.m_genericSlot = targetSlot;
}
void
CommandMap::insert_any(key_type key, Command* variable, any_slot targetSlot, int flags, const char* parm, const char* doc) {
iterator itr = insert(key, variable, flags, parm, doc);
itr->second.m_target = target_any;
itr->second.m_anySlot = targetSlot;
}
void
CommandMap::insert_download(key_type key, Command* variable, download_slot targetSlot, int flags, const char* parm, const char* doc) {
iterator itr = insert(key, variable, flags, parm, doc);
@@ -122,6 +131,7 @@ CommandMap::insert(key_type key, const command_map_data_type src) {
// This _should_ be optimized int just one assignment.
switch (itr->second.m_target) {
case target_generic: itr->second.m_genericSlot = src.m_genericSlot; break;
case target_any: itr->second.m_anySlot = src.m_anySlot; break;
case target_download: itr->second.m_downloadSlot = src.m_downloadSlot; break;
case target_file: itr->second.m_fileSlot = src.m_fileSlot; break;
case target_peer: itr->second.m_peerSlot = src.m_peerSlot; break;
@@ -144,6 +154,7 @@ CommandMap::call_command(key_type key, const mapped_type& arg, target_type targe
// This _should_ be optimized int just two calls.
switch (itr->second.m_target) {
case target_generic: return itr->second.m_genericSlot (itr->second.m_variable, arg);
case target_any: return itr->second.m_anySlot (itr->second.m_variable, target, arg);
case target_download: return itr->second.m_downloadSlot(itr->second.m_variable, (core::Download*)target.second, arg);
case target_peer: return itr->second.m_peerSlot (itr->second.m_variable, (torrent::Peer*)target.second, arg);
case target_tracker: return itr->second.m_trackerSlot (itr->second.m_variable, (torrent::Tracker*)target.second, arg);
@@ -162,6 +173,7 @@ CommandMap::call_command(const_iterator itr, const mapped_type& arg, target_type
// This _should_ be optimized int just two calls.
switch (itr->second.m_target) {
case target_generic: return itr->second.m_genericSlot (itr->second.m_variable, arg);
case target_any: return itr->second.m_anySlot (itr->second.m_variable, target, arg);
case target_download: return itr->second.m_downloadSlot(itr->second.m_variable, (core::Download*)target.second, arg);
case target_peer: return itr->second.m_peerSlot (itr->second.m_variable, (torrent::Peer*)target.second, arg);
case target_tracker: return itr->second.m_trackerSlot (itr->second.m_variable, (torrent::Tracker*)target.second, arg);