fix issue with outgoing connections not being tied to a torrent

This commit is contained in:
Arvid Norberg 2012-01-21 21:29:22 +00:00
parent 7f90a241b6
commit 4706807300
4 changed files with 13 additions and 23 deletions

View File

@ -99,8 +99,7 @@ namespace libtorrent
aux::session_impl& ses aux::session_impl& ses
, boost::shared_ptr<socket_type> s , boost::shared_ptr<socket_type> s
, tcp::endpoint const& remote , tcp::endpoint const& remote
, policy::peer* peerinfo , policy::peer* peerinfo);
, bool outgoing = false);
void start(); void start();

View File

@ -180,8 +180,7 @@ namespace libtorrent
aux::session_impl& ses aux::session_impl& ses
, boost::shared_ptr<socket_type> s , boost::shared_ptr<socket_type> s
, tcp::endpoint const& remote , tcp::endpoint const& remote
, policy::peer* peerinfo , policy::peer* peerinfo);
, bool outgoing = false);
// this function is called after it has been constructed and properly // this function is called after it has been constructed and properly
// reference counted. It is safe to call self() in this function // reference counted. It is safe to call self() in this function

View File

@ -153,9 +153,8 @@ namespace libtorrent
session_impl& ses session_impl& ses
, boost::shared_ptr<socket_type> s , boost::shared_ptr<socket_type> s
, tcp::endpoint const& remote , tcp::endpoint const& remote
, policy::peer* peerinfo , policy::peer* peerinfo)
, bool outgoing) : peer_connection(ses, s, remote, peerinfo)
: peer_connection(ses, s, remote, peerinfo, outgoing)
, m_state(read_protocol_identifier) , m_state(read_protocol_identifier)
#ifndef TORRENT_DISABLE_EXTENSIONS #ifndef TORRENT_DISABLE_EXTENSIONS
, m_upload_only_id(0) , m_upload_only_id(0)

View File

@ -244,7 +244,7 @@ namespace libtorrent
m_logger = m_ses.create_log(m_remote.address().to_string(ec) + "_" m_logger = m_ses.create_log(m_remote.address().to_string(ec) + "_"
+ to_string(m_remote.port()).elems, m_ses.listen_port()); + to_string(m_remote.port()).elems, m_ses.listen_port());
peer_log("%s [ ep: %s type: %s seed: %d p: %p local: %s]" peer_log("%s [ ep: %s type: %s seed: %d p: %p local: %s]"
, outgoing ? ">>> OUTGOING_CONNECTION" : "<<< INCOMING CONNECTION" , m_active ? ">>> OUTGOING_CONNECTION" : "<<< INCOMING CONNECTION"
, print_endpoint(m_remote).c_str() , print_endpoint(m_remote).c_str()
, m_socket->type_name() , m_socket->type_name()
, m_peer_info ? m_peer_info->seed : 0, m_peer_info , m_peer_info ? m_peer_info->seed : 0, m_peer_info
@ -265,8 +265,7 @@ namespace libtorrent
session_impl& ses session_impl& ses
, shared_ptr<socket_type> s , shared_ptr<socket_type> s
, tcp::endpoint const& endp , tcp::endpoint const& endp
, policy::peer* peerinfo , policy::peer* peerinfo)
, bool outgoing)
: :
#ifdef TORRENT_DEBUG #ifdef TORRENT_DEBUG
m_last_choke(time_now() - hours(1)) m_last_choke(time_now() - hours(1))
@ -324,7 +323,7 @@ namespace libtorrent
, m_desired_queue_size(2) , m_desired_queue_size(2)
, m_choke_rejects(0) , m_choke_rejects(0)
, m_fast_reconnect(false) , m_fast_reconnect(false)
, m_active(outgoing) , m_active(false)
, m_received_listen_port(false) , m_received_listen_port(false)
, m_peer_interested(false) , m_peer_interested(false)
, m_peer_choked(true) , m_peer_choked(true)
@ -335,8 +334,8 @@ namespace libtorrent
, m_ignore_unchoke_slots(false) , m_ignore_unchoke_slots(false)
, m_have_all(false) , m_have_all(false)
, m_disconnecting(false) , m_disconnecting(false)
, m_connecting(outgoing) , m_connecting(false)
, m_queued(outgoing) , m_queued(false)
, m_request_large_blocks(false) , m_request_large_blocks(false)
, m_share_mode(false) , m_share_mode(false)
, m_upload_only(false) , m_upload_only(false)
@ -355,14 +354,6 @@ namespace libtorrent
, m_received_in_piece(0) , m_received_in_piece(0)
#endif #endif
{ {
boost::shared_ptr<torrent> t = m_torrent.lock();
// if t is NULL, we better not be connecting, since
// we can't decrement the connecting counter
TORRENT_ASSERT(t || !m_connecting);
if (m_connecting && t)
{
++t->m_num_connecting;
}
m_est_reciprocation_rate = m_ses.m_settings.default_est_reciprocation_rate; m_est_reciprocation_rate = m_ses.m_settings.default_est_reciprocation_rate;
#if TORRENT_USE_I2P #if TORRENT_USE_I2P
@ -400,7 +391,7 @@ namespace libtorrent
m_logger = m_ses.create_log(remote().address().to_string(ec) + "_" m_logger = m_ses.create_log(remote().address().to_string(ec) + "_"
+ to_string(remote().port()).elems, m_ses.listen_port()); + to_string(remote().port()).elems, m_ses.listen_port());
peer_log("%s [ ep: %s type: %s local: %s]" peer_log("%s [ ep: %s type: %s local: %s]"
, outgoing ? ">>> OUTGOING_CONNECTION" : "<<< INCOMING CONNECTION" , m_active ? ">>> OUTGOING_CONNECTION" : "<<< INCOMING CONNECTION"
, print_endpoint(m_remote).c_str() , print_endpoint(m_remote).c_str()
, m_socket->type_name() , m_socket->type_name()
, print_endpoint(m_socket->local_endpoint(ec)).c_str()); , print_endpoint(m_socket->local_endpoint(ec)).c_str());
@ -5368,14 +5359,16 @@ namespace libtorrent
boost::shared_ptr<torrent> t = m_torrent.lock(); boost::shared_ptr<torrent> t = m_torrent.lock();
m_queued = false; m_queued = false;
TORRENT_ASSERT(m_connecting);
if (!t) if (!t)
{ {
TORRENT_ASSERT(!m_connecting);
disconnect(errors::torrent_aborted); disconnect(errors::torrent_aborted);
return; return;
} }
TORRENT_ASSERT(m_connecting);
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING #if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
peer_log(">>> OPEN [ protocol: %s ]", (m_remote.address().is_v4()?"IPv4":"IPv6")); peer_log(">>> OPEN [ protocol: %s ]", (m_remote.address().is_v4()?"IPv4":"IPv6"));
#endif #endif