diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-01-09 23:57:07 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-01-09 23:57:07 +0900 |
| commit | 3e67079087577e8f3f4918c2c0822fc0420dc190 (patch) | |
| tree | 62f78c43c5427ef5eac8893b2e8bb1ba24a46f8e /src/PeerReceiveHandshakeCommand.cc | |
| parent | 1818f2ed5537232316d8a9aa21d6fa6318c273a9 (diff) | |
Rewritten NAT check handling.
We simplified PeerConnection::receiveHandshake().
DefaultBtMessageReceiver and PeerReceiverHandshakeCommand look
PeerConnection's buffer and do NAT check handling themselves.
Diffstat (limited to 'src/PeerReceiveHandshakeCommand.cc')
| -rw-r--r-- | src/PeerReceiveHandshakeCommand.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/PeerReceiveHandshakeCommand.cc b/src/PeerReceiveHandshakeCommand.cc index 5af632a5..e34a749e 100644 --- a/src/PeerReceiveHandshakeCommand.cc +++ b/src/PeerReceiveHandshakeCommand.cc @@ -33,6 +33,9 @@ */ /* copyright --> */ #include "PeerReceiveHandshakeCommand.h" + +#include <cstring> + #include "PeerConnection.h" #include "DownloadEngine.h" #include "BtHandshakeMessage.h" @@ -87,13 +90,15 @@ bool PeerReceiveHandshakeCommand::exitBeforeExecute() bool PeerReceiveHandshakeCommand::executeInternal() { - unsigned char data[BtHandshakeMessage::MESSAGE_LENGTH]; - size_t dataLength = BtHandshakeMessage::MESSAGE_LENGTH; - // ignore return value. The received data is kept in PeerConnection object - // because of peek = true. - peerConnection_->receiveHandshake(data, dataLength, true); - // To handle tracker's NAT-checking feature - if(dataLength >= 48) { + // Handle tracker's NAT-checking feature + if(peerConnection_->getBufferLength() < 48) { + size_t dataLength = 0; + // Ignore return value. The received data is kept in + // PeerConnection object because of peek = true. + peerConnection_->receiveHandshake(0, dataLength, true); + } + if(peerConnection_->getBufferLength() >= 48) { + const unsigned char* data = peerConnection_->getBuffer(); // check info_hash std::string infoHash = std::string(&data[28], &data[28+INFO_HASH_LENGTH]); |
