|
|
@ -462,16 +462,16 @@ namespace libtorrent
|
|
|
|
error_code ec;
|
|
|
|
error_code ec;
|
|
|
|
lazy_entry tmp;
|
|
|
|
lazy_entry tmp;
|
|
|
|
lazy_entry const* info = 0;
|
|
|
|
lazy_entry const* info = 0;
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " adding magnet link with resume data\n";
|
|
|
|
debug_log("adding magnet link with resume data");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (lazy_bdecode(&(*p.resume_data)[0], &(*p.resume_data)[0]
|
|
|
|
if (lazy_bdecode(&(*p.resume_data)[0], &(*p.resume_data)[0]
|
|
|
|
+ p.resume_data->size(), tmp, ec, &pos) == 0
|
|
|
|
+ p.resume_data->size(), tmp, ec, &pos) == 0
|
|
|
|
&& tmp.type() == lazy_entry::dict_t
|
|
|
|
&& tmp.type() == lazy_entry::dict_t
|
|
|
|
&& (info = tmp.dict_find_dict("info")))
|
|
|
|
&& (info = tmp.dict_find_dict("info")))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " found metadata in resume data\n";
|
|
|
|
debug_log("found metadata in resume data");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
// verify the info-hash of the metadata stored in the resume file matches
|
|
|
|
// verify the info-hash of the metadata stored in the resume file matches
|
|
|
|
// the torrent we're loading
|
|
|
|
// the torrent we're loading
|
|
|
@ -483,36 +483,36 @@ namespace libtorrent
|
|
|
|
// torrent, but the hash of the URL, until we have the full torrent
|
|
|
|
// torrent, but the hash of the URL, until we have the full torrent
|
|
|
|
if (resume_ih == info_hash || !p.url.empty())
|
|
|
|
if (resume_ih == info_hash || !p.url.empty())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " info-hash matched\n";
|
|
|
|
debug_log("info-hash matched");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
m_torrent_file = (p.ti ? p.ti : new torrent_info(resume_ih));
|
|
|
|
m_torrent_file = (p.ti ? p.ti : new torrent_info(resume_ih));
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_torrent_file->parse_info_section(*info, ec, 0))
|
|
|
|
if (!m_torrent_file->parse_info_section(*info, ec, 0))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " failed to load metadata from resume file: "
|
|
|
|
debug_log("failed to load metadata from resume file: %s"
|
|
|
|
<< ec.message() << "\n";
|
|
|
|
, ec.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " successfully loaded metadata from resume file\n";
|
|
|
|
debug_log("successfully loaded metadata from resume file");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " metadata info-hash failed\n";
|
|
|
|
debug_log("metadata info-hash failed");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " no metadata found\n";
|
|
|
|
debug_log("no metadata found");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -537,8 +537,7 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " creating torrent: "
|
|
|
|
debug_log("creating torrent: %s", torrent_file().name().c_str());
|
|
|
|
<< torrent_file().name() << "\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
m_net_interfaces.push_back(tcp::endpoint(net_interface.address(), 0));
|
|
|
|
m_net_interfaces.push_back(tcp::endpoint(net_interface.address(), 0));
|
|
|
|
|
|
|
|
|
|
|
@ -865,9 +864,8 @@ namespace libtorrent
|
|
|
|
void torrent::start()
|
|
|
|
void torrent::start()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " starting torrent: "
|
|
|
|
debug_log("starting torrent");
|
|
|
|
<< torrent_file().name() << "\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
TORRENT_ASSERT(!m_picker);
|
|
|
|
TORRENT_ASSERT(!m_picker);
|
|
|
|
|
|
|
|
|
|
|
@ -886,9 +884,7 @@ namespace libtorrent
|
|
|
|
std::vector<char>().swap(m_resume_data);
|
|
|
|
std::vector<char>().swap(m_resume_data);
|
|
|
|
lazy_entry().swap(m_resume_entry);
|
|
|
|
lazy_entry().swap(m_resume_entry);
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " fastresume data for "
|
|
|
|
debug_log("resume data rejected: %s pos: %d", ec.message().c_str(), pos);
|
|
|
|
<< torrent_file().name() << " rejected: " << ec.message()
|
|
|
|
|
|
|
|
<< " pos: " << pos << "\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (m_ses.m_alerts.should_post<fastresume_rejected_alert>())
|
|
|
|
if (m_ses.m_alerts.should_post<fastresume_rejected_alert>())
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1128,10 +1124,8 @@ namespace libtorrent
|
|
|
|
if (!j.error) return;
|
|
|
|
if (!j.error) return;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << "disk error: '" << j.error.message()
|
|
|
|
debug_log("disk error: (%d) %s in file: %d", j.error.value(), j.error.message().c_str()
|
|
|
|
<< " in file " << j.error_file
|
|
|
|
, j.error_file.c_str());
|
|
|
|
<< " in torrent " << torrent_file().name()
|
|
|
|
|
|
|
|
<< "\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
TORRENT_ASSERT(j.piece >= 0);
|
|
|
|
TORRENT_ASSERT(j.piece >= 0);
|
|
|
@ -1442,10 +1436,9 @@ namespace libtorrent
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING)
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " <== INCOMING SSL CONNECTION [ torrent: "
|
|
|
|
debug_log("<== incoming SSL CONNECTION [ n: %s | match: %s ]"
|
|
|
|
<< m_torrent_file->name() << " | n: " << names << " | match: " << (match?"yes":"no")
|
|
|
|
, names.c_str(), match?"yes":"no");
|
|
|
|
<< " ]\n";
|
|
|
|
|
|
|
|
return match;
|
|
|
|
return match;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -1681,9 +1674,8 @@ namespace libtorrent
|
|
|
|
if (ev)
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " fastresume data for "
|
|
|
|
debug_log("fastresume data rejected: %s"
|
|
|
|
<< torrent_file().name() << " rejected: "
|
|
|
|
, error_code(ev, get_libtorrent_category()).message().c_str());
|
|
|
|
<< error_code(ev, get_libtorrent_category()).message() << "\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
std::vector<char>().swap(m_resume_data);
|
|
|
|
std::vector<char>().swap(m_resume_data);
|
|
|
|
lazy_entry().swap(m_resume_entry);
|
|
|
|
lazy_entry().swap(m_resume_entry);
|
|
|
@ -1898,9 +1890,15 @@ namespace libtorrent
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " fastresume data for "
|
|
|
|
if (ret != 0)
|
|
|
|
<< torrent_file().name() << " rejected: "
|
|
|
|
{
|
|
|
|
<< j.error.message() << " ret:" << ret << "\n";
|
|
|
|
debug_log("fastresume data rejected: ret: %d (%d) %s"
|
|
|
|
|
|
|
|
, ret, j.error.value(), j.error.message().c_str());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
debug_log("fastresume data rejected accepted");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// if ret != 0, it means we need a full check. We don't necessarily need
|
|
|
|
// if ret != 0, it means we need a full check. We don't necessarily need
|
|
|
@ -2105,10 +2103,7 @@ namespace libtorrent
|
|
|
|
m_ses.m_alerts.post_alert(file_error_alert(j.error_file, get_handle(), j.error));
|
|
|
|
m_ses.m_alerts.post_alert(file_error_alert(j.error_file, get_handle(), j.error));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << ": fatal disk error ["
|
|
|
|
debug_log("fatal disk error: (%d) %s", j.error.value(), j.error.message().c_str());
|
|
|
|
" error: " << j.error.message() <<
|
|
|
|
|
|
|
|
" torrent: " << torrent_file().name() <<
|
|
|
|
|
|
|
|
" ]\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
pause();
|
|
|
|
pause();
|
|
|
|
set_error(j.error, j.error_file);
|
|
|
|
set_error(j.error, j.error_file);
|
|
|
@ -2418,10 +2413,12 @@ namespace libtorrent
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " ==> TACKER REQUEST " << req.url
|
|
|
|
debug_log(" ==> TRACKER REQUEST \"%s\" event: %s abort: %d"
|
|
|
|
<< " event=" << (req.event==tracker_request::stopped?"stopped"
|
|
|
|
, req.url.c_str()
|
|
|
|
|
|
|
|
, (req.event==tracker_request::stopped?"stopped"
|
|
|
|
:req.event==tracker_request::started?"started":"")
|
|
|
|
:req.event==tracker_request::started?"started":"")
|
|
|
|
<< " abort=" << m_abort << "\n";
|
|
|
|
, m_abort);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_abort)
|
|
|
|
if (m_abort)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
boost::shared_ptr<aux::tracker_logger> tl(new aux::tracker_logger(m_ses));
|
|
|
|
boost::shared_ptr<aux::tracker_logger> tl(new aux::tracker_logger(m_ses));
|
|
|
@ -2430,8 +2427,11 @@ namespace libtorrent
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
m_ses.m_tracker_manager.queue_request(m_ses.m_io_service, m_ses.m_half_open, req
|
|
|
|
{
|
|
|
|
, tracker_login() , shared_from_this());
|
|
|
|
m_ses.m_tracker_manager.queue_request(m_ses.m_io_service, m_ses.m_half_open, req
|
|
|
|
|
|
|
|
, tracker_login() , shared_from_this());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ae.updating = true;
|
|
|
|
ae.updating = true;
|
|
|
|
ae.next_announce = now + seconds(20);
|
|
|
|
ae.next_announce = now + seconds(20);
|
|
|
|
ae.min_announce = now + seconds(10);
|
|
|
|
ae.min_announce = now + seconds(10);
|
|
|
@ -2579,7 +2579,7 @@ namespace libtorrent
|
|
|
|
std::copy(tracker_ips.begin(), tracker_ips.end(), std::ostream_iterator<address>(s, " "));
|
|
|
|
std::copy(tracker_ips.begin(), tracker_ips.end(), std::ostream_iterator<address>(s, " "));
|
|
|
|
s << "\n";
|
|
|
|
s << "\n";
|
|
|
|
s << "we connected to: " << tracker_ip << "\n";
|
|
|
|
s << "we connected to: " << tracker_ip << "\n";
|
|
|
|
debug_log(s.str());
|
|
|
|
debug_log("%s", s.str().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
// for each of the peers we got from the tracker
|
|
|
|
// for each of the peers we got from the tracker
|
|
|
|
for (std::vector<peer_entry>::iterator i = peer_list.begin();
|
|
|
|
for (std::vector<peer_entry>::iterator i = peer_list.begin();
|
|
|
@ -2676,8 +2676,8 @@ namespace libtorrent
|
|
|
|
:m_ses.m_ipv4_interface.address();
|
|
|
|
:m_ses.m_ipv4_interface.address();
|
|
|
|
announce_with_tracker(r.event, bind_interface);
|
|
|
|
announce_with_tracker(r.event, bind_interface);
|
|
|
|
#if (defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING) && TORRENT_USE_IOSTREAM
|
|
|
|
#if (defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING) && TORRENT_USE_IOSTREAM
|
|
|
|
debug_log("announce again using " + print_address(bind_interface)
|
|
|
|
debug_log("announce again using %s as the bind interface"
|
|
|
|
+ " as the bind interface");
|
|
|
|
, print_address(bind_interface).c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2743,7 +2743,7 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
if (ec)
|
|
|
|
if (ec)
|
|
|
|
*m_ses.m_logger << time_now_string() << " on_i2p_resolve: " << ec.message() << "\n";
|
|
|
|
debug_log("i2p_resolve error: %s", ec.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (ec || m_ses.is_aborted()) return;
|
|
|
|
if (ec || m_ses.is_aborted()) return;
|
|
|
|
|
|
|
|
|
|
|
@ -2764,7 +2764,7 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
if (e)
|
|
|
|
if (e)
|
|
|
|
*m_ses.m_logger << time_now_string() << " on_peer_name_lookup: " << e.message() << "\n";
|
|
|
|
debug_log("peer name lookup error: %s", e.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (e || host == tcp::resolver::iterator() ||
|
|
|
|
if (e || host == tcp::resolver::iterator() ||
|
|
|
|
m_ses.is_aborted()) return;
|
|
|
|
m_ses.is_aborted()) return;
|
|
|
@ -2774,7 +2774,7 @@ namespace libtorrent
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
error_code ec;
|
|
|
|
error_code ec;
|
|
|
|
debug_log("blocked ip from tracker: " + host->endpoint().address().to_string(ec));
|
|
|
|
debug_log("blocked ip from tracker: %s", host->endpoint().address().to_string(ec).c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (m_ses.m_alerts.should_post<peer_blocked_alert>())
|
|
|
|
if (m_ses.m_alerts.should_post<peer_blocked_alert>())
|
|
|
|
m_ses.m_alerts.post_alert(peer_blocked_alert(get_handle(), host->endpoint().address()));
|
|
|
|
m_ses.m_alerts.post_alert(peer_blocked_alert(get_handle(), host->endpoint().address()));
|
|
|
@ -3088,11 +3088,11 @@ namespace libtorrent
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " *** PIECE_FINISHED [ p: "
|
|
|
|
debug_log("*** PIECE_FINISHED [ p: %d | chk: %s | size: %d ]"
|
|
|
|
<< index << " chk: " << ((passed_hash_check == 0)
|
|
|
|
, index, ((passed_hash_check == 0)
|
|
|
|
?"passed":passed_hash_check == -1
|
|
|
|
?"passed":passed_hash_check == -1
|
|
|
|
?"disk failed":"failed") << " size: "
|
|
|
|
?"disk failed":"failed")
|
|
|
|
<< m_torrent_file->piece_size(index) << " ]\n";
|
|
|
|
, m_torrent_file->piece_size(index));
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
TORRENT_ASSERT(valid_metadata());
|
|
|
|
TORRENT_ASSERT(valid_metadata());
|
|
|
@ -3439,12 +3439,11 @@ namespace libtorrent
|
|
|
|
if (p->connection)
|
|
|
|
if (p->connection)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#ifdef TORRENT_LOGGING
|
|
|
|
#ifdef TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " *** BANNING PEER [ " << p->ip()
|
|
|
|
debug_log("*** BANNING PEER: \"%s\" Too many corrupt pieces"
|
|
|
|
<< " ] 'too many corrupt pieces'\n";
|
|
|
|
, print_endpoint(p->ip()).c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*p->connection->m_logger) << "*** BANNING PEER [ " << p->ip()
|
|
|
|
p->connection->peer_log("*** BANNING PEER: Too many corrupt pieces");
|
|
|
|
<< " ] 'too many corrupt pieces'\n";
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
p->connection->disconnect(errors::too_many_corrupt_pieces);
|
|
|
|
p->connection->disconnect(errors::too_many_corrupt_pieces);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4435,7 +4434,7 @@ namespace libtorrent
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " resolving web seed: " << web->url << "\n";
|
|
|
|
debug_log("resolving web seed: %s", web->url.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
std::string protocol;
|
|
|
|
std::string protocol;
|
|
|
@ -4449,8 +4448,8 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
if (ec)
|
|
|
|
if (ec)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " failed to parse web seed url: " << ec.message() << "\n";
|
|
|
|
debug_log("failed to parse web seed url: %s", ec.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -4465,7 +4464,7 @@ namespace libtorrent
|
|
|
|
if (web->peer_info.banned)
|
|
|
|
if (web->peer_info.banned)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << "banned web seed: " << web->url << "\n";
|
|
|
|
debug_log("banned web seed: %s", web->url.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -4571,16 +4570,18 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
TORRENT_ASSERT(web->resolving == true);
|
|
|
|
TORRENT_ASSERT(web->resolving == true);
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " completed resolve proxy hostname for: " << web->url << "\n";
|
|
|
|
debug_log("completed resolve proxy hostname for: %s", web->url.c_str());
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
if (e)
|
|
|
|
if (e)
|
|
|
|
*m_ses.m_logger << time_now_string() << " on_proxy_name_lookup: " << e.message() << "\n";
|
|
|
|
debug_log("proxy name lookup error: %s", e.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
web->resolving = false;
|
|
|
|
web->resolving = false;
|
|
|
|
|
|
|
|
|
|
|
|
if (web->removed)
|
|
|
|
if (web->removed)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " removed web seed\n";
|
|
|
|
debug_log("removed web seed");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
remove_web_seed(web);
|
|
|
|
remove_web_seed(web);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -4659,13 +4660,13 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
TORRENT_ASSERT(web->resolving == true);
|
|
|
|
TORRENT_ASSERT(web->resolving == true);
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " completed resolve: " << web->url << "\n";
|
|
|
|
debug_log("completed resolve: %s", web->url.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
web->resolving = false;
|
|
|
|
web->resolving = false;
|
|
|
|
if (web->removed)
|
|
|
|
if (web->removed)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " removed web seed\n";
|
|
|
|
debug_log("removed web seed");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
remove_web_seed(web);
|
|
|
|
remove_web_seed(web);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -4678,8 +4679,8 @@ namespace libtorrent
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
if (m_ses.m_alerts.should_post<url_seed_alert>())
|
|
|
|
m_ses.m_alerts.post_alert(url_seed_alert(get_handle(), web->url, e));
|
|
|
|
m_ses.m_alerts.post_alert(url_seed_alert(get_handle(), web->url, e));
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << " ** HOSTNAME LOOKUP FAILED!**: " << web->url
|
|
|
|
debug_log("*** HOSTNAME LOOKUP FAILED: %s: (%d) %s"
|
|
|
|
<< " " << e.message() << "\n";
|
|
|
|
, web->url.c_str(), e.value(), e.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// unavailable, retry in 30 minutes
|
|
|
|
// unavailable, retry in 30 minutes
|
|
|
@ -4820,7 +4821,7 @@ namespace libtorrent
|
|
|
|
web->peer_info.prev_amount_download = 0;
|
|
|
|
web->peer_info.prev_amount_download = 0;
|
|
|
|
web->peer_info.prev_amount_upload = 0;
|
|
|
|
web->peer_info.prev_amount_upload = 0;
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " web seed connection started " << web->url << "\n";
|
|
|
|
debug_log("web seed connection started: %s", web->url.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
c->start();
|
|
|
|
c->start();
|
|
|
@ -4835,7 +4836,7 @@ namespace libtorrent
|
|
|
|
TORRENT_DECLARE_DUMMY(std::exception, e);
|
|
|
|
TORRENT_DECLARE_DUMMY(std::exception, e);
|
|
|
|
(void)e;
|
|
|
|
(void)e;
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << " ** HOSTNAME LOOKUP FAILED!**: " << e.what() << "\n";
|
|
|
|
debug_log("*** HOST NAME LOOKUP FAILED: %s", e.what());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
c->disconnect(errors::no_error, 1);
|
|
|
|
c->disconnect(errors::no_error, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4974,7 +4975,8 @@ namespace libtorrent
|
|
|
|
// unknown country!
|
|
|
|
// unknown country!
|
|
|
|
p->set_country("!!");
|
|
|
|
p->set_country("!!");
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << "IP " << p->remote().address() << " was mapped to unknown country: " << country << "\n";
|
|
|
|
debug_log("IP \"%s\" was mapped to unknown country: %d"
|
|
|
|
|
|
|
|
, print_address(p->remote().address()).c_str(), country);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5937,8 +5939,8 @@ namespace libtorrent
|
|
|
|
if (!m_policy.new_connection(*p, m_ses.session_time()))
|
|
|
|
if (!m_policy.new_connection(*p, m_ses.session_time()))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " CLOSING CONNECTION "
|
|
|
|
debug_log("CLOSING CONNECTION \"%s\" peer list full"
|
|
|
|
<< p->remote() << " policy::new_connection returned false (i.e. peer list full)\n";
|
|
|
|
, print_endpoint(p->remote()).c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
p->disconnect(errors::too_many_connections);
|
|
|
|
p->disconnect(errors::too_many_connections);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -5949,8 +5951,8 @@ namespace libtorrent
|
|
|
|
TORRENT_DECLARE_DUMMY(std::exception, e);
|
|
|
|
TORRENT_DECLARE_DUMMY(std::exception, e);
|
|
|
|
(void)e;
|
|
|
|
(void)e;
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
#if defined TORRENT_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " CLOSING CONNECTION "
|
|
|
|
debug_log("CLOSING CONNECTION \"%s\" caught exception: %s"
|
|
|
|
<< p->remote() << " policy::new_connection threw: " << e.what() << "\n";
|
|
|
|
, print_endpoint(p->remote()).c_str(), e.what());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
p->disconnect(errors::no_error);
|
|
|
|
p->disconnect(errors::no_error);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -5998,7 +6000,7 @@ namespace libtorrent
|
|
|
|
TORRENT_ASSERT(p->associated_torrent().lock().get() == this);
|
|
|
|
TORRENT_ASSERT(p->associated_torrent().lock().get() == this);
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*p->m_logger) << "*** CLOSING CONNECTION: " << ec.message() << "\n";
|
|
|
|
p->peer_log("*** CLOSING CONNECTION \"%s\"", ec.message().c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS
|
|
|
|
#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS
|
|
|
|
std::size_t size = m_connections.size();
|
|
|
|
std::size_t size = m_connections.size();
|
|
|
@ -6127,7 +6129,7 @@ namespace libtorrent
|
|
|
|
if (p->upload_only())
|
|
|
|
if (p->upload_only())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*p->m_logger) << "*** SEED, CLOSING CONNECTION\n";
|
|
|
|
p->peer_log("*** SEED, CLOSING CONNECTION");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
seeds.push_back(p);
|
|
|
|
seeds.push_back(p);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -6232,7 +6234,13 @@ namespace libtorrent
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_torrent_file->is_valid());
|
|
|
|
TORRENT_ASSERT(m_torrent_file->is_valid());
|
|
|
|
|
|
|
|
|
|
|
|
if (m_abort) return;
|
|
|
|
if (m_abort)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
|
|
|
|
debug_log("files_checked(), paused");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// we might be finished already, in which case we should
|
|
|
|
// we might be finished already, in which case we should
|
|
|
|
// not switch to downloading mode. If all files are
|
|
|
|
// not switch to downloading mode. If all files are
|
|
|
@ -7161,7 +7169,7 @@ namespace libtorrent
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " " << message << "\n";
|
|
|
|
debug_log("%s", message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
@ -7329,11 +7337,23 @@ namespace libtorrent
|
|
|
|
void torrent::start_announcing()
|
|
|
|
void torrent::start_announcing()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
if (is_paused()) return;
|
|
|
|
if (is_paused())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
|
|
|
|
debug_log("start_announcing(), paused");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
// if we don't have metadata, we need to announce
|
|
|
|
// if we don't have metadata, we need to announce
|
|
|
|
// before checking files, to get peers to
|
|
|
|
// before checking files, to get peers to
|
|
|
|
// request the metadata from
|
|
|
|
// request the metadata from
|
|
|
|
if (!m_files_checked && valid_metadata()) return;
|
|
|
|
if (!m_files_checked && valid_metadata())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
|
|
|
|
debug_log("start_announcing(), files not checked (with valid metadata)");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (m_announcing) return;
|
|
|
|
if (m_announcing) return;
|
|
|
|
|
|
|
|
|
|
|
|
m_announcing = true;
|
|
|
|
m_announcing = true;
|
|
|
@ -8005,7 +8025,7 @@ namespace libtorrent
|
|
|
|
TORRENT_ASSERT(i->resolving == false);
|
|
|
|
TORRENT_ASSERT(i->resolving == false);
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " disconnect_web_seed: " << i->url << "\n";
|
|
|
|
debug_log("disconnect web seed: \"%s\"", i->url.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
TORRENT_ASSERT(i->peer_info.connection);
|
|
|
|
TORRENT_ASSERT(i->peer_info.connection);
|
|
|
|
i->peer_info.connection = 0;
|
|
|
|
i->peer_info.connection = 0;
|
|
|
@ -8308,6 +8328,10 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
m_state = s;
|
|
|
|
m_state = s;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
|
|
|
|
|
|
|
debug_log("set_state() %d", m_state);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// update finished and downloading counters
|
|
|
|
// update finished and downloading counters
|
|
|
|
if (was_active_download && !is_active_download()) m_ses.dec_active_downloading();
|
|
|
|
if (was_active_download && !is_active_download()) m_ses.dec_active_downloading();
|
|
|
|
else if (!was_active_download && is_active_download()) m_ses.inc_active_downloading();
|
|
|
|
else if (!was_active_download && is_active_download()) m_ses.inc_active_downloading();
|
|
|
@ -8602,7 +8626,7 @@ namespace libtorrent
|
|
|
|
INVARIANT_CHECK;
|
|
|
|
INVARIANT_CHECK;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
debug_log("*** tracker error: " + ec.message() + " " + msg);
|
|
|
|
debug_log("*** tracker error: (%d) %s %s", ec.value(), ec.message().c_str(), msg.c_str());
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
if (r.kind == tracker_request::announce_request)
|
|
|
|
if (r.kind == tracker_request::announce_request)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -8614,8 +8638,7 @@ namespace libtorrent
|
|
|
|
ae->message = msg;
|
|
|
|
ae->message = msg;
|
|
|
|
int tracker_index = ae - &m_trackers[0];
|
|
|
|
int tracker_index = ae - &m_trackers[0];
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
debug_log("*** increment tracker fail count ["
|
|
|
|
debug_log("*** increment tracker fail count [%d]", ae->fails);
|
|
|
|
+ std::string(to_string(ae->fails).elems) + "]");
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
deprioritize_tracker(tracker_index);
|
|
|
|
deprioritize_tracker(tracker_index);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -8640,10 +8663,20 @@ namespace libtorrent
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
|
|
|
void torrent::debug_log(const std::string& line)
|
|
|
|
void torrent::debug_log(const char* fmt, ...) const
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TORRENT_ASSERT(m_ses.is_network_thread());
|
|
|
|
if (!m_ses.m_logger) return;
|
|
|
|
(*m_ses.m_logger) << time_now_string() << " " << line << "\n";
|
|
|
|
|
|
|
|
|
|
|
|
va_list v;
|
|
|
|
|
|
|
|
va_start(v, fmt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char usr[1024];
|
|
|
|
|
|
|
|
vsnprintf(usr, sizeof(usr), fmt, v);
|
|
|
|
|
|
|
|
va_end(v);
|
|
|
|
|
|
|
|
char buf[1280];
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf), "%s: %s: %s\n", time_now_string()
|
|
|
|
|
|
|
|
, to_hex(info_hash().to_string()).substr(0, 6).c_str(), usr);
|
|
|
|
|
|
|
|
(*m_ses.m_logger) << buf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|