Removed MetalinkProcessorFactory. Since we don't use both
libxml2 and expat simultaneously, MetalinkProcessor is now not
base class and it is directly implemented in
XML2SAXMetalinkProcessor and ExpatMetalinkProcessor.
* src/ExpatMetalinkProcessor.cc
* src/ExpatMetalinkProcessor.h
* src/Makefile.am
* src/MetalinkHelper.cc
* src/MetalinkProcessor.h
* src/MetalinkProcessorFactory.cc: Removed.
* src/MetalinkProcessorFactory.h: Removed
* src/XML2SAXMetalinkProcessor.cc
* src/XML2SAXMetalinkProcessor.h
* test/MetalinkProcessorTest.cc
Use url-list (web-seeding) only for single-file torrent. This
is basically the same behavior with Metalink file with torrent
and URIs.
* src/RequestGroup.cc
* src/DefaultBtContext.cc
* test/DefaultBtContextTest.cc
Fixed the bug that prevents torrent download from finishing.
The bug doesn't reveal for all torrents. The torrents affected
this bug satisfies ((N+7)/8)%4 == 0 and N%32 != 0 where N is the
number of pieces.
* src/bitfield.h
* test/bitfieldTest.cc
Fixed segmentation fault when GZipDecoder::decode() returns 0
byte.
* src/DownloadCommand.cc
* src/bitfield.h
* test/bitfieldTest.cc
Fixed the bug that causes infinite loop if broken web server
returns chunked response without last "0" chunk-size marker and
closes connection.
* src/DownloadCommand.cc
Instantiate properly configured HttpDownloadCommand for
non-resumable downlaods.
* src/HttpResponseCommand.cc
Fixed the bug that removed peer's session upload/download length
are counted twice in _cachedTransferStat before it is
re-calculated. This affected the calculation of shara ratio,
resulting aria2 wrongly determines that specified share ratio is
reached. Also fixed the typo in calculateStatFor function name.
* src/BtSetup.cc
* src/DefaultPeerStorage.cc
* src/ShareRatioSeedCriteria.h
* test/ShareRatioSeedCriteriaTest.cc
BitfieldMan::getMissingIndexes family functions now takes
unsigned char* bitfield instead of stl container for efficiency.
PieceSelector::select now takes this
bitfield. RarestPieceSelector::select now also performs
efficiently for this change. bitfield namespace is introduced
and it has several helper functions to handle basic bitfield
operations such as test, count set bits, etc.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/DefaultBtRequestFactory.cc
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/LongestSequencePieceSelector.cc
* src/LongestSequencePieceSelector.h
* src/Makefile.am
* src/Piece.cc
* src/Piece.h
* src/PieceSelector.h
* src/RarestPieceSelector.cc
* src/RarestPieceSelector.h
* src/Util.cc
* src/Util.h
* src/bitfield.h
* test/BitfieldManTest.cc
* test/LongestSequencePieceSelectorTest.cc
* test/Makefile.am
* test/RarestPieceSelectorTest.cc
* test/UtilTest.cc
* test/bitfieldTest.cc
Added 'falloc' parameter for --file-allocation option. 'falloc'
allocation mode uses posix_fallocate() system call to allocate
file on disk. If you are using newer file systems such as ext4
(with extents support), btrfs or xfs, 'falloc' is your best
choice. It allocates large(few GiB) files almost instantly.
Don't use 'falloc' with legacy file systems such as ext3 because
it takes almost same time as 'prealloc' and it blocks aria2
entirely until allocation finishes. 'falloc' may not be
available if your system doesn't have posix_fallocate() system
call.
* configure.ac
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/BinaryStream.h
* src/BtCheckIntegrityEntry.cc
* src/ByteArrayDiskWriter.h
* src/CheckIntegrityEntry.cc
* src/CheckIntegrityEntry.h
* src/DefaultPieceStorage.cc
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/DiskWriter.h
* src/FallocFileAllocationIterator.cc
* src/FallocFileAllocationIterator.h
* src/FileAllocationEntry.cc
* src/FileAllocationEntry.h
* src/Makefile.am
* src/MultiFileAllocationIterator.cc
* src/MultiFileAllocationIterator.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/StreamCheckIntegrityEntry.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/FallocFileAllocationIteratorTest.cc
* test/Makefile.am
Replaced std::vector<SharedHandle<PieceStats> _sortedPieceStats
with std::vector<size_t> _sortedPieceStatIndexes to reduce the
cost of std::rotate().
* src/RarestPieceSelector.cc
* src/RarestPieceSelector.h
* test/RarestPieceSelectorTest.cc
Reduced the number of calls to PeerStorage::calculateStat() and
SegmentMan::calculateDownloadSpeed() to lower CPU usage on
higher transfer rate.
* src/DefaultBtInteractive.cc
* src/DefaultBtMessageDispatcher.cc
* src/DefaultPeerStorage.cc
* src/DefaultPeerStorage.h
* src/DownloadCommand.cc
* src/DownloadEngine.cc
* src/PeerStorage.h
* src/SegmentMan.cc
* src/SegmentMan.h
* test/MockPeerStorage.h
Added --index-out option to specify each file path for torrent.
Here index shown in --show-files option is used to specify which
file path should be altered. For example, to change the file
path with index=2, use --index-out=2=aria2.tar.bz2. You can use
this option multiple times: --index-out=1=aria2.tar.bz2
--index-out=2=aria2-opt.tar.bz2. The short hand form -O is also
available. This option can be specified in -i list.
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/MultiFileAllocationIterator.cc
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/Util.cc
* src/Util.h
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultBtContextTest.cc
* test/MultiDiskAdaptorTest.cc
* test/MultiFileAllocationIteratorTest.cc
* test/UtilTest.cc
Applied basename function to remove directory element in
content-disposition value.
Return empty string if content-disposition value is ".." or ".".
* src/Util.cc
* test/UtilTest.cc
Added --max-overall-download-limit option. Now
--max-upload-limit option is not ignored when
--max-overall-upload-limit option has non-zero value. aria2
checks download(upload) speed in the order:
first checks overall speed limit and if it is not exceeded, then
checks speed limit per download. Thus you can specify both
value. For example, set --max-overall-download-limit=1M and
--max-download-limit=500K to prevent from one download from
eating all overall speed limit.
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/DownloadCommand.cc
* src/DownloadCommand.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/PeerInteractionCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultBtMessageDispatcherTest.cc
Fixed the bug that disk writer is not created even if it shares
same piece with the preceding file if the length of previous
file is 0.
* src/MultiDiskAdaptor.cc
* test/MultiDiskAdaptorTest.cc
Added --http-auth-challenge option. If it is set to true(by
default), aria2 sends HTTP authorization header only when it is
requested by the server. If false is set, then authorization
header is always sent to the server. This is useful for servers
that don't respond 401 code when authentication is required.
There is an exception: if username and password are embedded in
URI, authorization header is always sent to the server
regardless of this option.
* src/AuthConfigFactory.cc
* src/HttpSkipResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/AuthConfigFactoryTest.cc
* test/HttpRequestTest.cc
Fixed the bug that adding 0 length filter to BitfieldMan filters
1 block. It should not filter anything.
* src/BitfieldMan.cc
* src/ConsoleStatCalc.cc
* test/BitfieldManTest.cc
Don't use Time::parse(buf, "%Y%m%d%H%M%S") because Mac OS X and
included strptime doesn't parse data for this format.
* src/FtpConnection.cc
* test/FtpConnectionTest.cc
Added OptionParser::parseArg() which internally uses getopt_long
to parse command-line options. All command-line options are now
configured by OptionHandler. No manual editing of struct option*
is required any more.
* src/NameMatchOptionHandler.h
* src/OptionHandler.h
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/OptionParser.cc
* src/OptionParser.h
* src/array_fun.h
* src/main.cc
* src/option_processing.cc
* test/OptionHandlerTest.cc
* test/OptionParserTest.cc
Fixed compile error when HAVE_EPOLL is not defined.
Fixed linker error on bigendian systems.
* src/SocketCore.cc
* src/SocketCore.h
* test/DefaultBtProgressInfoFileTest.cc
Added --bt-external-ip option. You can specify the external IP
address to report to a BitTorrent tracker. Although this
function is named 'external', it can accept any kind of IP
addresses.
* src/DefaultBtAnnounce.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultBtAnnounceTest.cc
Extracted the algorithm to find the longest incremental sequence
as max_sequence template.
* src/LongestSequencePieceSelector.cc
* src/a2algo.h
* test/Makefile.am
* test/a2algoTest.cc
Use LongestSequencePieceSelector for HTTP/FTP/BitTorrent
integrated downloads. This PieceSelector subclass finds the
longest continuous sequence in the available missing pieces and
selects the last index of such sequence. This makes HTTP/FTP
connections less interrupted by the pieces obtained by
BitTorrent peers.
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/LongestSequencePieceSelector.cc
* src/LongestSequencePieceSelector.h
* src/Makefile.am
* src/PieceSelector.h
* src/RarestPieceSelector.h
* src/RequestGroup.cc
* test/BtDependencyTest.cc
* test/DefaultPieceStorageTest.cc
* test/IteratableChecksumValidatorTest.cc
* test/LongestSequencePieceSelectorTest.cc
* test/Makefile.am
* test/SegmentManTest.cc
Send HTTP Authorization header only if it is requested by the
server(response 401). There are some exceptions. The
authorization header for proxy is always sent if it is available
without request by the server. If username/password is specified
in the URI, it is immediately sent to the server without
request by the server.
AbstractAuthResolver::_defaultAuthConfig is now initialized as
SharedHandle<AuthConfig>().
NetrcAuthResolver::resolveAuthConfig() returns
SharedHandle<AuthConfig>() if no AuthConfig is available.
* src/AbstractAuthResolver.cc
* src/AbstractProxyRequestCommand.cc
* src/AuthConfigFactory.cc
* src/AuthConfigFactory.h
* src/HttpConnection.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpResponse.cc
* src/HttpResponseCommand.cc
* src/HttpSkipResponseCommand.cc
* test/AuthConfigFactoryTest.cc
* test/HttpRequestTest.cc
* test/HttpResponseTest.cc
Added experimental built-in HTTP server. Currently, when a
client accesses to the server, it responds with the current
download progress. By default, it is disabled. To enable the
server, give --enable-http-server option. To change the default
port number for the server to listen to, use
--http-server-listen-port option.
The response HTML is very simple and refreshes it self each 1
second. Because of this refresh, you see flicker in normal web
browser such as Firefox. I recommend to use console-based
browser such as elinks, w3m. To connect to the server, run
'elinks http://localhost:6800/' while running aria2. Please
replace port number '6800'(which is default) with your
preference.
* src/DownloadEngineFactory.cc
* src/HttpHeader.cc
* src/HttpHeader.h
* src/HttpHeaderProcessor.cc
* src/HttpHeaderProcessor.h
* src/HttpListenCommand.cc
* src/HttpListenCommand.h
* src/HttpServer.cc
* src/HttpServer.h
* src/HttpServerCommand.cc
* src/HttpServerCommand.h
* src/HttpServerResponseCommand.cc
* src/HttpServerResponseCommand.h
* src/Makefile.am
* src/OptionHandlerFactory.cc
* src/Util.cc
* src/Util.h
* src/help_tags.h
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/HttpHeaderProcessorTest.cc
* test/UtilTest.cc
Added --bt-max-peers option to specify the maximum number of
peers per torrent. 0 means unlimited number of peers.
* src/ActivePeerConnectionCommand.cc
* src/BtRuntime.h
* src/DefaultPeerStorage.cc
* src/DefaultPeerStorage.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultPeerStorageTest.cc
Applied exit-status patch from Pascal Rigaux at Mandriva. aria2
now returns last error encountered in the HTTP/FTP downloads as
a exit status value. If all downloads finished successfully,
aria2 returns 0. The error code is defined in
src/DownloadResult.h.
The error occurred in the download currently in progress is not
reported as a last error. If no error has encountered but there
are in progress or waiting downloads, aria2 returns 7.
* src/AbstractCommand.cc
* src/DlAbortEx.h
* src/DlRetryEx.h
* src/DownloadCommand.cc
* src/DownloadFailureException.h
* src/DownloadResult.h
* src/FtpNegotiationCommand.cc
* src/HttpSkipResponseCommand.cc
* src/Makefile.am
* src/MultiUrlRequestInfo.cc
* src/MultiUrlRequestInfo.h
* src/RecoverableException.h
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/URIResult.cc
* src/URIResult.h
* src/main.cc
* src/option_processing.cc
* test/RequestGroupTest.cc
Applied AdaptiveURISelector patch from Aurelien Lefebvre. This
patch adds AdaptiveURISelector, which selects one of the bests
mirrors for first and reserved connections. For supplementary
ones, it returns mirrors which has not been tested yet, and if
each of them already tested, returns mirrors which has to be
tested again. Otherwise, it doesn't return anymore mirrors.
* src/AdaptiveURISelector.cc
* src/AdaptiveURISelector.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/Makefile.am
* src/Makefile.in
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/ServerStat.cc
* src/ServerStat.h
* src/ServerStatMan.cc
* src/SpeedCalc.cc
* src/URISelector.h
* src/prefs.cc
* src/prefs.h
* test/RequestGroupManTest.cc
* test/ServerStatManTest.cc
* test/ServerStatTest.cc
Fixed the bug that BitTorrent download doesn't finish when
REJECT message is received before CHOKE message. The old
implementation doen't clear the use-bit of the piece when
recieved REJECT message.
* src/DefaultBtMessageDispatcher.cc
* test/DefaultBtMessageDispatcherTest.cc
Fixed the cookie implementation based on RFC2965.
Now if a value in domain field is not started with dot, then
prepend dot. That means a cookie with domain=sf.net is sent to
wiki.sf.net.
* src/Cookie.cc
* test/CookieParserTest.cc
* test/CookieStorageTest.cc
* test/CookieTest.cc
* test/NsCookieParserTest.cc
* test/Sqlite3MozCookieParserTest.cc
Fixed the bug that causes corrupted downloads if HTTP pipelining
is enabled and the server doesn't support keep-alive.
* src/AbstractCommand.cc
* src/DownloadCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpDownloadCommand.h
* src/HttpResponseCommand.cc
* src/Request.cc
* src/Request.h
* test/RequestTest.cc
Fixed the bug that bad URI is sent to the tracker when the
announe URI in torrent file includes query.
* src/DefaultBtAnnounce.cc
* test/DefaultBtAnnounceTest.cc
Added Option::blank().
Use !Option::blank(name) instead of Option::defined(name) for
the options that take filename.
* src/MultiUrlRequestInfo.cc
* src/Option.cc
* src/Option.h
* src/main.cc
* src/option_processing.cc
* test/OptionTest.cc
Enabled --check-certificate by default. Added compile
time(configure) option --with-ca-bundle to specify CA bundle.
Warn if --check-certificate=true and --ca-certificate is not
specified or loading CA certificate is failed.
* configure.ac
* src/MultiUrlRequestInfo.cc
* src/OptionHandlerFactory.cc
* src/message.h
Applied aria2-1.0.1-mingw.patch.
Use SOCKET_ERRNO instead of errno if the code is used both linux
and mingw.
Collected 4th and 5th argument types for getsockopt and
setsockopt.
* src/SocketCore.cc
* src/a2netcompat.h
* test/SocketCoreTest.cc
Closed files after the test cases in MultiDiskWriterTest::
testResetDiskWriterEntries(). This will fix the unit test error
in mingw32 build.
* test/MultiDiskWriterTest.cc
Use HEAD method to get file size from HTTP server for segmented
downloading.
The request to the BitTorrent Tracker always uses GET method
because the response of the tracker is small and it doesn't need
segmented download.
* src/FtpNegotiationCommand.cc
* src/HttpRequest.cc
* src/HttpResponseCommand.cc
* src/HttpSkipResponseCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/TrackerWatcherCommand.cc
* test/HttpRequestTest.cc
Do not urlencode Request::url in setUrl() because we want
unmodified URL using Request::getUrl()
* src/Request.cc
* src/Request.h
* test/RequestTest.cc
Excluded testLoad_compat() and testLoad_nonBt_compat() when
compiled on big endian systems because test .aria2 files are
made for little endian systems.
* test/DefaultBtProgressInfoFileTest.cc
Instead of creating special filename in createDownloadResult()
if inMemoryDownload() is true, now it is done in getFilePath().
* src/RequestGroup.cc
* test/RequestGroupTest.cc