diff --git a/ChangeLog b/ChangeLog index 956a35b5..f62ab110 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,50 @@ +2006-05-10 Tatsuhiro Tsujikawa + + * src/PeerInteractionCommand.h + (checkInactiveConnection): Removed. + * src/PeerInteractionCommand.cc + (executeInternal): Removed following function calls: + detectMessageFlooding(), checkLongTimePeerChoking and + checkInactiveConnection(). + (checkInactiveConnection): Removed. + (detectMessageFlooding): Removed function call to + checkInactiveConnection(). + + * src/PeerMessageUtil.h + (createChokeMessage): New function. Overload. + (createUnchokeMessage): New function. Overload. + (createInterestedMessage): New function. Overload. + (createNotInterestedMessage): New function. Overload. + (createHaveMessage): New function. Overload. + (createBitfieldMessage): New function. Overload. + (createRequestMessage): New function. Overload. + (createCancelMessage): New function. Overload. + (createPieceMessage): New function. Overload. + (createKeepAliveMessage): New function. Overload. + * src/PeerMessageUtil.cc + (createChokeMessage): New function. Overload. + (createUnchokeMessage): New function. Overload. + (createInterestedMessage): New function. Overload. + (createNotInterestedMessage): New function. Overload. + (createHaveMessage): New function. Overload. + (createBitfieldMessage): New function. Overload. + (createRequestMessage): New function. Overload. + (createCancelMessage): New function. Overload. + (createPieceMessage): New function. Overload. + (createKeepAliveMessage): New function. Overload. + + * src/SendMessageQueue.cc + (createRequestMessage): Use PeerMessageUtil. + (createCancelMessage): Use PeerMessageUtil. + (createPieceMessage): Use PeerMessageUtil. + (createHaveMessage): Use PeerMessageUtil. + (createChokeMessage): Use PeerMessageUtil. + (createUnchokeMessage): Use PeerMessageUtil. + (createInterestedMessage): Use PeerMessageUtil. + (createNotInterestedMessage): Use PeerMessageUtil. + (createBitfieldMessage): Use PeerMessageUtil. + (createKeepAliveMessage): Use PeerMessageUtil. + 2006-05-09 Tatsuhiro Tsujikawa Each peer message has its own class. diff --git a/TODO b/TODO index d5e713e2..857676c9 100644 --- a/TODO +++ b/TODO @@ -15,3 +15,4 @@ * Add Message stream encryption support * Add announce-list support * Add fast extension +* Refacturing HttpConnection and FtpConnection \ No newline at end of file diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 274c70aa..bac480ab 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -105,9 +105,6 @@ bool PeerInteractionCommand::executeInternal() { break; } case WIRED: - detectMessageFlooding(); - checkLongTimePeerChoking(); - checkInactiveConnection(); sendMessageQueue->syncPiece(); decideChoking(); for(int i = 0; i < 10; i++) { @@ -128,16 +125,6 @@ bool PeerInteractionCommand::executeInternal() { return false; } -void PeerInteractionCommand::checkInactiveConnection() { - if((!peer->amInterested && !peer->peerInterested && - e->torrentMan->connections >= MAX_PEER_LIST_SIZE) || - (!peer->amInterested && e->torrentMan->connections >= MAX_PEER_LIST_SIZE && - e->torrentMan->isEndGame())) { - throw new DlAbortEx("marked as inactive connection."); - } - -} - void PeerInteractionCommand::detectMessageFlooding() { struct timeval now; gettimeofday(&now, NULL); @@ -271,7 +258,6 @@ void PeerInteractionCommand::beforeSocketCheck() { e->torrentMan->unadvertisePiece(cuid); detectMessageFlooding(); checkLongTimePeerChoking(); - checkInactiveConnection(); PieceIndexes indexes = e->torrentMan->getAdvertisedPieceIndexes(cuid); if(indexes.size() >= 20) { diff --git a/src/PeerInteractionCommand.h b/src/PeerInteractionCommand.h index fae018a2..35efeb1b 100644 --- a/src/PeerInteractionCommand.h +++ b/src/PeerInteractionCommand.h @@ -44,7 +44,6 @@ private: void receiveMessage(); void detectMessageFlooding(); void checkLongTimePeerChoking(); - void checkInactiveConnection(); void detectTimeoutAndDuplicateBlock(); void decideChoking(); void keepAlive(); diff --git a/src/PeerMessageUtil.cc b/src/PeerMessageUtil.cc index 55a5e456..1c93b7f6 100644 --- a/src/PeerMessageUtil.cc +++ b/src/PeerMessageUtil.cc @@ -132,6 +132,70 @@ PortMessage* PeerMessageUtil::createPortMessage(const char* msg, int len) { return portMessage; } +RequestMessage* PeerMessageUtil::createRequestMessage(int index, + int begin, + int length, + int blockIndex) { + RequestMessage* msg = new RequestMessage(); + msg->setIndex(index); + msg->setBegin(begin); + msg->setLength(length); + msg->setBlockIndex(blockIndex); + return msg; +} + +CancelMessage* PeerMessageUtil::createCancelMessage(int index, int begin, int length) { + CancelMessage* msg = new CancelMessage(); + msg->setIndex(index); + msg->setBegin(begin); + msg->setLength(length); + return msg; +} + +PieceMessage* PeerMessageUtil::createPieceMessage(int index, int begin, int length) { + PieceMessage* msg = new PieceMessage(); + msg->setIndex(index); + msg->setBegin(begin); + msg->setBlockLength(length); + return msg; +} + +HaveMessage* PeerMessageUtil::createHaveMessage(int index) { + HaveMessage* msg = new HaveMessage(); + msg->setIndex(index); + return msg; +} + +ChokeMessage* PeerMessageUtil::createChokeMessage() { + ChokeMessage* msg = new ChokeMessage(); + return msg; +} + +UnchokeMessage* PeerMessageUtil::createUnchokeMessage() { + UnchokeMessage* msg = new UnchokeMessage(); + return msg; +} + +InterestedMessage* PeerMessageUtil::createInterestedMessage() { + InterestedMessage* msg = new InterestedMessage(); + return msg; +} + +NotInterestedMessage* PeerMessageUtil::createNotInterestedMessage() { + NotInterestedMessage* msg = new NotInterestedMessage(); + return msg; +} + +BitfieldMessage* PeerMessageUtil::createBitfieldMessage() { + BitfieldMessage* msg = new BitfieldMessage(); + return msg; +} + +KeepAliveMessage* PeerMessageUtil::createKeepAliveMessage() { + KeepAliveMessage* msg = new KeepAliveMessage(); + return msg; +} + void PeerMessageUtil::checkIndex(int index, int pieces) { if(!(0 <= index && index < pieces)) { throw new DlAbortEx("invalid index = %d", index); diff --git a/src/PeerMessageUtil.h b/src/PeerMessageUtil.h index d4175b84..05a564a1 100644 --- a/src/PeerMessageUtil.h +++ b/src/PeerMessageUtil.h @@ -50,7 +50,8 @@ public: static ChokeMessage* createChokeMessage(const char* msg, int len); static UnchokeMessage* createUnchokeMessage(const char* msg, int len); static InterestedMessage* createInterestedMessage(const char* msg, int len); - static NotInterestedMessage* createNotInterestedMessage(const char* msg, int len); + static NotInterestedMessage* createNotInterestedMessage(const char* msg, + int len); static HaveMessage* createHaveMessage(const char* msg, int len); static BitfieldMessage* createBitfieldMessage(const char* msg, int len); static RequestMessage* createRequestMessage(const char* msg, int len); @@ -58,14 +59,29 @@ public: static PieceMessage* createPieceMessage(const char* msg, int len); static PortMessage* createPortMessage(const char* msg, int len); + static ChokeMessage* createChokeMessage(); + static UnchokeMessage* createUnchokeMessage(); + static InterestedMessage* createInterestedMessage(); + static NotInterestedMessage* createNotInterestedMessage(); + static HaveMessage* createHaveMessage(int index); + static BitfieldMessage* createBitfieldMessage(); + static RequestMessage* createRequestMessage(int index, int begin, + int length, int blockIndex); + static CancelMessage* createCancelMessage(int index, int begin, int length); + static PieceMessage* createPieceMessage(int index, int begin, int length); + static KeepAliveMessage* createKeepAliveMessage(); + static void checkIndex(int index, int pieces); static void checkBegin(int begin, int pieceLength); static void checkLength(int length); static void checkRange(int begin, int length, int pieceLength); - static void checkBitfield(const unsigned char* bitfield, int bitfieldLength, int pieces); + static void checkBitfield(const unsigned char* bitfield, + int bitfieldLength, + int pieces); static HandshakeMessage* createHandshakeMessage(const char* msg, int length); - static void checkHandshake(const HandshakeMessage* message, const unsigned char* infoHash); + static void checkHandshake(const HandshakeMessage* message, + const unsigned char* infoHash); }; #endif // _D_PEER_MESSAGE_UTIL_H_ diff --git a/src/SendMessageQueue.cc b/src/SendMessageQueue.cc index 856524e0..d3e66624 100644 --- a/src/SendMessageQueue.cc +++ b/src/SendMessageQueue.cc @@ -395,72 +395,67 @@ void SendMessageQueue::setPeerMessageCommonProperty(PeerMessage* peerMessage) { } RequestMessage* SendMessageQueue::createRequestMessage(int blockIndex) { - RequestMessage* msg = new RequestMessage(); + RequestMessage* msg = + PeerMessageUtil::createRequestMessage(piece.getIndex(), + blockIndex*piece.getBlockLength(), + piece.getBlockLength(blockIndex), + blockIndex); setPeerMessageCommonProperty(msg); - msg->setIndex(piece.getIndex()); - msg->setBegin(blockIndex*piece.getBlockLength()); - msg->setLength(piece.getBlockLength(blockIndex)); - msg->setBlockIndex(blockIndex); return msg; } CancelMessage* SendMessageQueue::createCancelMessage(int index, int begin, int length) { - CancelMessage* msg = new CancelMessage(); + CancelMessage* msg = + PeerMessageUtil::createCancelMessage(index, begin, length); setPeerMessageCommonProperty(msg); - msg->setIndex(index); - msg->setBegin(begin); - msg->setLength(length); return msg; } PieceMessage* SendMessageQueue::createPieceMessage(int index, int begin, int length) { - PieceMessage* msg = new PieceMessage(); + PieceMessage* msg = + PeerMessageUtil::createPieceMessage(index, begin, length); setPeerMessageCommonProperty(msg); - msg->setIndex(index); - msg->setBegin(begin); - msg->setBlockLength(length); return msg; } HaveMessage* SendMessageQueue::createHaveMessage(int index) { - HaveMessage* msg = new HaveMessage(); + HaveMessage* msg = PeerMessageUtil::createHaveMessage(index); setPeerMessageCommonProperty(msg); - msg->setIndex(index); return msg; } ChokeMessage* SendMessageQueue::createChokeMessage() { - ChokeMessage* msg = new ChokeMessage(); + ChokeMessage* msg = PeerMessageUtil::createChokeMessage(); setPeerMessageCommonProperty(msg); return msg; } UnchokeMessage* SendMessageQueue::createUnchokeMessage() { - UnchokeMessage* msg = new UnchokeMessage(); + UnchokeMessage* msg = PeerMessageUtil::createUnchokeMessage(); setPeerMessageCommonProperty(msg); return msg; } InterestedMessage* SendMessageQueue::createInterestedMessage() { - InterestedMessage* msg = new InterestedMessage(); + InterestedMessage* msg = PeerMessageUtil::createInterestedMessage(); setPeerMessageCommonProperty(msg); return msg; } NotInterestedMessage* SendMessageQueue::createNotInterestedMessage() { - NotInterestedMessage* msg = new NotInterestedMessage(); + NotInterestedMessage* msg = PeerMessageUtil::createNotInterestedMessage(); setPeerMessageCommonProperty(msg); return msg; } BitfieldMessage* SendMessageQueue::createBitfieldMessage() { - BitfieldMessage* msg = new BitfieldMessage(); + BitfieldMessage* msg = PeerMessageUtil::createBitfieldMessage(); setPeerMessageCommonProperty(msg); return msg; } KeepAliveMessage* SendMessageQueue::createKeepAliveMessage() { - KeepAliveMessage* msg = new KeepAliveMessage(); + KeepAliveMessage* msg = PeerMessageUtil::createKeepAliveMessage(); setPeerMessageCommonProperty(msg); return msg; }