Commit Graph

4 Commits (b8737b0e7c92fb4a5b1c8b6173663381aacca40c)

Author SHA1 Message Date
Tatsuhiro Tsujikawa 2fb9b5be97 2006-09-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To rewrite segment download mechanism for HTTP/FTP download.
	Use BitfieldMan to manage segment download.
	* src/HttpResponseCommand.h
	(executeInternal): Pass the reference of segment.
	* src/AbstractCommand.cc
	(prepareForRetry): Call segmentMan->cancelSegment here.
	(onAbort): Call segmentMan->cancelSegment here.
	* src/HttpDownloadCommand.cc
	(prepareForNextSegment): New function.
	* src/DownloadEngineFactory.cc
	(newConsoleEngine): Removed splitter.
	(newTorrentConsoleEngine): Removed splitter.
	* src/Request.h
	(segment): Renamed from seg.
	* src/FtpInitiateConnectionCommand.h
	(executeInternal): Pass the reference of segment.
	* src/AbstractCommand.h
	(executeInternal): Pass the reference of segment.
	* src/pref.h
	(PREF_SEGMENT_SIZE): New definition.
	* src/HttpProxyRequestCommand.h
	(executeInternal): Pass the reference of segment.
	* src/HttpResponseCommand.cc
	(checkResponse): Allowed status 206 when a request range starts 
0.
	(handleDefaultEncoding): Rewritten the code related to Segment.
	(handleOtherEncoding): Rewritten the code related to Segment.
	* src/SegmentMan.h
	(SegmentEntry): New class.
	(SegmentEntries): New type definition.
	(bitfield): New variable.
	(usedSegmentEntries): New variable.
	(onNullBitfield): New function.
	(checkoutSegment): New function.
	(segments): Removed.
	(splitter): Removed.
	(unregisterId): Removed.
	(getSegment): New function(overload)
	(getDownloadedSize): Removed.
	(cancelSegment): New function.
	(completeSegment): New function.
	(initBitfield): New function.
	(hasSegment): New function.
	(getDownloadLength): New function.
	* src/BitfieldMan.h
	(getStartIndex): New function.
	(getEndIndex): New function.
	(getMissingUnusedIndex): New function(overload).
	(getSparseMissingUnusedIndex): New function.	
	* src/BitfieldMan.cc
	(getMissingIndexRandomly): Handle the last byte of bitfield 
properly.
	(getMissingUnusedIndex): New function(overload).
	(Range): New class.
	(getStartIndex): New function.
	(getEndIndex): New function.
	(getSparseMissingUnusedIndex): New function.
	(isBitSetInternal): Return false if the given index is less than 
0.
	* src/HttpInitiateConnectionCommand.h
	(executeInternal): Pass the reference of segment.
	* src/FtpNegotiateCommand.h
	(executeInternal): Pass the reference of segment.
	* src/FtpNegotiateCommand.cc
	(recvSize): Initialize bitfield here.
	* src/FtpTunnelResponseCommand.h
	(executeInternal): Pass the reference of segment.
	* src/HttpConnection.cc
	(createRequest): Rewritten range header processing.
	* src/DownloadCommand.h
	(executeInternal): Pass the reference of segment.
	(prepareForRetry): Removed.
	(prepareForNextSegment): Added an argument segment. Made it a 
virtual
	function.
	* src/main.cc
	(main): Set the initial value of PREF_SEGMENT_SIZE to 1MB.
	* src/SegmentMan.cc
	(SegmentMan): Added bitfield. Removed splitter.
	(~SegmentMan): Added bitfield. Removed splitter.
	(unregisterId): Removed.
	(getSegment): Rewritten.
	(updateSegment): Rewritten.
	(save): Rewritten.
	(read): Rewritten.
	(finished): Rewritten.
	(getDownloadedSize): Removed.
	(initBitfield): New function.
	(FindSegmentEntryByIndex): New function object.
	(FindSegmentEntryByCuid): New function object.
	(checkoutSegment): New function.
	(onNullBitfield): New function.
	(getSegment): New function(overload).
	(CancelSegment): New function object.
	(cancelSegment): New function.
	(completeSegment): New function.
	(hasSegment): New function.
	(getDownloadLength): New function.
	* src/FtpInitiateConnectionCommand.cc
	(executeInternal): Load .aria2 file after hostname resolution 
finishes.
	* src/Segment.h: Rewritten.
	* src/Segment.cc (operator<<): New function.
	* src/HttpDownloadCommand.h
	(prepareForNextSegment): New function.
	* src/Request.cc
	(resetUrl): Made segment null.
	* src/DownloadEngine.cc
	(~DownloadEngine): Call cleanQueue before deleting segmentMan.
	* src/HttpProxyRequestCommand.h
	(executeInternal): Pass the reference of segment.
	* src/DownloadCommand.cc
	(executeInternal): Rewritten the code related to Segment.
	(prepareForRetry): Removed.
	(prepareForNextSegment): Rewritten.
	* src/FtpTunnelResponseCommand.h
	(executeInternal): Pass the reference of segment.
	
	To add HTTP 1.1 persistent connection support(experimental)
	* src/HttpRequestCommand.cc
	(executeInternal): Disable keep alive if it is disabled by
	configuration.
	* src/Request.h
	(keepAlive): New variable.
	(isKeepAlive): New function.
	(setKeepAlive): New function.
	* src/pref.h
	(PREF_HTTP_KEEP_ALIVE): New definition.
	* src/HttpResponseCommand.cc
	(executeInternal): Check the remote server supports keep alive.
	* src/HttpConnection.cc
	(createRequest): Send "Connection: close" only if keep alive is
	disabled.
	* src/main.cc
	(main):
	Set the initial value(false) of PREF_KEEP_ALIVE to false.

	To add max download speed limit:
	* src/pref.h
	(PREF_MAX_SPEED_LIMIT): New definition.
	* src/PeerInteractionCommand.cc
	(executeInternal): Added max download speed limit. Not tested 
yet.
	* src/SegmentMan.h
	(PeerStats): New type definition.
	(peerStats): New variable.
	(registerPeerStat): New function.
	(FindPeerStat): New function object.
	(getPeerStat): New function.
	(calculateDownloadSpeed): New function.
	* src/SpeedCalc.h: New class.
	* src/SpeedCalc.cc: New class.
	* src/main.cc
	(main):
	Set the initial value of PREF_MAX_SPEED_LIMIT to 0(which means 
the
	download speed is not restricted).
	* src/PeerStat.h: New class.
	* src/SegmentMan.cc
	(registerPeerStat): New function.
	(calculateDownloadSpeed): New function.
	* src/DownloadCommand.cc
	(STARTUP_IDLE_TIME): New definition.
	(DownloadCommand): Register peerStat to segmentMan. Call 
peerStat->
	downloadStart.
	(~DownloadCommand): Call peerStat->downloadStop.
	(executeInternal): Added download speed limitter. Rewritten 
lowest
	speed limitter.

	* src/HttpConnection.cc
	(receiveResponse): Fixed: eohIndex[headerBuf] -> 
headerBuf[eohIndex].
	
	* src/AbstractCommand.cc
	(resolveHostname): Throw DlAbortEx if a name resolution failes.
	Added hostname to the error message.
	
	* src/ConsoleDownloadEngine.cc
	(calculateStatistics): Initialize psize with dlSize.

	* src/PieceMessage.cc
	(receivedAction): Do not call peerInteraction->abortPiece here.
	(onGotWrongPiece): Call peerInteraction->abortPiece here.

	* src/BitfieldMan.h
	(clearAllUseBit): New function.
	(setAllUseBit): New function.
	* src/BitfieldMan.cc
	(clearAllBit): Do not clear useBitfield here.
	(clearAllUseBit): New function.
	(setAllUseBit): New function.
	* src/Piece.cc
	(clearAllBlock): Call bitfield->clearAllUseBit().
2006-09-19 14:52:59 +00:00
Tatsuhiro Tsujikawa 928465b7bc 2006-07-30 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentMan.h:
	(advertisePiece): Updated doc.
	(getAdvertisedPieceIndexes): Updated doc.
	(removeAdvertisedPiece); New function.
	
	* src/TorrentMan.cc
	(FindElapsedHave): New function object.
	(removeAdvertisedPiece): New function.

	* src/HaveEraseCommand.h: New class.
	* src/HaveEraseCommand.cc: New class.

	* src/FeatureConfig.h: New class.
	* src/FeatureConfig.cc: New class.
	
	* src/Request.h
	(defaultPorts): Removed.
	* src/Request.cc
	(FeatureConfig.h): Included.
	(Request): Removed the statements related to defaultPorts.
	(parseUrl): Removed metalinkEnabled. Use FeatureConfig instead.
	A default port number is now retrieved from FeatureConfig.
	
	* src/main.cc
	(HaveEraseCommand.h): Included.
	(showVersion): Added the output of feature list.
	(main): Added HaveEraseCommand to command queue in BitTorrent
	downloading.
	
	* src/PeerInteractionCommand.h
	(chokeCheckPoint): Commented out.
	(periodicExecPoint): New variable.
	* src/PeerInteractionCommand.cc
	(executeInternal): Following methods are now called in at least 
every
	0.5 seconds to reduce CPU usage:
	detectMessageFlooding(), peerInteraction->checkRequestSlot(),
	checkHave(), sendKeepAlive().
	(checkLongTimePeerChoking): Commented out.

	* src/BitfieldMan.h
	(getNthBitIndex): Changed the method signature.
	(getMissingIndexRandomly): Changed the method signature.
	* src/BitfieldMan.cc
	(getNthBitIndex): Rewritten
	(getMissingIndexRandomly): Rewritten.
	(hasMissingPiece): Rewritten.
	(getMissingIndex): Refactored.
	(getMissingUnusedIndex); Refactored.
	(getMissingIndex): Refactored.
2006-07-30 12:58:27 +00:00
Tatsuhiro Tsujikawa 9a52be6a29 2006-04-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To print ETA:

	* src/TorrentDownloadEngine.cc (afterEachIteration): Added 
download
	completion handling when dealing with
	TorrentMan::isPartialDownloadingMode() == true.
	* src/TorrentDownloadEngine.h (onPartialDownloadingCompletes):
	New function.
	* src/TorrentConsoleDownloadEngine.h (startup): New variable.
	(sessionDownloadLength): New variable.
	(avgSpeed): New variable.
	(eta): New variable.
	* src/TorrentConsoleDownloadEngine.cc (initStatistics): 
Initialized
	new variables: eta, avgSpeed, startup.
	(calculateSpeed): Calculate average speed and ETA.
	(printStatistics): Added ETA.

	* src/Util.h (secfmt): New function.
	* src/Util.cc (secfmt): New function.
	
2006-04-05  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>

	To detect "keep alive" flooding:

	* src/PeerInteractionCommand.h (keepAliveCount): New variable
	* src/PeerInteractionCommand.cc (Constructor): Initialized new
	variable: keepAliveCount.
	(detectMessageFlooding): Added "keep alive" flooding detection.
	(receiveMessage): Increase keepAliveCount when "keep alive" 
message
	received.
	
	To add the ability to download only specified files in 
multi-file
	torrent:

	* src/BitfieldMan.h (filterBitfield): New variable.
	(filterEnabled): New variable.
	(setFilterBit): New function.
	(enableFilter): New function.
	(disableFilter): New function.
	(isFilterEnabled): New function.
	(getFilteredTotalLength): New function.
	(getCompletedLength): New function.
	* src/BitfieldMan.cc (Constructor): Initialized new variable:
	filterBitfield, filterEnabled.
	(CopyConstructor): Added filterBitfield and filterEnabled.
	(operator==): Added filterBitfield and filterEnabled.
	(Destructor): Added filterBitfield.
	(getMissingIndex): Use filterBitfield.
	(getMissingUnusedIndex): Use filterBitfield.
	(getFirstMissingUnusedIndex): Use filterBitfield.
	(getFirstMissingUnusedIndex): Use filterBitfield.
	(getAllMissingIndexes): Use filterBitfield.
	(countMissingBlock): Use filterBitfield.
	(countBlock): Use filterBitfield.
	(setBitInternal): Added new argument on.
	(setUseBit): Use setBitInternal.
	(unsetUseBit): Use setBitInternal.
	(setBit): Use setBitInternal.
	(unsetBit): Use setBitInternal.
	(isAllBitSet): Use filterBitfield.
	(setFilterBit): New function.
	(addFilter): New function.
	(enableFilter): New function.
	(disableFilter): New function.
	(clearFilter): New function.
	(isFilterEnabled): New function.
	(getFilteredTotalLength): New function.
	(getCompletedLength): New function.

	* src/TorrentMan.h [FileEntry](Constructor): Updated signature.
	Initalized newly added variables.
	[FileEntry](offset): New variable.
	[FileEntry](extracted): New variable.
	[FileEntry](requested): New variable.
	(readFileEntry): New function.
	(option): New variable.
	(splitMultiFile): Removed const qualifier.
	(fixFilename): Removed const qualifier.
	(readFileEntryFromMetaInfoFile): New function.
	(finishPartialDownloadingMode): New function.
	(isPartialDownloadingMode): New function.
	(setFileEntriesToDownload): New function.
	(getCompletedLength): New function.
	(getPartialTotalLength): New function.
	* src/TorrentMan.cc (readFileEntry): New function.
	(setup): Use readFileEntry. If no-preallocation option is 
specified,
	use DefaultDiskWriter.
	(readFileEntryFromMetaInfoFile): New function.
	(fixFilename): Removed const qualifier.
	(splitMultiFile): Removed const qualifier.
	(setFileEntriesToDownload): New function.
	(isPartialDownloadingMode): New function.
	(finishPartialDownloadingMode): New function.
	(getCompletedLength): New function.
	(getPartialTotalLength): New function.
	
	* src/TorrentConsoleDownloadEngine.h 
(partialDownloadLengthDiff):
	New variable.
	(partialTotalLength): New variable.
	(downloadLength): New variable.
	(totalLength): New variable.
	* src/TorrentConsoleDownloadEngine.cc 
(onPartialDownloadingCompletes):
	Added log.
	(initStatistics): Initialized new variables: 
partialDownloadLengthDiff,
	partialTotalLength, downloadLength, totalLength.
	(calculate): Calculate downloadLength and totalLength.
	
	* src/prefs.h :New definition PREF_NO_PREALLOCATION

	* src/main.cc (addCommand): Changed argument signature.
	(main): Added new variable: args. Added new option 
"torrent-show-files"
	"no-preallocation". Usage is not updated yet.
	
2006-04-02  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>

	* src/PeerMessage.cc (setBitfield): Fixed invalid memory 
de-allocation.
2006-04-06 12:52:16 +00:00
Tatsuhiro Tsujikawa df6c7c0385 added bittorrent support(experimental) 2006-03-21 14:12:51 +00:00