Rewritten a portion of bittorrent implementation:
* src/BtMessageValidator.h: New class.
* src/BtBitfieldMessageValidator.h: New class.
* src/BtHandshakeMessageValidator.h: New class.
* src/BtRequestMessageValidator.h: New class.
* src/BtSuggestPieceMessageValidator.h: New class.
* src/BtAllowedFastMessageValidator.h: New class.
* src/BtRejectMessageValidator.h: New class.
* src/BtCancelMessageValidator.h: New class.
* src/BtPieceMessageValidator.h: New class.
* src/BtHaveMessageValidator.h: New class.
* src/BtEventListener.h: New class.
* src/AbstractBtEventListener.h: New class.
* src/BtEvent.h: New class.
* src/BtChokingEvent.h: New class.
* src/BtChokedEvent.h: New class.
* src/BtCancelSendingPieceEvent.h: New class.
* src/BtAbortOutstandingRequestEvent.h: New class.
* src/Randomizer.h: New class.
* src/SimpleRandomizer.h: New class.
* src/BtMessage.h: New class.
* src/AbstractBtMessage.h: New class.
* src/SimpleBtMessage.h: New class.
* src/BtHaveMessage.h: New class.
* src/BtInterestedMessage.h: New class.
* src/BtAllowedFastMessage.h: New class.
* src/BtUnchokeMessage.h: New class.
* src/BtCancelMessage.h: New class.
* src/BtNotInterestedMessage.h: New class.
* src/BtChokeMessage.h: New class.
* src/BtHaveNoneMessage.h: New class.
* src/BtHandshakeMessage.h: New class.
* src/BtSuggestPieceMessage.h: New class.
* src/BtHaveMessage.h: New class.
* src/BtPieceMessage.h: New class.
* src/BtHaveAllMessage.h: New class.
* src/BtKeepAliveMessage.h: New class.
* src/BtPortMessage.h: New class.
* src/BtRejectMessage.h: New class.
* src/BtBitfieldMessage.h: New class.
* src/BtRequestMessage.h: New class.
* src/DefaultBtRequestFactory.h: New class.
* src/DefaultBtMessageReceiver.h: New class.
* src/BtInteractive.h: New class.
* src/BtMessageDispatcher.h: New class.
* src/DefaultBtMessageDispatcher.h: New class.
* src/DefaultBtInteractive.h: New class.
* src/BitfieldManFactory.h: New class.
* src/HandleRegistry.h: New class.
* src/BtMessageFactory.h: New class.
* src/BtMessageReceiver.h: New class.
* src/DefaultBtMessageFactory.h: New class.
* src/PeerObject.h: New class.
* src/BtRequestFactory.h: New class.
* src/PeerMessage.h
(Piece.h): Included.
(SharedHandle.h): Included.
(invalidate): New variable.
(uploading): New variable.
(isInvalidate): New function.
(isUploading): New function.
(onPush): New function.
(onChoked): New function.
(onCanceled): New function.
(onAbortPiece): New function.
(PeerMessageHandle): New type definition.
* src/PeerMessage.cc
(PeerMessage): Added the initialization for invalidate and
uploading.
* src/CancelMessage.h
(CancelMessage): Rewritten.
* src/RejectMessage.h
(RejectMessage): Rewritten.
* src/Metalinker.h
(operator=): Defined.
* src/MetaEntry.h
(operator=): Defined.
* src/MetalinkResource.h
(operator=): Defined.
* src/AllowedFastMessage.h
(AllowedFastMessage): Rewritten.
* src/HandshakeMessage.h
(HandshakeMessage): New function(overload).
* src/HandshakeMessage.cc
(HandshakeMessage): Rewritten.
(init): New function.
* src/HaveMessage.h
(HaveMessage): Rewritten.
* src/Time.h
(operator=): Defined the function body here.
* src/Time.cc
(operator=): Removed.
* src/SocketCore.h
(operator==): Defined here.
(operator!=): Defined here.
(operator<): Defined here.
* src/SocketCore.cc
(operator==): Removed.
(operator<): Removed.
* src/BitfieldMan.h
(operator=): Defined the function body here.
* src/BitfieldMan.cc
(operator=): Removed.
* src/TorrentMan.h
(deleteErrorPeer): Removed.
(deleteUnusedPeer); New function.
* src/TorrentMan.cc
(addPeer): Call deleteUnusedPeer.
(deleteErrorPeer): Removed.
(deleteUnusedPeer): New function.
* src/PeerAbstractCommand.h
(setNoCheck): New function.
(noCheck): New variable.
* src/PeerAbstractCommand.cc
(PeerAbstractCommand): Added the initialization of noCheck.
(execute): Added a check for noCheck.
(setNoCheck): New function.
* src/Util.h
(stdio.h): Included.
* src/Util.cc
(unistd.h): Included.
* src/DefaultDiskWriter.cc
(unistd.h): Included.
* src/Peer.h
(operator==): Defined the function body here.
(operator!=): Defined the function body here.
* src/Peer.cc
(operator==): Removed.
(operator!=): Removed.
* src/Piece.h
(Piece): Defined the function body here(copy constructor).
(operator=): Defined the function body here.
(operator==): Defined the function body here.
* src/Piece.cc
(Piece): Removed(copy constructor).
(operator=): Removed.
(operator==): Removed.
* src/PeerMessageUtil.h
(ChokeMessage.h): Removed.
(UnchokeMessage.h): Removed.
(InterestedMessage.h): Removed.
(NotInterestedMessage.h): Removed.
(HaveMessage.h): Removed.
(BitfieldMessage.h): Removed.
(RequestMessage.h): Removed.
(CancelMessage.h): Removed.
(PieceMessage.h): Removed.
(HandshakeMessage.h): Removed.
(KeepAliveMessage.h): Removed.
(PortMessage.h): Removed.
(HaveAllMessage.h): Removed.
(HaveNoneMessage.h): Removed.
(PeerConnection.h): Removed.
(HandshakeMessage.h): Included.
* src/BitfieldMessage.h
(init): New function.
(BitfieldMessage): Rewritten.
(BitfieldMessage): New function(overload).
* src/RequestSlot.h
(operator=): Defined the function body here.
(operator==): Defined the function body here.
* src/RequestSlot.cc
(operator=): Removed.
(operator==): Removed.
To remove the dependency on the PeerMessage subclass from
PeerInteraction:
* src/PeerMessageFactory.h: New class.
* src/PeerMessageFactory.cc: New class.
* src/SimplePeerMessage.cc
(send): If invalidate is true then do nothing.
* src/PeerInteractionCommand.cc
(HandshakeMessage.h): Included.
(KeepAliveMessage.h): Included.
(ChokeMessage.h): Included.
(UnchokeMessage.h): Included.
(HaveMessage.h): Included.
(executeInternal): Call setNoCheck().
Removed setWriteCheckSocket(socket).
* src/PeerInteraction.h
(ChokeMessage.h): Removed.
(UnchokeMessage.h): Removed.
(InterestedMessage.h): Removed.
(NotInterestedMessage.h): Removed.
(HaveMessage.h): Removed.
(BitfieldMessage.h): Removed.
(RequestMessage.h): Removed.
(CancelMessage.h): Removed.
(PieceMessage.h): Removed.
(HandshakeMessage.h): Removed.
(KeepAliveMessage.h): Removed.
(PortMessage.h): Removed.
(HaveAllMessage.h): Removed.
(HaveNoneMessage.h): Removed.
(RejectMessage.h): Removed.
(AllowedFastMessage.h): Removed.
(SuggestPieceMessage.h): Removed.
(PeerMessageFactory.h): Included.
(PeerMessageHandle): Removed typedef of PeerMessageHandle.
(HandshakeMessageHandle): Removed typedef of
HandshakeMessageHandle.
(PeerMessageFactory): New variable.
(createPeerMessage): Removed.
(createHandshakeMessage): Removed.
(setPeerMessageCommonProperty): Removed.
(addRequestSlot): New function.
(receiveHandshake): Changed the return value type to
PeerMessageHandle.
(getPeerMessageFactory): New function.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createHaveMessage): Removed.
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createBitfieldMessage): Removed.
(createKeepAliveMessage): Removed.
(createHaveAllMessage): Removed.
(createHaveNoneMessage): Removed.
(createRejectMessage): Removed.
(createAllowedFastMessage): Removed.
* src/PeerInteraction.cc
(PeerInteraction): Allocate PeerMessageFactory here.
(~PeerInteraction): Deallocate PeerMessageFactory here.
(sendMessages): Use msg->isUploading() instead of msg->getId()
==
PieceMessage::ID.
(addMessage): Simplified by using PeerMessage::onPush().
(addRequestSlot): New function.
(rejectAllPieceMessageInQueue): Simplified by using
PeerMessage::onChoked().
(rejectPieceMessageInQueue): Simplified by using
PeerMessage::onCanceled().
(abortPiece): Simplified by using PeerMessage::abortPiece().
(receiveHandshake): Changed the return value type to
PeerMessageHandle.
(createHandshakeMessage): Removed.
(createPeerMessage): Removed.
(sendHandshake): Call
PeerMessageFactory::createHandshakeMessage().
(setPeerMessageCommonProperty): Removed.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createHaveMessage): Removed.
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createBitfieldMessage): Removed.
(createKeepAliveMessage): Removed.
(createHaveAllMessage): Removed.
(createHaveNoneMessage): Removed.
(createRejectMessage): Removed.
(createAllowedFastMessage): Removed.
* src/PieceMessage.h
(createRejectMessage): New function.
(PieceMessage): Rewritten.
(onChoked): New function.
(onCanceled): New function.
* src/PieceMessage.cc
(send): If invalidate is true then do nothing, just return.
(createRejectMessage): New function.
(onChoked): New function.
(onCanceled): New function.
* src/RequestMessage.h
(RequestMessage): Rewritten.
(onPush): New function.
(onAbortPiece): New function.
* src/RequestMessage.cc
(onPush): New function.
(onAbortPiece): New function.
Update fd_set when a socket is added or deleted in order to
improve
performance:
* src/DownloadEngine.h
(rfdset): New variable.
(wfdset): New variable.
(updateFdSet): New function.
* src/DownloadEngine.cc
(SetDescriptor::operator()): Use SockCmdMap::value_type.
(AccumulateActiveCommandUuid::operator()): Use
SockCmdMap::value_type.
(waitData): Copy rfdset and wfdset.
(updateFdSet): New function.
(addSocket): Call updateFdSet.
(deleteSocket): Call updateFdSet.
* src/PeerAbstractCommand.h
(beforeSocketCheck): Removed.
* src/PeerAbstractCommand.cc
Modified in order to call executeInternal() even if socket check
and upload limit check fail.
* src/PeerInteractionCommand.h
(keepAlive): Removed.
(sendKeepAlive): New function.
(checkHave): New function.
(beforeSocketCheck): Removed.
* src/PeerInteractionCommand.cc
(executeInternal): Use peerInteraction->checkRequestSlot().
Added
calls to checkHave() and sendKeepAlive().
(keepAlive): Renamed to sendKeepAlive().
(sendKeepAlive): New function.
(beforeSocketCheck): Removed.
(checkHave): New function.
* src/BitfieldMan.cc
(getMissingIndex): Don't call getMissingIndexRandomly() if max
is 0.
(getMissingUnusedIndex): Don't call getMissingIndexRandomly() if
max is
0.
(getMissingIndex): Dont't call getMissingIndexRandomly() if max
is 0.
* src/TorrentMan.h
(UsedPieces): Removed.
(Pieces): New type definition.
* src/Piece.h: Updated doc.
* src/Peer.h
(totalLength): Removed.
* src/Peer.cc
(updateLatency): Fixed the latency calculation.
* src/TorrentMan.cc
(addPeer): Call deleteOldErrorPeers() only if peers.size() is
higher
than or equal to MAX_PEER_LIST_SIZE.
If duplicate is false and peer.size() >= MAX_PEER_LIST_SIZE,
then return false.
(deleteOldErrorPeers): Rewritten.
(deleteUsedPiece): Fixed the miss use of STL remove.
* src/PeerInteraction.h
(Pieces): Removed.
(deleteTimeoutRequestSlot): Removed.
(deleteCompletedRequestSlot): Removed.
(checkRequestSlot): New function.
* src/PeerInteraction.cc
(deleteTimeoutRequestSlot): Merged to checkRequestSlot().
(deleteCompletedRequestSlot): Merged to checkRequestSlot().
(checkRequestSlot): New function.
* src/DownloadEngine.cc
(run): Clear activeSockets before calling waitData().
(waitData): Removed a call to activeSockets.clear().
To remove a wait from download loop:
* src/DownloadEngine.cc
(run): Comment out shortSleep.
To rewrite the message handling:
* src/CancelMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(create): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/CancelMessage.cc
(create): New function.
(receivedAction): Replaced deleteRequestMessageInQueue with
rejectPieceMessageInQueue.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/BitfieldMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(msgLength): New variable.
(~BitfieldMessage): Deleted msg.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/BitfieldMessage.cc
(create): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/ChokeMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(sendPredicate): New function.
(onSendComplete): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
(create): New function.
* src/ChokeMessage.cc
(create): New function.
(send): Removed.
(sendPredicate): New function.
(getMessage): New function.
(getMessageLength): New function.
(onSendComplete): New function.
* src/KeepAliveMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/KeepAliveMessage.cc
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/PortMessage.h
(create): New function.
(receivedAction): Updated log message.
* src/PortMessage.cc: New file.
* src/UnchokeMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(sendPredicate): New function.
(onSendComplete): New function.
(create): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/UnchokeMessage.cc
(create): New function.
(send): Removed.
(sendPredicate): New function.
(getMessage): New function.
(getMessageLength): New function.
(onSendComplete): New function.
* src/PieceMessage.h
(leftPieceDataLength): Removed.
(leftDataLength): New variable.
(headerSend): New variable.
(pendingCount): New variable.
(msgHeader): New variable.
(sendPieceData): New function.
(incrementPendingCount): New function.
(isPendingCountMax): New function.
(create): New function.
(getMessageHeader): New function.
(getMessageHeaderLength): New function.
* src/PieceMessage.cc
(create): New function.
(getMessageHeader): New function.
(getMessageHeaderLength): New function.
(send): Rewritten.
(sendPieceData): New function.
* src/HaveMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(create): New function.
(getMessage): New function.
(getMessageLength): New function.
* src/HaveMessage.cc
(create): New function.
(send): Removed.
(sendPieceData): New function.
(getMessage): New function.
(getMessageLength): New function.
* src/RequestMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(create): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/RequestMessage.cc
(create): New function.
(receivedAction): Added the handling of fast extension.
Deleted torrentMan->addUploadLength,
torrentMan->addDeltaUploadLength.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/InterestedMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(sendPredicate): New function.
(onSendComplete): New function.
(create): New function.
(getMessage): New function.
(getMessageLength): New function.
* src/InterestedMessage.cc
(create): New function.
(send): Removed.
(sendPieceData): New function.
(getMessage): New function.
(getMessageLength): New function.
(onSendComplete): New function.
* src/NotInterestedMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(sendPieceData): New function.
(onSendComplete): New function.
(create): New function.
(send): Removed.
(getMessage): New function.
(getMessageLength): New function.
* src/NotInterestedMessage.cc
(create): New function.
(send): Removed.
(sendPredicate): New function.
(getMessage): New function.
(getMessageLength): New function.
(onSendComplete): New function.
* src/AllowedFastMessage.h: New class.
* src/AllowedFastMessage.cc: New class.
* src/RejectMessage.h: New class.
* src/RejectMessage.cc: New class.
* src/SuggestPieceMessage.h: New class.
* src/SuggestPieceMessage.cc: New class.
* src/HaveAllMessage.h: New class.
* src/HaveAllMessage.cc: New class.
* src/HaveNoneMessage.h: New class.
* src/HaveNoneMessage.cc: New class.
* src/HandshakeMessage.h: Derived from SimplePeerMessage.
(msg): New variable.
(reserved): New variable.
(create): New function.
(getId): New function.
(receivedAction): New function.
(getMessage): New function.
(getMessageLength): New function.
(isFastExtensionSupported): New function.
* src/HandshakeMessage.cc
(HandshakeMessage): Moved here from HandshakeMessage.h.
(create): New function.
(getMessage): New function.
(getMessageLength): New function.
(toString): Added the output of reserved field.
(check): Added const qualifier.
(isFastExtensionSupported): New function.
* src/PeerMessageUtil.h
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createHaveMessage): Removed.
(createBitfieldMessage): Removed.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createPortMessage): Removed.
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createHaveMessage): Removed.
(createBitfieldMessage): Removed.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createKeepAliveMessage): Removed.
(createHandshakeMessage): Removed.
(setIntParam): New function.
(createPeerMessageString): New function.
* src/PeerMessageUtil.cc
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createHaveMessage): Removed.
(createBitfieldMessage): Removed.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createPortMessage): Removed.
(createRequestMessage): Removed.
(createCancelMessage): Removed.
(createPieceMessage): Removed.
(createHaveMessage): Removed.
(createChokeMessage): Removed.
(createUnchokeMessage): Removed.
(createInterestedMessage): Removed.
(createNotInterestedMessage): Removed.
(createBitfieldMessage): Removed.
(createKeepAliveMessage): Removed.
(createHandshakeMessage): Removed.
(setIntParam): New function.
(createPeerMessageString): New function.
* src/PeerConnection.h
(peer): Removed.
(torrentMan): Removed.
(createNLengthMessage): Removed.
(setIntParam): Removed.
(writeOutgoingMessageLog): Removed all overloaded functions.
(PeerConnection): Deleted peer and torrentMan from its
arguments.
(sendMessage): New function.
(sendHandshake): Removed.
(sendKeepAlive): Removed.
(sendChoke): Removed.
(sendUnchoke): Removed.
(sendInterested): Removed.
(sendNotInterested): Removed.
(sendHave): Removed.
(sendBitfield): Removed.
(sendRequest): Removed.
(sendPiece): Removed.
(sendPieceHeader): Removed.
(sendPieceData): Removed.
(sendCancel): Removed.
(getPeer): Removed.
* src/PeerConnection.cc
(PeerConnection): Deleted peer and torrentMan from its
arguments.
(sendHandshake): Removed.
(sendKeepAlive): Removed.
(createNLengthMessage): Removed.
(setIntParam): Removed.
(writeOutgoingMessageLog): Removed all overloaded functions.
(sendChoke): Removed.
(sendUnchoke): Removed.
(sendInterested): Removed.
(sendNotInterested): Removed.
(sendHave): Removed.
(sendBitfield): Removed.
(sendRequest): Removed.
(sendPiece): Removed.
(sendPieceHeader): Removed.
(sendPieceData): Removed.
(sendMessage): New function.
(sendCancel): Removed.
* src/PeerInteractionCommand.cc
(PeerInteractionCommand): Call setUploadLimit.
(executeInternal): Call setUploadLimit.
Added the handling of "inProgress" state of handshake message.
Call sendBitfield() or sendAllowdFast() instead of deprecated
sendNow().
(keepAlive): Call addMessage and sendMessage instead of
deprecated
sendNow().
(beforeSocketCheck): Call addMessage instead of deprecated
trySendNow()
* src/TorrentMan.h
(PEER_ID_LENGTH): New definition.
(hasAllPieces): New function.
* src/TorrentMan.cc
(getMissingPiece): Added the handling of fast extension.
(cancelPiece): Call updatePiece().
(hasAllPieces): New function.
* src/PeerInteraction.h
(fastSet): New variable.
(getNewPieceAndSendInterest): Changed the return type to void.
(send): Renamed as sendMessages.
(deleteAllRequestSlot): Removed.
(deleteRequestMessageInQueue): Renamed as
rejectPieceMessageInQueue.
(cancelAllRequest): Removed all overloaded functions.
(deleteAllRequestSlot): Removed.
(deletePieceMessageInQueue): Renamed as
rejectAllPieceMessageInQueue.
(rejectPieceMessageInQueue): New function.
(rejectAllPieceMessageInQueue): New function.
(onChoked): New function.
(isSendingMessageInProgress): New function.
(getCorrespondingRequestSlot): Changed its arguments.
(isInFastSet): New function.
(addFastSetIndex): New function.
(addRequests): New function.
(sendNow): Removed.
(trySendNow): Removed.
(sendBitfield): New function.
(sendAllowdFast): New function.
(createHaveAllMessage): New function.
(createHaveNoneMessage): New function.
(createRejectMessage): New function.
(createAllowedFastMessage): New function.
* src/PeerInteraction.cc
(send): Renamed as sendMessages.
(sendMessages): New function.
(MsgPushBack): New class.
(isSendingMessageInProgress): New function.
(deletePieceMessageInQueue): Renamed as
rejectAllPieceMessageInQueue.
(rejectAllPieceMessageInQueue): New function.
Added the handling of fast extension.
(deleteRequestMessageInQueue): Renamed as
rejectPieceMessageInQueue.
(rejectPieceMessageInQueue): New function.
Added the handling of fast extension.
(deleteRequestSlot): Replaced for loop with std::find.
(onChoked): New function.
(deleteAllRequestSlot): Removed.
(abortPiece): Rewirtten.
(deleteTimeoutRequestSlot): Updated log messages.
(getCorrespondingRequestSlot): Changed its arguments.
(cancelAllRequest): Removed all overloaded functions.
(receiveHandshake): Added the check to see whether an incoming
peer
supports fast extension.
(createHandshakeMessage): Use HandshakeMessage::create instead
of
PeerMessageUtil.
(createPeerMessage): Use create() of each message class instead
of
PeerMessageUtil.
HaveAllMessage, HaveNoneMessage, RejectMessage,
SuggestPieceMessage,
AllowedFastMessage were added.
(getNewPieceAndSendInterest): Changed its return value type to
void.
Added the handling of fast extension.
(addRequests): New function.
(sendNow): Removed.
(sendHandshake): Rewritten.
(trySendNow): Removed.
(sendBitfield): New function.
(sendAllowdFast): New function.
(isInFastSet): New function.
(addFastSetIndex): New function.
(createRequestMessage): Use RequestMessage::create instead of
PeerMessageUtil.
(createCancelMessage): Use CancelMessage::create instead of
PeerMessageUtil.
(createPieceMessage): Use PieceMessage::create instead of
PeerMessageUtil.
(createHaveMessage): Use HaveMessage::create instead of
PeerMessageUtil.
(createChokeMessage): Use ChokeMessage::create instead of
PeerMessageUtil.
(createUnchokeMessage): Use UnchokeMessage::create instead of
PeerMessageUtil.
(createInterestedMessage): Use InterestedMessage::create instead
of
PeerMessageUtil.
(createNotInterestedMessage): Use NotInterestedMessage::create
instead
of PeerMessageUtil.
(createBitfieldMessage): Use BitfieldMessage::create instead of
PeerMessageUtil.
(createKeepAliveMessage): Use KeepAliveMessage::create instead
of
PeerMessageUtil.
(createHaveAllMessage): New function.
(createHaveNoneMessage): New function.
(createRejectMessage): New function.
(createAllowedFastMessage: New function.
* src/Util.h
(sha1Sum): New function.
(computeFastSet): New function.
* src/Util.cc
(sha1Sum): New function.
(computeFastSet): New function.
* src/Peer.h
(fastExtensionEnabled): New variable.
(fastSet): New variable.
(setAllBitfield): New function.
(setFastExtensionEnabled): New function.
(isFastExtensionEnabled): New function.
(addFastSetIndex): New function.
(getFastSet): New function.
(isInFastSet): New function.
(countFastSet): New function.
* src/Peer.cc
(isInFastSet): New function.
(addFastSetIndex): New function.
(setAllBitfield): New function.
* src/AbstractCommand.cc (execute): Changed the procedure of
checking
sockets.
* src/PeerAbstractCommand.cc
(PeerAbstractCommand): Added the initialization for
uploadLimitCheck
and uploadLimit.
(execute): Changed the procedure of checking sockets. The upload
speed
checking were added.
(setUploadLimit): New function.
(setUploadLimitCheck): New function.
* src/PeerAbstractCommand.h
(setUploadLimit): New function.
(setUploadLimitCheck): New function.
(uploadLimit): New variable.
(uploadLimitCheck): New variable.
To contact a tracker regularly:
* src/TrackerWatcherCommand.h (interval): New variable.
(checkPoint): New variable.
(TrackerWatcherCommand): Added interval argument.
* src/TrackerWatcherCommand.cc
(TrackerWatcherCommand): Initialized checkPoint.
(execute): Now a tracker is contacted in every specified period.
If peer list is not needed, send request with numwant=0.
* src/TrackerUpdateCommand.cc
(execute): Updated log messages.
* src/DownloadEngine.cc
(~DownloadEngine): Removed two asserts.
(waitData): Uncommented wfds. May be a bug fix.
(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.
Each peer message has its own class.
* src/PendingMessages.h: Removed.
* src/PendingMessages.cc: Removed. The sending process was moved
to
each message class.
* src/RequestSlotMan.h: Removed.
* src/RequestSlotMan.cc: Removed. All functionarities were moved
to
SendMessageQueue.
* src/RequestMessage.h: New class.
* src/RequestMessage.cc: New class.
* src/CancelMessage.h: New class.
* src/CancelMessage.cc: New class.
* src/BitfieldMessage.h: New class.
* src/BitfieldMessage.cc: New class.
* src/ChokeMessage.h: New class.
* src/ChokeMessage.cc: New class.
* src/KeepAliveMessage.h: New class.
* src/KeepAliveMessage.cc: New class.
* src/PortMessage.h: New class.
* src/UnchokeMessage.h: New class.
* src/UnchokeMessage.cc: New class.
* src/PieceMessage.h: New class.
* src/PieceMessage.cc: New class.
* src/HaveMessage.h: New class.
* src/HaveMessage.cc: New class.
* src/BitfieldMessage.h: New class.
* src/BitfieldMessage.cc: New class.
* src/NotInterestedMessage.h: New class.
* src/NotInterestedMessage.cc: New class.
* src/InterestedMessage.h: New class.
* src/InterestedMessage.cc: New class.
* src/HandshakeMessage.h (sendMessageQueue): New variable.
(getSendMessageQueue): New function.
(setSendMessageQueue): New function.
* src/HandshakeMessage.cc: New class.
* src/PeerConnection.h (receiveMessage): Changed return value
and
arguments.
(receiveHandshake): Changed return value and arguments.
* src/PeerConnection.cc (receiveMessage): Do not create message
class
here.
(receiveHandshake): Do not create handshake class here.
* src/PeerInteractionCommand.h (peerConnection): Removed.
(piece): Removed.
(syncPiece): Removed.
(sendInterest): Removed.
(sendMessages): Removed.
(createRequestPendingMessage): Removed.
(checkPieceHash): Removed.
(erasePieceOnDisk): Removed.
(getNewPieceAndSendInterest): Removed.
(onGotNewPice): Removed.
(onGotWrongPiece): Removed.
* src/PeerInteractionCommand.cc (PeerInteractionCommand):
Removed peerConnection, piece.
(~PeerInteractionCommand): Removed peerConnection.
(executeInternal): Use sendMessageQueue instead of
peerConnection.
(syncPiece): Moved to SendMessageQueue.
(decideChoking): Removed PendingMessage.
(receiveMessage): Use sendMessageQueue instead of
peerConnection.
The action after receiving peer message was moved to each
message
class.
(onGotNewPice): Moved to SendMessageQueue.
(onGotWrongPiece): Moved to SendMessageQueue.
(getNewPieceAndSendInterest): Moved to SendMessageQueue.
(sendInterest): Moved to SendMessageQueue.
(createRequestPendingMessage): Removed.
(sendMessages): Moved to SendMessageQueue.
(onAbort): Use SendMessageQueue::abortPiece()
(keepAlive): Use sendMessageQueue instead of peerConnection.
(beforeSocketCheck): Use sendMessageQueue instead of
peerConnection.
(checkPieceHash): Moved to SendMessageQueue.
(erasePieceOnDisk): Moved to SendMessageQueue.
* src/PeerMessageUtil.h
(createBitfieldMessage): Removed.
(createHaveMessage): Changed return value and arguments.
(createBitfieldMessage): Changed return value and arguments.
(createRequestCancelMessage): Removed.
(createPieceMessage): Changed return value and arguments.
(getShortIntParam): New function.
(checkIndex): Changed arguments.
(checkBegin): Changed arguments.
(checkLength): Changed arguments.
(checkPieceOffset): Removed.
(checkRange): New function.
(checkBitfield): Changed arguments.
(createPeerMessage): Removed.
(checkIntegrity): Removed.
(createHandshakeMessage): Changed arguments.
(createChokeMessage): New function.
(createUnchokeMessage): New function.
(createInterestedMessage): New function.
(createNotInterestedMessage): New function.
(createRequestMessage): New function.
(createCancelMessage): New function.
(createPortMessage): New function.
* src/PeerMessageUtil.cc
(createBitfieldMessage): Removed.
(createHaveMessage): Changed return value and arguments.
(createBitfieldMessage): Changed return value and arguments.
(createRequestCancelMessage): Removed.
(createPieceMessage): Changed return value and arguments.
(getShortIntParam): New function.
(checkIndex): Changed arguments.
(checkBegin): Changed arguments.
(checkLength): Changed arguments.
(checkPieceOffset): Removed.
(checkRange): New function.
(checkBitfield): Changed arguments.
(createPeerMessage): Removed.
(checkIntegrity): Removed.
(createHandshakeMessage): Changed arguments.
(createChokeMessage): New function.
(createUnchokeMessage): New function.
(createInterestedMessage): New function.
(createNotInterestedMessage): New function.
(createRequestMessage): New function.
(createCancelMessage): New function.
(createPortMessage): New function.
* src/PeerMessage.h
(id): Removed.
(index): Removed.
(begin): Removed.
(length): Removed.
(bitfield): Removed.
(bitfieldLength): Removed.
(block): Removed.
(blockLength): Removed.
(inProgress): New variable.
(cuid): New variable.
(peer): New variable.
(sendMessageQueue): New variable.
(logger): New variable.
(setBitfield): Removed.
(getBitfield): Removed.
(setBlock): Removed.
(getBlock): Removed.
(getBitfieldLength): Removed.
(getBlockLength): Removed.
(isInProgress): New function.
(toString): Made pure virtual.
(check): New function.
(send): New function.
(receivedAction): New function.
(getId): Made pure virtual.
(setId): Removed.
(getIndex): Removed.
(setIndex): Removed.
(getBegin): Removed.
(setBegin): Removed.
(getLength): Removed.
(setLength): Removed.
(getCuid): New function.
(setCuid): New function.
(getPeer): New function.
(setPeer): New function.
(getSendMessageQueue): New function.
(setSendMessageQueue): New function.
(ID): Removed.
* src/PeerMessage.cc
(setBitfield): Removed.
(setBlock): Removed.
(toString): Removed.
* src/TorrentMan.h
(getPieceLength): New function.
(getPieceLength): New function.
* src/SendMessageQueue.h
(REQUEST_TIME_OUT): New definition.
(RequestSlots): New definition.
(MessageQueue): New definition.
(requestSlotMan): Removed.
(pendingMessages): Removed.
(requestSlots): New variable.
(messageQueue): New variable.
(torrentMan): New variable.
(peerConnection): New variable.
(peer): New variable.
(piece): New variable.
(getNewPieceAndSendInterest): New function.
(createPeerMessage): New function.
(createHandshakeMessage): New function.
(send): Made private.
(setPeerMessageCommonProperty): New function.
(deleteAllRequestSlot): New function.
(deleteRequestMessageInQueue): New function.
(cancelAllRequest): Made private.
(cancelAllRequest): Made private.
(countRequestSlot): Made private.
(addPendingMessage): Removed.
(deletePendingPieceMessage): Removed.
(deletePendingRequestMessage): Removed.
(addMessage): New function.
(deletePieceMessageInQueue): New function.
(deleteTimeoutRequestSlot): Changed argument.
(deleteCompletedRequestSlot): Changed argument.
(getCorrespoindingRequestSlot): Renamed to
getCorrespondingRequestSlot.
(getCorrespondingRequestSlot): New function.
(countPendingMessage): Removed.
(countMessageInQueue): New function.
(getTorrentMan): New function.
(getPeerConnection): New function.
(hasDownloadPiece): New function.
(getDownloadPiece): New function.
(setDownloadPiece): New function.
(syncPiece): New function.
(sendMessages): New function.
(sendNow): New function.
(trySendNow): New function.
(abortPiece): New function.
(sendHandshake): New function.
(receiveMessage): New function.
(receiveHandshake): New function.
(createRequestMessage): New function.
(createCancelMessage): New function.
(createPieceMessage): New function.
(createHaveMessage): New function.
(createChokeMessage): New function.
(createUnchokeMessage): New function.
(createInterestedMessage): New function.
(createNotInterestedMessage): New function.
(createBitfieldMessage): New function.
(createKeepAliveMessage): New function.
* src/SendMessageQueue.cc
(SendMessageQueue): Removed requestSlotMan.
Instantiated peerConnection here.
(~SendMessageQueue): Removed requestSlotMan.
Added deletion of peerConnection and the contents of
messageQueue.
(send): Updated according to the change of messageQueue.
(addPendingMessage): Renamed to addMessage.
(addMessage): New function.
(deletePendingPieceMessage): Renamed to
deletePieceMessageInQueue.
(deletePieceMessageInQueue): New function.
(deletePendingRequestMessage): Renamed to
deleteRequestMessageInQueue.
(deleteRequestMessageInQueue): New function.
(deleteRequestSlot): RequestSlotMan::deleteRequestSlot(...) was
moved
here.
(deleteTimeoutRequestSlot):
RequestSlotMan::deleteTimeoutRequestSlot
(...) was moved here.
(deleteAllRequestSlot):
RequestSlotMan::deleteAllRequestSlot(...) was
moved here.
(deleteCompletedRequestSlot):
RequestSlotMan::deleteCompletedRequestSlot(...) was moved here.
(getCorrespondingRequestSlot):
RequestSlotMan::getCorrespoindingRequestSlot(...) was moved
here.
And renamed to getCorrespondingRequestSlot, correcting a typo.
(countPendingMessage): Renamed to countMessageInQueue.
(countMessageInQueue): New function.
(countRequestSlot): RequestSlotMan::countRequestSlot() was moved
here.
(receiveHandshake): New function.
(createHandshakeMessage): New function.
(receiveMessage): New function.
(createPeerMessage): New function.
(syncPiece): New function.
(getNewPieceAndSendInterest): New function.
(sendMessages): New function.
(sendNow): New function.
(trySendNow): New function.
(sendHandshake): New function.
(abortPiece): New function.
(getDownloadPiece): New function.
(getPeerMessageCommonProperty): New function.
(createRequestMessage): New function.
(createCancelMessage): New function.
(createPieceMessage): New function.
(createHaveMessage): New function.
(createChokeMessage): New function.
(createUnchokeMessage): New function.
(createInterestedMessage): New function.
(createNotInterestedMessage): New function.
(createBitfieldMessage): New function.
(createKeepAliveMessage): New function.
To add simple Content-Disposition support:
* src/HttpResponseCommand.h (determinFilename): New function.
* src/HttpResponseCommand.cc (executeInternal):
Use determinFilename(headers) instead of req->getFile() when
comparing
filename.
(determinFilename): New function.
(handleDefaultEncoding): Use determinFilename(headers) instead
of
req->getFile().
(handleOtherEncoding): Use determinFilename(headers) instead of
req->getFile().
* src/Util.h (getContentDispositionFilename): New function.
* src/Util.cc (getContentDispositionFilename): New function.
* src/LogFactory.h (release): New function.
* src/LogFactory.cc (release): New function.
To fix a bug that causes out-of-bound exception when HTTP status
line is wrong:
* src/HttpConnection.cc (receiveResponse): Added a check for
header
size.
* src/common.h (Deleter): New class.
* src/SegmentMan.cc
(~SegmentMan): Added deletion of splitter and diskWriter.
* src/DownloadEngine.h
(Commands): Use deque.
(clearQueue): New function.
* src/DownloadEngine.cc
(~DownloadEngine): Added deletion of segmentMan.
(cleanQueue): New function.
* src/TorrentDownloadEngine.h
(TorrentDownloadEngine): The implementation was moved to
TorrentDownloadEngine.cc.
(~TorrentDownloadEngine): The implementation was moved to
TorrentDownloadEngine.cc.
* src/TorrentDownloadEngine.cc
(~TorrentDownloadEngine): Added deletion of torrentMan.
* src/main.cc
(clearRequest): Removed.
(handler): Added deletion of e.
(torrentHandler): Added deletion of te.
(main): Do not share splitter.
Use Deleter instead of clearRequest.
Deletion of classes were updated.