diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-01-08 17:32:16 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-01-09 18:34:06 +0900 |
| commit | ce2d401dce35b94c15120a4cac441a4614658e3d (patch) | |
| tree | d45875f961f3dcfdb5c7ad96419ef15886fd983e /src/PeerInteractionCommand.cc | |
| parent | c48db2cdf3c194a979bb90e856914225b8ad02ca (diff) | |
Eliminated SocketCore::peekData from MSEHandshake.
Diffstat (limited to 'src/PeerInteractionCommand.cc')
| -rw-r--r-- | src/PeerInteractionCommand.cc | 118 |
1 files changed, 66 insertions, 52 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index dece90a8..bb8ea4bb 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -163,6 +163,11 @@ PeerInteractionCommand::PeerInteractionCommand peerConnection.reset(new PeerConnection(cuid, getPeer(), getSocket())); } else { peerConnection = passedPeerConnection; + if(sequence_ == RECEIVER_WAIT_HANDSHAKE && + peerConnection->getBufferLength() > 0) { + setStatus(Command::STATUS_ONESHOT_REALTIME); + getDownloadEngine()->setNoWait(true); + } } SharedHandle<DefaultBtMessageDispatcher> dispatcher @@ -274,71 +279,80 @@ PeerInteractionCommand::~PeerInteractionCommand() { bool PeerInteractionCommand::executeInternal() { setNoCheck(false); - switch(sequence_) { - case INITIATOR_SEND_HANDSHAKE: - if(!getSocket()->isWritable(0)) { + bool done = false; + while(!done) { + switch(sequence_) { + case INITIATOR_SEND_HANDSHAKE: + if(!getSocket()->isWritable(0)) { + done = true; + break; + } + disableWriteCheckSocket(); + setReadCheckSocket(getSocket()); + //socket->setBlockingMode(); + setTimeout(getOption()->getAsInt(PREF_BT_TIMEOUT)); + btInteractive_->initiateHandshake(); + sequence_ = INITIATOR_WAIT_HANDSHAKE; break; - } - disableWriteCheckSocket(); - setReadCheckSocket(getSocket()); - //socket->setBlockingMode(); - setTimeout(getOption()->getAsInt(PREF_BT_TIMEOUT)); - btInteractive_->initiateHandshake(); - sequence_ = INITIATOR_WAIT_HANDSHAKE; - break; - case INITIATOR_WAIT_HANDSHAKE: { - if(btInteractive_->countPendingMessage() > 0) { - btInteractive_->sendPendingMessage(); + case INITIATOR_WAIT_HANDSHAKE: { if(btInteractive_->countPendingMessage() > 0) { + btInteractive_->sendPendingMessage(); + if(btInteractive_->countPendingMessage() > 0) { + done = true; + break; + } + } + BtMessageHandle handshakeMessage = btInteractive_->receiveHandshake(); + if(!handshakeMessage) { + done = true; break; } - } - BtMessageHandle handshakeMessage = btInteractive_->receiveHandshake(); - if(!handshakeMessage) { + btInteractive_->doPostHandshakeProcessing(); + sequence_ = WIRED; break; } - btInteractive_->doPostHandshakeProcessing(); - sequence_ = WIRED; - break; - } - case RECEIVER_WAIT_HANDSHAKE: { - BtMessageHandle handshakeMessage =btInteractive_->receiveAndSendHandshake(); - if(!handshakeMessage) { + case RECEIVER_WAIT_HANDSHAKE: { + BtMessageHandle handshakeMessage = + btInteractive_->receiveAndSendHandshake(); + if(!handshakeMessage) { + done = true; + break; + } + btInteractive_->doPostHandshakeProcessing(); + sequence_ = WIRED; break; } - btInteractive_->doPostHandshakeProcessing(); - sequence_ = WIRED; - break; - } - case WIRED: - // See the comment for writable check below. - disableWriteCheckSocket(); - - btInteractive_->doInteractionProcessing(); - if(btInteractive_->countReceivedMessageInIteration() > 0) { - updateKeepAlive(); - } - if((getPeer()->amInterested() && !getPeer()->peerChoking()) || - btInteractive_->countOutstandingRequest() || - (getPeer()->peerInterested() && !getPeer()->amChoking())) { + case WIRED: + // See the comment for writable check below. + disableWriteCheckSocket(); - // Writable check to avoid slow seeding - if(btInteractive_->isSendingMessageInProgress()) { - setWriteCheckSocket(getSocket()); + btInteractive_->doInteractionProcessing(); + if(btInteractive_->countReceivedMessageInIteration() > 0) { + updateKeepAlive(); } - - if(getDownloadEngine()->getRequestGroupMan()-> - doesOverallDownloadSpeedExceed() || - requestGroup_->doesDownloadSpeedExceed()) { - disableReadCheckSocket(); - setNoCheck(true); + if((getPeer()->amInterested() && !getPeer()->peerChoking()) || + btInteractive_->countOutstandingRequest() || + (getPeer()->peerInterested() && !getPeer()->amChoking())) { + + // Writable check to avoid slow seeding + if(btInteractive_->isSendingMessageInProgress()) { + setWriteCheckSocket(getSocket()); + } + + if(getDownloadEngine()->getRequestGroupMan()-> + doesOverallDownloadSpeedExceed() || + requestGroup_->doesDownloadSpeedExceed()) { + disableReadCheckSocket(); + setNoCheck(true); + } else { + setReadCheckSocket(getSocket()); + } } else { - setReadCheckSocket(getSocket()); + disableReadCheckSocket(); } - } else { - disableReadCheckSocket(); + done = true; + break; } - break; } if(btInteractive_->countPendingMessage() > 0) { setNoCheck(true); |
