summaryrefslogtreecommitdiff
path: root/src/InitiatorMSEHandshakeCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:12:52 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:20:27 +0900
commitd64089632e82a2548752c7a6baaa68365a795a74 (patch)
tree57fc7b85a8c1290975d58fa4761b04a7695bf7e3 /src/InitiatorMSEHandshakeCommand.cc
parentc81b1321122e8509b55c94c0cbca0d8d6d319f0c (diff)
parenta7cd943a06b1a5ff4515b57060b84037f8d01f9f (diff)
Merge branch 'master' into random-webseeding
Diffstat (limited to 'src/InitiatorMSEHandshakeCommand.cc')
-rw-r--r--src/InitiatorMSEHandshakeCommand.cc144
1 files changed, 75 insertions, 69 deletions
diff --git a/src/InitiatorMSEHandshakeCommand.cc b/src/InitiatorMSEHandshakeCommand.cc
index 7a04b984..ebcaa11b 100644
--- a/src/InitiatorMSEHandshakeCommand.cc
+++ b/src/InitiatorMSEHandshakeCommand.cc
@@ -59,18 +59,15 @@
namespace aria2 {
-InitiatorMSEHandshakeCommand::InitiatorMSEHandshakeCommand
-(cuid_t cuid,
- RequestGroup* requestGroup,
- const std::shared_ptr<Peer>& p,
- DownloadEngine* e,
- const std::shared_ptr<BtRuntime>& btRuntime,
- const std::shared_ptr<SocketCore>& s)
- : PeerAbstractCommand(cuid, p, e, s),
- requestGroup_(requestGroup),
- btRuntime_(btRuntime),
- sequence_(INITIATOR_SEND_KEY),
- mseHandshake_(make_unique<MSEHandshake>(cuid, s, getOption().get()))
+InitiatorMSEHandshakeCommand::InitiatorMSEHandshakeCommand(
+ cuid_t cuid, RequestGroup* requestGroup, const std::shared_ptr<Peer>& p,
+ DownloadEngine* e, const std::shared_ptr<BtRuntime>& btRuntime,
+ const std::shared_ptr<SocketCore>& s)
+ : PeerAbstractCommand(cuid, p, e, s),
+ requestGroup_(requestGroup),
+ btRuntime_(btRuntime),
+ sequence_(INITIATOR_SEND_KEY),
+ mseHandshake_(make_unique<MSEHandshake>(cuid, s, getOption().get()))
{
disableReadCheckSocket();
setWriteCheckSocket(getSocket());
@@ -87,15 +84,16 @@ InitiatorMSEHandshakeCommand::~InitiatorMSEHandshakeCommand()
btRuntime_->decreaseConnections();
}
-bool InitiatorMSEHandshakeCommand::executeInternal() {
- if(mseHandshake_->getWantRead()) {
+bool InitiatorMSEHandshakeCommand::executeInternal()
+{
+ if (mseHandshake_->getWantRead()) {
mseHandshake_->read();
}
bool done = false;
- while(!done) {
- switch(sequence_) {
+ while (!done) {
+ switch (sequence_) {
case INITIATOR_SEND_KEY: {
- if(!getSocket()->isWritable(0)) {
+ if (!getSocket()->isWritable(0)) {
addCommandSelf();
return false;
}
@@ -106,88 +104,93 @@ bool InitiatorMSEHandshakeCommand::executeInternal() {
break;
}
case INITIATOR_SEND_KEY_PENDING:
- if(mseHandshake_->send()) {
+ if (mseHandshake_->send()) {
sequence_ = INITIATOR_WAIT_KEY;
- } else {
+ }
+ else {
done = true;
}
break;
case INITIATOR_WAIT_KEY: {
- if(mseHandshake_->receivePublicKey()) {
- mseHandshake_->initCipher
- (bittorrent::getInfoHash(requestGroup_->getDownloadContext()));;
+ if (mseHandshake_->receivePublicKey()) {
+ mseHandshake_->initCipher(
+ bittorrent::getInfoHash(requestGroup_->getDownloadContext()));
+ ;
mseHandshake_->sendInitiatorStep2();
sequence_ = INITIATOR_SEND_STEP2_PENDING;
- } else {
+ }
+ else {
done = true;
}
break;
}
case INITIATOR_SEND_STEP2_PENDING:
- if(mseHandshake_->send()) {
+ if (mseHandshake_->send()) {
sequence_ = INITIATOR_FIND_VC_MARKER;
- } else {
+ }
+ else {
done = true;
}
break;
case INITIATOR_FIND_VC_MARKER: {
- if(mseHandshake_->findInitiatorVCMarker()) {
+ if (mseHandshake_->findInitiatorVCMarker()) {
sequence_ = INITIATOR_RECEIVE_PAD_D_LENGTH;
- } else {
+ }
+ else {
done = true;
}
break;
}
case INITIATOR_RECEIVE_PAD_D_LENGTH: {
- if(mseHandshake_->receiveInitiatorCryptoSelectAndPadDLength()) {
+ if (mseHandshake_->receiveInitiatorCryptoSelectAndPadDLength()) {
sequence_ = INITIATOR_RECEIVE_PAD_D;
- } else {
+ }
+ else {
done = true;
}
break;
}
case INITIATOR_RECEIVE_PAD_D: {
- if(mseHandshake_->receivePad()) {
- auto peerConnection = make_unique<PeerConnection>
- (getCuid(), getPeer(), getSocket());
- if(mseHandshake_->getNegotiatedCryptoType() ==
- MSEHandshake::CRYPTO_ARC4){
+ if (mseHandshake_->receivePad()) {
+ auto peerConnection =
+ make_unique<PeerConnection>(getCuid(), getPeer(), getSocket());
+ if (mseHandshake_->getNegotiatedCryptoType() ==
+ MSEHandshake::CRYPTO_ARC4) {
size_t buflen = mseHandshake_->getBufferLength();
- mseHandshake_->getDecryptor()->encrypt(buflen,
- mseHandshake_->getBuffer(),
- mseHandshake_->getBuffer());
+ mseHandshake_->getDecryptor()->encrypt(
+ buflen, mseHandshake_->getBuffer(), mseHandshake_->getBuffer());
peerConnection->presetBuffer(mseHandshake_->getBuffer(), buflen);
peerConnection->enableEncryption(mseHandshake_->popEncryptor(),
mseHandshake_->popDecryptor());
- } else {
+ }
+ else {
peerConnection->presetBuffer(mseHandshake_->getBuffer(),
mseHandshake_->getBufferLength());
}
- getDownloadEngine()->addCommand
- (make_unique<PeerInteractionCommand>
- (getCuid(), requestGroup_, getPeer(),
- getDownloadEngine(), btRuntime_,
- pieceStorage_,
- peerStorage_,
- getSocket(),
+ getDownloadEngine()->addCommand(make_unique<PeerInteractionCommand>(
+ getCuid(), requestGroup_, getPeer(), getDownloadEngine(),
+ btRuntime_, pieceStorage_, peerStorage_, getSocket(),
PeerInteractionCommand::INITIATOR_SEND_HANDSHAKE,
std::move(peerConnection)));
return true;
- } else {
+ }
+ else {
done = true;
}
break;
}
}
}
- if(mseHandshake_->getWantRead()) {
+ if (mseHandshake_->getWantRead()) {
setReadCheckSocket(getSocket());
- } else {
+ }
+ else {
disableReadCheckSocket();
}
- if(mseHandshake_->getWantWrite()) {
+ if (mseHandshake_->getWantWrite()) {
setWriteCheckSocket(getSocket());
- } else {
+ }
+ else {
disableWriteCheckSocket();
}
addCommandSelf();
@@ -196,13 +199,13 @@ bool InitiatorMSEHandshakeCommand::executeInternal() {
void InitiatorMSEHandshakeCommand::tryNewPeer()
{
- if(peerStorage_->isPeerAvailable() && btRuntime_->lessThanEqMinPeers()) {
+ if (peerStorage_->isPeerAvailable() && btRuntime_->lessThanEqMinPeers()) {
cuid_t ncuid = getDownloadEngine()->newCUID();
std::shared_ptr<Peer> peer = peerStorage_->checkoutPeer(ncuid);
// sanity check
- if(peer) {
- auto command = make_unique<PeerInitiateConnectionCommand>
- (ncuid, requestGroup_, peer, getDownloadEngine(), btRuntime_);
+ if (peer) {
+ auto command = make_unique<PeerInitiateConnectionCommand>(
+ ncuid, requestGroup_, peer, getDownloadEngine(), btRuntime_);
command->setPeerStorage(peerStorage_);
command->setPieceStorage(pieceStorage_);
getDownloadEngine()->addCommand(std::move(command));
@@ -212,25 +215,28 @@ void InitiatorMSEHandshakeCommand::tryNewPeer()
bool InitiatorMSEHandshakeCommand::prepareForNextPeer(time_t wait)
{
- if(sequence_ == INITIATOR_SEND_KEY) {
+ 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_FORCE_ENCRYPTION) ||
- getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
+ }
+ else if (getOption()->getAsBool(PREF_BT_FORCE_ENCRYPTION) ||
+ getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
A2_LOG_INFO(fmt("CUID#%" PRId64 " - Establishing connection using legacy"
" BitTorrent handshake is disabled by preference.",
getCuid()));
tryNewPeer();
return true;
- } else {
+ }
+ else {
// try legacy BitTorrent handshake
- A2_LOG_INFO(fmt("CUID#%" PRId64 " - Retry using legacy BitTorrent handshake.",
+ A2_LOG_INFO(fmt("CUID#%" PRId64
+ " - Retry using legacy BitTorrent handshake.",
getCuid()));
- auto command = make_unique<PeerInitiateConnectionCommand>
- (getCuid(), requestGroup_, getPeer(),
- getDownloadEngine(), btRuntime_, false);
+ auto command = make_unique<PeerInitiateConnectionCommand>(
+ getCuid(), requestGroup_, getPeer(), getDownloadEngine(), btRuntime_,
+ false);
command->setPeerStorage(peerStorage_);
command->setPieceStorage(pieceStorage_);
getDownloadEngine()->addCommand(std::move(command));
@@ -240,9 +246,9 @@ bool InitiatorMSEHandshakeCommand::prepareForNextPeer(time_t wait)
void InitiatorMSEHandshakeCommand::onAbort()
{
- if(sequence_ == INITIATOR_SEND_KEY ||
- getOption()->getAsBool(PREF_BT_FORCE_ENCRYPTION) ||
- getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
+ if (sequence_ == INITIATOR_SEND_KEY ||
+ getOption()->getAsBool(PREF_BT_FORCE_ENCRYPTION) ||
+ getOption()->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
peerStorage_->returnPeer(getPeer());
}
}
@@ -252,14 +258,14 @@ bool InitiatorMSEHandshakeCommand::exitBeforeExecute()
return btRuntime_->isHalt();
}
-void InitiatorMSEHandshakeCommand::setPeerStorage
-(const std::shared_ptr<PeerStorage>& peerStorage)
+void InitiatorMSEHandshakeCommand::setPeerStorage(
+ const std::shared_ptr<PeerStorage>& peerStorage)
{
peerStorage_ = peerStorage;
}
-void InitiatorMSEHandshakeCommand::setPieceStorage
-(const std::shared_ptr<PieceStorage>& pieceStorage)
+void InitiatorMSEHandshakeCommand::setPieceStorage(
+ const std::shared_ptr<PieceStorage>& pieceStorage)
{
pieceStorage_ = pieceStorage;
}