post alerts for socks failures. fix unit tests

This commit is contained in:
Arvid Norberg 2010-08-25 06:22:49 +00:00
parent 58574c236a
commit b44f71e217
5 changed files with 45 additions and 30 deletions

View File

@ -3228,7 +3228,10 @@ namespace libtorrent
if (ec) if (ec)
{ {
if (error > 1 && m_ses.m_alerts.should_post<peer_error_alert>()) if ((error > 1
|| ec.category() == get_libtorrent_category()
|| ec.category() == socks_category)
&& m_ses.m_alerts.should_post<peer_error_alert>())
{ {
m_ses.m_alerts.post_alert( m_ses.m_alerts.post_alert(
peer_error_alert(handle, remote(), pid(), ec)); peer_error_alert(handle, remote(), pid(), ec));

View File

@ -1363,6 +1363,13 @@ namespace aux {
listen_socket_t s; listen_socket_t s;
s.sock.reset(new socket_acceptor(m_io_service)); s.sock.reset(new socket_acceptor(m_io_service));
s.sock->open(ep.protocol(), ec); s.sock->open(ep.protocol(), ec);
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
if (ec)
{
(*m_logger) << "failed to open socket: " << print_endpoint(ep)
<< ": " << ec.message() << "\n" << "\n";
}
#endif
if (reuse_address) if (reuse_address)
s.sock->set_option(socket_acceptor::reuse_address(true), ec); s.sock->set_option(socket_acceptor::reuse_address(true), ec);
#if TORRENT_USE_IPV6 #if TORRENT_USE_IPV6
@ -1382,6 +1389,12 @@ namespace aux {
s.sock->bind(ep, ec); s.sock->bind(ep, ec);
while (ec && retries > 0) while (ec && retries > 0)
{ {
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
char msg[200];
snprintf(msg, 200, "failed to bind to interface \"%s\": %s"
, print_endpoint(ep).c_str(), ec.message().c_str());
(*m_logger) << msg << "\n";
#endif
ec = error_code(); ec = error_code();
TORRENT_ASSERT(!ec); TORRENT_ASSERT(!ec);
--retries; --retries;
@ -1454,15 +1467,11 @@ namespace aux {
if (s.sock) if (s.sock)
{ {
// if we're configured to listen on port 0 (i.e. let the // update the listen_interface member with the
// OS decide), update the listen_interface member with the
// actual port we ended up listening on, so that the other // actual port we ended up listening on, so that the other
// sockets can be bound to the same one // sockets can be bound to the same one
if (m_listen_interface.port() == 0)
{
error_code ec; error_code ec;
m_listen_interface.port(s.sock->local_endpoint(ec).port()); m_listen_interface.port(s.sock->local_endpoint(ec).port());
}
m_listen_sockets.push_back(s); m_listen_sockets.push_back(s);
async_accept(s.sock); async_accept(s.sock);

View File

@ -51,16 +51,16 @@ namespace libtorrent
{ {
static char const* messages[] = static char const* messages[] =
{ {
"no error", "SOCKS no error",
"unsupported version", "SOCKS unsupported version",
"unsupported authentication method", "SOCKS unsupported authentication method",
"unsupported authentication version", "SOCKS unsupported authentication version",
"authentication error", "SOCKS authentication error",
"username required", "SOCKS username required",
"general failure", "SOCKS general failure",
"command not supported", "SOCKS command not supported",
"no identd running", "SOCKS no identd running",
"identd could not identify username" "SOCKS identd could not identify username"
}; };
if (ev < 0 || ev > socks_error::num_errors) return "unknown error"; if (ev < 0 || ev > socks_error::num_errors) return "unknown error";

View File

@ -90,15 +90,18 @@ bool print_alerts(libtorrent::session& ses, char const* name
} }
TEST_CHECK(alert_cast<fastresume_rejected_alert>(a.get()) == 0 || allow_failed_fastresume); TEST_CHECK(alert_cast<fastresume_rejected_alert>(a.get()) == 0 || allow_failed_fastresume);
TEST_CHECK(alert_cast<peer_error_alert>(a.get()) == 0 peer_error_alert* pea = alert_cast<peer_error_alert>(a.get());
TEST_CHECK(pea == 0
|| (!handles.empty() && h.is_seed()) || (!handles.empty() && h.is_seed())
|| a->message() == "connecting to peer" || pea->error.message() == "connecting to peer"
|| a->message() == "closing connection to ourself" || pea->error.message() == "closing connection to ourself"
|| a->message() == "duplicate connection" || pea->error.message() == "duplicate connection"
|| a->message() == "duplicate peer-id, connection closed" || pea->error.message() == "duplicate peer-id"
|| (allow_disconnects && a->message() == "Broken pipe") || pea->error.message() == "upload to upload connection"
|| (allow_disconnects && a->message() == "Connection reset by peer") || pea->error.message() == "stopping torrent"
|| (allow_disconnects && a->message() == "End of file.")); || (allow_disconnects && pea->error.message() == "Broken pipe")
|| (allow_disconnects && pea->error.message() == "Connection reset by peer")
|| (allow_disconnects && pea->error.message() == "End of file."));
a = ses.pop_alert(); a = ses.pop_alert();
} }
return ret; return ret;

View File

@ -277,8 +277,8 @@ void test_transfer(int proxy_type, bool test_disk_full = false, bool test_allowe
#ifndef TORRENT_DISABLE_ENCRYPTION #ifndef TORRENT_DISABLE_ENCRYPTION
pe_settings pes; pe_settings pes;
pes.out_enc_policy = pe_settings::forced; pes.out_enc_policy = pe_settings::disabled;
pes.in_enc_policy = pe_settings::forced; pes.in_enc_policy = pe_settings::disabled;
ses1.set_pe_settings(pes); ses1.set_pe_settings(pes);
ses2.set_pe_settings(pes); ses2.set_pe_settings(pes);
#endif #endif
@ -322,7 +322,7 @@ void test_transfer(int proxy_type, bool test_disk_full = false, bool test_allowe
ses2.set_alert_mask(alert::all_categories ses2.set_alert_mask(alert::all_categories
& ~alert::progress_notification & ~alert::progress_notification
& ~alert::stats_notification); & ~alert::stats_notification);
ses1.set_alert_dispatch(&print_alert); // ses1.set_alert_dispatch(&print_alert);
ses2.set_download_rate_limit(tor2.get_torrent_info().piece_length() * 5); ses2.set_download_rate_limit(tor2.get_torrent_info().piece_length() * 5);
@ -380,7 +380,7 @@ void test_transfer(int proxy_type, bool test_disk_full = false, bool test_allowe
} }
// 1 announce per tracker to start // 1 announce per tracker to start
TEST_EQUAL(tracker_responses, 2); TEST_CHECK(tracker_responses >= 2);
TEST_CHECK(!tor2.is_seed()); TEST_CHECK(!tor2.is_seed());
TEST_CHECK(tor2.is_finished()); TEST_CHECK(tor2.is_finished());