From 3020087a75f301724ac24c3e8b8425221c759537 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 8 Jan 2011 17:49:43 +0900 Subject: [PATCH] Don't try legacy BitTorrent handshake when connection did not established. --- src/InitiatorMSEHandshakeCommand.cc | 36 ++++++++++++++++++----------- src/InitiatorMSEHandshakeCommand.h | 2 ++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/InitiatorMSEHandshakeCommand.cc b/src/InitiatorMSEHandshakeCommand.cc index c8795685..e76a7336 100644 --- a/src/InitiatorMSEHandshakeCommand.cc +++ b/src/InitiatorMSEHandshakeCommand.cc @@ -197,22 +197,32 @@ bool InitiatorMSEHandshakeCommand::executeInternal() { return false; } +void InitiatorMSEHandshakeCommand::tryNewPeer() +{ + if(peerStorage_->isPeerAvailable() && btRuntime_->lessThanEqMinPeers()) { + SharedHandle peer = peerStorage_->getUnusedPeer(); + peer->usedBy(getDownloadEngine()->newCUID()); + PeerInitiateConnectionCommand* command = + new PeerInitiateConnectionCommand(peer->usedBy(), requestGroup_, peer, + getDownloadEngine(), btRuntime_); + command->setPeerStorage(peerStorage_); + command->setPieceStorage(pieceStorage_); + getDownloadEngine()->addCommand(command); + } +} + bool InitiatorMSEHandshakeCommand::prepareForNextPeer(time_t wait) { - if(getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) { - A2_LOG_INFO(fmt("CUID#%lld - Establishing connection using legacy BitTorrent" - " handshake is disabled by preference.", + if(sequence_ == INITIATOR_SEND_KEY) { + // We don't try legacy handshake when connection did not + // established. + tryNewPeer(); + return true; + } else if(getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) { + A2_LOG_INFO(fmt("CUID#%lld - Establishing connection using legacy" + " BitTorrent handshake is disabled by preference.", getCuid())); - if(peerStorage_->isPeerAvailable() && btRuntime_->lessThanEqMinPeers()) { - SharedHandle peer = peerStorage_->getUnusedPeer(); - peer->usedBy(getDownloadEngine()->newCUID()); - PeerInitiateConnectionCommand* command = - new PeerInitiateConnectionCommand(peer->usedBy(), requestGroup_, peer, - getDownloadEngine(), btRuntime_); - command->setPeerStorage(peerStorage_); - command->setPieceStorage(pieceStorage_); - getDownloadEngine()->addCommand(command); - } + tryNewPeer(); return true; } else { // try legacy BitTorrent handshake diff --git a/src/InitiatorMSEHandshakeCommand.h b/src/InitiatorMSEHandshakeCommand.h index 3ff943ba..5b44abcb 100644 --- a/src/InitiatorMSEHandshakeCommand.h +++ b/src/InitiatorMSEHandshakeCommand.h @@ -70,6 +70,8 @@ private: MSEHandshake* mseHandshake_; const SharedHandle