When --http-auth-challenge=true, aria2 only sends basic auth header
when requested. Old implementation sends basic auth header to service
operated in different port in successive request. This change avoid
this bug.
Link header fields from first Metalink server is utilized as described
in rfc6249. We only set digest from Digest header field to
DownloadContext only when PieceStorage is not initialized(in other
words, before file size is known). After PieceStorage is initialized,
Digest header field is used to check the value is the same in digest
in DownloadContext. Current implementation only handles
rel=duplicate.
RequestGroup holds a poitner to btRuntime_ and peerStorage_. After
removing them from BtRegistry, we failed to set 0 to them. When
program access them, it goes undefined world, such as random crash.
We found this bug when pasuing download and valgrind warned memory
corruption.
Because BitTorrent TCP server port is global configuration, it is not
preferable that per download resource BtRuntime holds it. We also
refactored and eliminated ugly static variable in PeerListenCommand.
If TCP port is necessary, we inject it to them directly.
Previous implementation does not store information which Command cuid
uses which Piece. Mark Piece acquired by SegmentMan by setting
Piece::setUsedBySegment(true).
This option pauses download after added. This option is effective only
when --enable-rpc=true is given. When --save-session option is used
and there are paused downloads, they are saved with --pause=true so
that it will become paused state when the session is recovered.
This option truncates console readout to fit in a single line. This
is default. Give false value to this option to tell aria2 not to
truncate console readout.
This option specifies piece selection algorithm used in HTTP/FTP
download. Piece means fixed length segment which is downloaded in
parallel in segmented download. If 'default' is given, aria2 selects
piece so that it reduces the number of establishing connection. This
is reasonable default behaviour because establishing connection is an
expensive operation. If 'inorder' is given, aria2 selects piece which
has minimum index. Index=0 means first of the file. This will be
useful to view movie while downloading it. --enable-http-pipelining
option may be useful to reduce reconnection overhead. Please note
that aria2 honors --min-split-size option, so it will be necessary to
specify a reasonable value to --min-split-size option.
We use SetFilePointerEx and SetEndOfFile to allocate extents. This
only works with NTFS. To enable this feature, --file-allocation=falloc
must be given.
+ DownloadFailureException.
Throwing DownloadFailureException may stop download unexpectedly when
--reuse-uri is false. Using CreateRequestCommand with STATUS_INACTIVE,
they can be executed next iteration with
DownloadEngine::setRefreshInterval(0).
The delay is caused because some Commands are only called in certain
interval(called refreshInterval, default, 1000ms). In aria2 download
stops when all Commands associated to it are stopped. Since some
Commands are called in each 1000ms by default, as mentioned before, we
have to wait for them. To fix this issue, we call
DownloadEngine::setRefreshInterval(0) when pausing/stopping downloads.
DownloadEngine::setRefreshInterval(0) makes refreshInterval 0 in one
shot.
When all segments are ignored, now DownloadFailureException is thrown.
And stop the download immediately. As described earlier, we call
DownloadEngine::setRefreshInterval(0) in catch block of
DownloadFailureException to eliminate delay.
--metalink-uri option specifies base URI to resolve relative URI in
metalink file stored in local disk. If URI points to a directory, URI
must end with '/'.
It seems that we have to specify the full path to cmd.exe in the first
argument of CreateProcess() to run batch file in proper manner. We
first determine the full path to cmd.exe. To do this, we get windir
environment variable and concatenate it with "\system32\cmd.exe".
If relative URI is found in Metalink file, aria2 resolves its full URI
contatenating the URI from which Metalink file is retrieved and
relative URI in Metalink file. This feature is not available if
Metalink file in local disk is specified in command line.
--enable-rpc and --rpc-* option instead.
--enable-xml-rpc and --xml-rpc-* option can be used but warning
message will be shown. The help tag #xml-rpc was replaced with #rpc.
time.
Checking serialized time does not work if you stop aria2 as soon as it
started DHT. The serialized time in dht.dat will be updated, but
buckets are not updated and still old. When you restart aria2 again,
it does not refresh buckets because serialized time is recent.
To eliminate unresponsive node, we have to contact them 5
times. Therefore the maximum number of retry is 10. It is very
annoying when it takes some time to get first peer, so retry quickly
(5 seconds delay).
--save-session file.
Uploaded data are saved as file named hex string of sha1 hash of
uploaded data plus extension(".torrent" for torrent and ".metalink"
for metalink). For example,
0a3893293e27ac0490424c06de4d09242215f0a6.torrent. The directory where
these files are saved is specified by --dir option. These file paths
are written in --save-session file.
get user's home directory in MinGW32 build.
Usually HOME environment variable is defined in *nix like OSes, but
not in Windows. So in MinGW32 build, if HOME is not defined, we also
look for USERPROFILE and the combination of HOMEDRIVE and HOMEPATH.
This option accepts comma separated list of DNS server address used in
asynchronous DNS resolver. Usually asynchronous DNS resolver reads DNS
server addresses from /etc/resolv.conf. When this option is used, it
uses DNS servers specified in this option instead of ones in
/etc/resolv.conf. You can specify both IPv4 and IPv6 address. This
option is useful when the system does not have /etc/resolv.conf and
user does not have the permission to create it.
Inside calculateStatistics(), global::wallclock is used and if
calculateStatistics() is called after waitData(), it may use quite old
global::wallclock value.
The method signature is aria2.removeDownloadResult(gid). This method
removes completed/error/removed download denoted by gid from
memory. This method returns "OK" for success.
This option was once existed in aria2 but erased on 2009-09-20. Now
it is resurrected once again. We choose 2 as default value, but there
is no good theory behind it. Now we retry HTTP download when remote
server returns 503 Service Unavailable if --retry-wait > 0. We also
added error code 29: HTTP_SERVICE_UNAVAILABLE.
after several pipelined requests.
We call Request::setMaxPipelinedRequest(1) if Connection: close is
received. Also call Request::supportsPersistentConnection(true) and
Request::setMaxPipelinedRequest(1) when closing the connection.
We introduced SocketRecvBuffer which buffers received bytes. Since
HTTP response header and response body are divided with \r\n, we have
to buffer up several bytes to find this delimiter. We use
SocketRecvBuffer to hold these bytes and only consumes header and
passes SocketRecvBuffer, which may contain head of response body, to
next Command. Since FTPConnection doesn't use SocketCore::peekData(),
we left it as is.
We simplified PeerConnection::receiveHandshake().
DefaultBtMessageReceiver and PeerReceiverHandshakeCommand look
PeerConnection's buffer and do NAT check handling themselves.
extension handshake with metadata size.
Peer must be marked as seeder only when client has not got metadata
yet. This bug causes aria2 shutdowns connection early when it gets
have message from a peer because it wrongly recognizes the peer as
seeder.
If we put #include <gettext.h> outside of #ifdef ENABLE_NLS and
--disable-nls is used, gettext(msgid) is defined as ((const char *)
(Msgid)). System header includes libintl.h regardless of
--disable-nls. For example, #include <string> will include libintl.h
through include chain. Since libintl.h refers gettext and it is
defined as non-function form, this causes compile error. User reported
gcc-4.2.2 has this problem. But gcc-4.4.5 does not suffer from this
problem.
DownloadEngine::onEndOfRun() to process RequestGroup objects currently
in-progress.
With this change, --on-download-stop/error/complete hooks are properly
called for in-progress downloads when Ctrl-C is pressed.
We added 2 macros A2_TEST_DIR and A2_TEST_OUT_DIR to pass tests in
`make distcheck`. A2_TEST_DIR refers to test directory. All output
files by unit tests are now created under A2_TEST_OUT_DIR directory.
createInitialCommand().
This makes groupToAdd be processed by removeStoppedGroup() and
--on-download-error hook is properly triggered. Now
--on-download-start is also triggered for groupToAdd even if exception
is thrown in createInitialCommand().
Removed MultiDiskAdaptor::mkdir() because directory structure is
created at AbstractDiskWriter::createFile().
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
Made strings which are only used in comparison plain C strings.
* src/HttpHeader.cc
* src/HttpHeader.h
* src/Netrc.cc
* src/Netrc.h
* test/HttpHeaderTest.cc
Cleaned up Possible Values in usage help. More than 2 values are
delimited by ", ".
* src/NameMatchOptionHandler.h
* src/OptionHandler.cc
* src/OptionHandler.h
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.cc
* test/OptionHandlerTest.cc
Made --allow-overwrite, --allow-piece-length-change,
--realtime-chunk-checksum and --bt-require-crypto take optional
argument. Fixed usage doc for --metalink-enable-unique-protocol.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
* src/usage_text.h
Added BtSeederStateChoke::PeerEntry::swap(). Also added
non-member swap for it, which is friend function for
BtSeederStateChoke because PeerEntry is private.
* src/BtSeederStateChoke.cc
* src/BtSeederStateChoke.h
Added BtLeecherStateChoke::PeerEntry::swap(). Also added
non-member swap for it, which is friend function for
BtLeecherStateChoke because PeerEntry is private.
* src/BtLeecherStateChoke.cc
* src/BtLeecherStateChoke.h
Made LogFactory::logger_ as SharedHandle<Logger> to make dtor of
Logger called at the program exit. Rewritten A2_LOG_* macro and
moved them to LogFactory.h
* src/LogFactory.cc
* src/LogFactory.h
* src/Logger.cc
* src/Logger.h
Added .cc file for classes/structs that only provided by header
file. Defined non-POD classes' ctor, dtor in .cc file. Moved
implementation code in header file to .cc file for major
classes/strucsts.
Removed SharedHandle::isNull(). Instead we added operator* and
operator unspecified_bool_type. Removed use of WeakHandle and
replaced with raw pointer.
Return empty range if byte-range-resp-spec or instance-length is
"*" in Content-Range header to prevent aria2 from emitting error
failing to convert "*" to a integer.
* src/HttpHeader.cc
* test/HttpHeaderTest.cc
Fixed the bug that dht.dat file could not be saved. This is
because a directory denoting temporary file path is wrongly
created and thus aria2 fails to open the file as regular file.
* src/DHTAutoSaveCommand.cc
Don't reuse socket which is readable because we assume that if
socket is readable it means peer shutdowns connection and the
socket will receive EOF. Added default timeout value to
DownloadEngine::poolSocket().
* src/DownloadEngine.cc
* src/DownloadEngine.h
Use RFC1123 date format in debug log of MDTM response and
last-modified time and creation date of .torrent file printed
using -S.
* src/FtpNegotiationCommand.cc
* src/RequestGroup.cc
* src/bittorrent_helper.cc
Don't append slash in CookieStorage::criteriaFind(). Append file
part of URI to request-uri in HttpRequest::createRequest(). This
change reverts the part of the previous change:"The
request-path must be ends with '/' so that request-path '/foo/'
path-matches cookie-path '/foo' and '/foo/' in the proposed
algorithm."
* src/CookieStorage.cc
* src/HttpRequest.cc
Supported ANSI C's asctime() format in Time::parseHTTPDate().
Added Time::parseAsctime(). Changed order of application of parse
functions. I could not remember why parseRFC850() was tried first.
* src/TimeA2.cc
* src/TimeA2.h
* test/TimeTest.cc
Use inet_ntoa if inet_ntop is not available. Since inet_ntoa does
not handle IPv6 address, IPv6 support is limited in this
case. Fixed unit test error under mingw32.
* configure.ac
* src/AsyncNameResolver.cc
* src/SocketCore.cc
* src/bittorrent_helper.cc
* test/BittorrentHelperTest.cc
* test/DHTMessageFactoryImplTest.cc
* test/DHTRoutingTableDeserializerTest.cc
* test/DHTRoutingTableSerializerTest.cc
* test/DefaultBtAnnounceTest.cc
* test/Metalink2RequestGroupTest.cc
* test/UTPexExtensionMessageTest.cc
Reverted the previous change in src/MultiUrlRequestInfo.cc.
Change log level of warning message about CA certificates to info.
* src/MultiUrlRequestInfo.cc
Removed warning message when CA certificates are not imported.
--ca-certificate and --check-certificate option were added to the
error message displayed when certificate verification failed.
* src/MultiUrlRequestInfo.cc
* src/message.h
Fixed compile error on OpenBSD4.7(i386). In openssl.m4, we first
search libcrypto and then libssl because libssl depends on
libcrypto on OpenBSD.
* src/Netrc.cc
* src/Netrc.h
* src/Triplet.h
* src/openssl.m4
Fixed the bug that FtpFinishDownloadCommand does not handle
timeout. This means it waits for the remote server to send "226
Transfer Complete" message *without* its own timeout until the
remote server shutdowns connection(we can detect EOF in this
case).
* src/AbstractCommand.h
* src/FtpFinishDownloadCommand.cc
Rewritten util::escapePath(). Now it does not replace bad chars:it
performs percent-encode against them. util::fixTaintedBasename()
now replaces "/" with "%2F". Added 0x7f as bad chars in
util::detectDirTraversal().
* src/util.cc
* test/UtilTest.cc
Non-UTF8 filenames are now percent-encoded. For example, filename
for http://example.org/%90%A2%8AE will be %90%A2%8AE because it is
Shift_JIS. The comments and name in .torrent file in XML-RPC
response are percent-encoded if they are not UTF-8.
* src/FtpNegotiationCommand.cc
* src/HttpRequestCommand.cc
* src/HttpResponseCommand.cc
* src/XmlRpcMethodImpl.cc
* src/bittorrent_helper.cc
* src/util.cc
* src/util.h
* test/BittorrentHelperTest.cc
* test/UtilTest.cc
Sort usedHosts by least used and faster download speed.
* src/Makefile.am
* src/RequestGroupMan.cc
* src/Triplet.h
* test/Makefile.am
* test/TripletTest.cc
Reset download start time of PeerStat because it is started before
file allocation begins. Without reset, we have incorrect download
time and aria2 wrongly determines that download speed is too low
if --lowest-speed-limit is used.
* src/StreamFileAllocationEntry.cc
Added keys parameter to aria2.tellStatus, aria2.tellActive,
aria2.tellWaiting and aria2.tellStopped XML-RPC method. 'keys' is
array of string. If it is specified, the response contains only
keys in 'keys' array. If 'keys' is empty or not specified, the
response contains all keys. This is useful when you just want
specific keys and avoid unnecessary transfers. For example,
*aria2.tellStatus*("1", ["gid", "status"]) returns 'gid' and
'status' key. Made get*Param() functions XmlRpcRequest's
methods and changed portions of the code that were affected by
this change.
* doc/aria2c.1.txt
* src/Makefile.am
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* src/XmlRpcRequest.cc
* src/XmlRpcRequest.h
* test/XmlRpcMethodTest.cc
Fixed the bug that a file gets overwritten if -V is given and no
hash is provided. Fixed the bug that --dry-run leads download
error. Added RequestGroup::createCheckIntegrityEntry() which
correctly creates CheckIntegrityEntry objects and open files based
on -V option and the existence of control file.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/ChecksumCheckIntegrityEntry.cc
* src/DownloadContext.cc
* src/DownloadContext.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/PieceHashCheckIntegrityEntry.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupEntry.cc
* src/RequestGroupEntry.h
Added short option -k for --min-split-size option and -x for
--max-connection-per-server option. Raised maximum value of
--max-connection-per-server up to 16.
* src/OptionHandlerFactory.cc
* src/usage_text.h
Use uri::parse instead of Request::setUri() where just URI parser
is needed.
* src/AbstractCommand.cc
* src/AdaptiveURISelector.cc
* src/DefaultBtAnnounce.cc
* src/FeedbackURISelector.cc
* src/FileEntry.cc
* src/HttpResponseCommand.cc
* src/ProtocolDetector.cc
* src/Request.cc
* src/RequestGroupMan.cc
Moved URI parser code to uri.h, uri.cc to provide fast URI parser
without Request object initialization.
* src/Makefile.am
* src/Request.cc
* src/uri.cc
* src/uri.h
* test/Makefile.am
* test/RequestTest.cc
* test/UriTest.cc
Added --max-download-result=NUM option. This option sets maximum
number of download result kept in memory. The download results are
completed/error/ removed downloads. The download results are
stored in FIFO queue and it can store at most NUM download
results. When queue is full and new download result is created,
oldest download result is removed from the front of the queue and
new one is pushed to the back. Setting big number in this option
may result high memory consumption after thousands of
downloads. Specifying 0 means no download result is kept. Default
value is 1000.
* src/OptionHandlerFactory.cc
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Check hash(hash for entire file, not piece hash) if
--check-integrity option is given and file is
downloaded(determined by file length). If it fails, re-download
file.
* src/AbstractCommand.cc
* src/ChecksumCheckIntegrityEntry.cc
* src/ChecksumCheckIntegrityEntry.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/RequestGroup.cc
Moved connectedHostname, connectedAddr and connectedPort to
Request object. Mark cached IP address bad on timeout to allow
aria2 to renew IP address cache.
* src/AbstractCommand.cc
* src/AbstractProxyRequestCommand.cc
* src/AbstractProxyRequestCommand.h
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/HttpInitiateConnectionCommand.cc
* src/HttpRequestCommand.cc
* src/HttpRequestCommand.h
* src/InitiateConnectionCommand.cc
* src/InitiateConnectionCommand.h
* src/Request.cc
* src/Request.h
Fixed the bug that aria2 reports error and exits with non-zero
status when file is already downloaded.
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/RequestGroup.cc
Allow '@' in username and password embedded in URI. It should be
percent-encoded but many people use their mail address as an
username and forget about PE.
* src/Request.cc
* test/RequestTest.cc
Added a sets of overloaded functions for
PieceStorage::getMissingPiece() and getMissingFastPiece() to get
multiple pieces more efficiently.
* src/DefaultBtInteractive.cc
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.cc
* src/UnknownLengthPieceStorage.h
* test/DefaultPieceStorageTest.cc
* test/MockPieceStorage.h
Don't listen on IPv6 socket for BitTorrent, DHT, XML-RPC if
--disable-ipv6 is true.
* src/BtSetup.cc
* src/DownloadEngineFactory.cc
* src/RequestGroup.cc
Enter end game mode as soon as all pieces are assigned to peer to
avoid substantial slow down at the very last stage of download.
* src/DefaultBtInteractive.cc
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.h
* test/MockPieceStorage.h
Added --bt-tracker and --bt-exclude-tracker option. In
--bt-tracker option, you can specify comma separated list of
additional BitTorrent tracker's announce URI. These URIs are not
affected by --bt-exclude-tracker option because they are added
after URIs in --bt-exclude-tracker option are removed. In
--bt-exclude-tracker option, you can specify comma separated list
of BitTorrent tracker's announce URI to remove. You can use
special value '*' which matches all URIs, thus removes all
announce URIs. When specifying '*' in shell command-line, don't
forget to escape or quote it.
* src/BtDependency.cc
* src/OptionHandlerFactory.cc
* src/UTMetadataPostDownloadHandler.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* src/download_helper.cc
* src/download_helper.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/BittorrentHelperTest.cc
* test/DownloadHelperTest.cc
Added --enable-async-dns6 option. This option enables IPv6 name
resolution in asynchronous DNS resolver. This option will be
ignored when --async-dns=false.
* doc/aria2c.1.txt
* src/AbstractCommand.cc
* src/AsyncNameResolver.cc
* src/AsyncNameResolver.h
* src/DHTEntryPointNameResolveCommand.cc
* src/OptionHandlerFactory.cc
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Added FTP EPSV and EPRT command support. aria2 issues these
commands when address family of local socket is AF_INET6.
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/SocketCore.cc
* src/SocketCore.h
* test/FtpConnectionTest.cc
Fixed the bug that if hostname is numeric,
AbstractCommand::resolveHostname() does not add its address to
given addrs. This makes pooled socket is not used for that
address.
* src/AbstractCommand.cc
Set milliseconds in DownloadEngine::refreshInterval_. Because
there is difference in accuracy between epoll and clock_gettime(),
we set DEFAULT_REFRESH_INTERVAL 900ms just lower than default
timeout 1 sec for epoll. Also set update interval of
ConsoleStatCalc to 900ms by the same reason.
* src/ConsoleStatCalc.cc
* src/DownloadEngine.cc
* src/DownloadEngine.h
Added max-connection-per-server, min-split-size and
conditional-get option to -i list option and aria2rpc.
* doc/aria2c.1.txt
* doc/xmlrpc/aria2rpc
* src/download_helper.cc
Count the number of command used in HTTP(S)/FTP and the number of
connections in HTTP(S)/FTP independently. The former is used to
determin whether additional command is needed. The latter is used
to report user to how many connections are used in a download.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/CreateRequestCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
Added --on-bt-download-complete=COMMAND option. For BitTorrent, a
command specified in --on-download-complete is called when
download completes and seeding is over. On the other hand, this
option set the command to be executed when download completes but
before seeding.
* doc/aria2c.1.txt
* src/DefaultPieceStorage.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* src/util.cc
* src/util.h
Added --conditional-get option. Download file only when the local
file is older than remote file. This function only works with
HTTP(S) downloads only. It does not work if file size is specified
in Metalink. It also ignores Content-Disposition header. If a
control file exists, this option will be ignored. This function
uses If-Modified-Since header to get only newer file
conditionally. When getting modification time of local file, it
uses user supplied filename(see --out option) or filename part in
URI if --out is not specified.
* doc/aria2c.1.txt
* src/HttpHeader.cc
* src/HttpHeader.h
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/HttpResponse.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/TimeA2.cc
* src/TimeA2.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/HttpResponseTest.cc
* test/TimeTest.cc
Added --min-split-size=SIZE option. aria2 does not split less
than 2*SIZE byte range. For example, let's consider downloading
20MiB file. If SIZE is 10M, aria2 can split file into 2 range
[0-10MiB) and [10MiB-20MiB) and download it using 2 sources(if
--split >= 2, of course). If SIZE is 15M, since 2*15M > 20MiB,
aria2 does not split file and download it using 1 source.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/BitfieldManTest.cc
* test/SegmentManTest.cc
FeedbackURISelector now tries to chooses URI which is not used in
aria2 globally. If it is possible, it may return used URI.
* src/AdaptiveURISelector.cc
* src/AdaptiveURISelector.h
* src/CreateRequestCommand.cc
* src/FeedbackURISelector.cc
* src/FeedbackURISelector.h
* src/FileEntry.cc
* src/FileEntry.h
* src/InOrderURISelector.cc
* src/InOrderURISelector.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/URISelector.h
* test/FeedbackURISelectorTest.cc
* test/InOrderURISelectorTest.cc
Added --max-connection-per-server=NUM option. The default value of
NUM is 1. This option limits the number of connections allowed to
one server for each download. This means when NUM is 2 and 1 URI
is provided, even if you specified -s 5, aria2 establishes 2
connections. Default value of -j option is changed from 5 to 2.
* src/BtDependency.cc
* src/CreateRequestCommand.cc
* src/FileEntry.cc
* src/FileEntry.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/Metalink2RequestGroup.cc
* src/OptionHandlerFactory.cc
* src/TrackerWatcherCommand.cc
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DownloadHelperTest.cc
* test/FileEntryTest.cc
Set end byte in Range header if start byte > 0 to get more chance
to pool socket.
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/DownloadCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.h
* test/DefaultPieceStorageTest.cc
* test/HttpRequestTest.cc
* test/MockPieceStorage.h
Fixed the bug that segments are not filled to
Request::getMaxPipelinedRequest().
Make sure that trailing data of transfer encoding is read propery,
after file data is received.
* src/AbstractCommand.cc
* src/DownloadCommand.cc
* src/DownloadCommand.h
* src/FtpDownloadCommand.cc
* src/FtpDownloadCommand.h
* src/HttpDownloadCommand.cc
* src/HttpDownloadCommand.h
Fixed the bug that DownloadContext::resetDownloadStartTime() never
be called in downloads whose total length is unknown. This causes
avg speed in Download Results is always 0 for these downloads.
* src/RequestGroup.cc
* src/BtFileAllocationEntry.cc
* src/StreamFileAllocationEntry.cc
Fixed the bug that AdaptiveFileAllocationIterator::finished()
returns false even if offset_ >= totalLength_. This causes
ftruncate error for seeding torrents.
* src/AdaptiveFileAllocationIterator.cc
Send each CWD component of FTP URI in separate CWD command as
described in RFC1738.
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* test/FtpConnectionTest.cc
Fixed the bug that aria2 cannot handle %2F in FTP URI properly.
If directory component starts with %2F which percent-encode of
'/', client should issue CWD to absolute path, but aria2 does not
do that. It just issues relative path and download fails.
* src/FtpConnection.cc
* test/FtpConnectionTest.cc
When allocating disk space, for Linux system with fallocate()
system call, first check file system supports fallocate. This
just run fallocate with small chunk and see it succeeds or fails.
If it succeeds, use fallocate() to allocate entire file otherwise
fall back to traditional slower method: writing zeros. This
behavior is enabled in --file-allocation=prealloc, so this is
enabled by default for most modern Linux.
* configure.ac
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/AdaptiveFileAllocationIterator.cc
* src/AdaptiveFileAllocationIterator.h
* src/DefaultPieceStorage.cc
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/FallocFileAllocationIterator.cc
* src/Makefile.am
* src/MultiFileAllocationIterator.cc
* src/OptionHandlerFactory.cc
* test/FallocFileAllocationIteratorTest.cc
* test/Makefile.am
Run whole checksum check when download file name and size are
determined and download is already completed. Related to r2221.
Guarded ENABLE_MESSAGE_DIGEST where necessary.
* src/AbstractCommand.cc
* src/RequestGroup.cc
* src/message.h
Fixed that bug that when aria2 is stopped before whole hash
check(not piece hash check) is done, aria2 reports its file is
downloaded successfully. It should report the download is
in-progress and next invocation of aria2 should check hash.
* src/ChecksumCheckIntegrityEntry.cc
* src/DownloadCommand.cc
* src/DownloadContext.cc
* src/DownloadContext.h
* src/RequestGroup.cc
* src/RequestGroupMan.cc
Fixed the bug that corrups file if segment returned from
SegmetnMan::getCleanSegmentIfOwnerIsIdle() has writtenLength > 0.
* src/DownloadCommand.cc
* src/SegmentMan.cc
* src/SegmentMan.h
* test/SegmentManTest.cc
When wrong type DHT reply message is received for a transaction
ID, assume the message timed out.
* src/DHTNodeLookupTaskCallback.cc
* src/DHTNodeLookupTaskCallback.h
* src/DHTPeerLookupTaskCallback.cc
* src/DHTPeerLookupTaskCallback.h
* src/DHTPingReplyMessageCallback.h
Use auto_delete_container to delete created Command when exception
is thrown rather than deleting them in catch block.
* src/AbstractCommand.cc
* src/CheckIntegrityCommand.cc
* src/DHTSetup.cc
* src/FileAllocationCommand.cc
* src/TrackerWatcherCommand.cc
* src/a2functional.h
Made public member variable in Metalinker private
* src/MetalinkParserController.cc
* src/Metalinker.cc
* src/Metalinker.h
* test/MetalinkParserControllerTest.cc
* test/MetalinkProcessorTest.cc
* test/MetalinkerTest.cc
Fixed the bug that reading Metalink from pipe fails on older
libxml2. It only accepts "-" as a special keyword to read stdin.
* src/XML2SAXMetalinkProcessor.cc
Don't throw exception when Metalink document is empty(no file
element). It is a valid Metalink document anyway.
* src/MetalinkHelper.cc
* src/download_helper.cc
Fixed double memory free when Exception raised from
AbstractCommand::prepareForNextAction() called by
HttpResponseCommand::handleDefaultEncoding().
* src/AbstractCommand.cc
* src/HttpResponseCommand.cc
Fixed the bug that feeding Metalink XML via pipe (-M- option) does
not work when aria2 is built with expat. Fixed the bug that when
Metalink XML is fed via pipe and --save-session is used, entry
"/dev/stdin" is saved in session file.
* src/ExpatMetalinkProcessor.cc
* src/ExpatMetalinkProcessor.h
* src/Metalink2RequestGroup.cc
Fixed the bug that connection pooling does not take into account
proxy. This means that when connection A via proxy X is pooled,
it will be wrongly reused in the download using proxy Y.
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpResponseCommand.cc
* src/HttpSkipResponseCommand.cc
Fixed the bug that FTP download may fail when control connection
is reused. This happens because FTP server can offer different
root directory for different account. If pooled connections has
different root directory, then download will fail.
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
Store both whole checksum and piece hash in metalink file.
Dispatch whole checksum verification only when piece hash is not
set.
* src/DownloadCommand.cc
* src/Metalink2RequestGroup.cc
* test/Metalink2RequestGroupTest.cc
Left only IANA hash function textual name in messageDigest.cc.
Assign only IANA hash function textual name to Checksum and
ChunkChecksum. Fixed the value of MessageDigestContext::MD5.
* src/Checksum.h
* src/MetalinkParserController.cc
* src/messageDigest.cc
* src/messageDigest.h
* test/IteratableChecksumValidatorTest.cc
* test/IteratableChunkChecksumValidatorTest.cc
* test/MessageDigestHelperTest.cc
* test/Metalink2RequestGroupTest.cc
* test/MetalinkProcessorTest.cc
Fixed the bug that name attribute of file element in Metalink file
is not properly sanitized.
* src/Metalink2RequestGroup.cc
* src/MetalinkParserController.cc
* test/Makefile.am
* test/Metalink2RequestGroupTest.cc
* test/metalink4-dosdirtraversal.xml
Print warning when trying to add file descriptor >= FD_SET or < 0
to fd_set for other than MinGW32 build. For MinGW32 build, print
warning when trying to add file descriptor to fd_set when it
already contains FD_SET file descriptors.
* src/SelectEventPoll.cc
* src/SocketCore.cc
In SocketCore::isReadable()/isWritable(), use poll() if it is
available otherwise use select(). Removed epoll/port from there
because poll() does the good enough job for single socket event
notification.
* src/SocketCore.cc
* src/SocketCore.h
* src/main.cc
Supported poll() for socket event notification. --event-poll can
take value "poll". Fixed the bug that timeout for
SocketCore::isReadable()/isWritable() is ignored when epoll is
used.
* src/OptionHandlerFactory.cc
* src/a2io.h
* src/prefs.h
* src/SocketCore.h
* src/Makefile.am
* src/main.cc
* src/PollEventPoll.h
* src/SocketCore.cc
* src/DownloadEngineFactory.cc
* src/PollEventPoll.cc
* src/prefs.cc
* configure.ac
Implemented clock_gettime() using mach_absolute_time in Mac OS X.
* configure.ac
* src/Makefile.am
* src/a2time.h
* src/clock_gettime_osx.cc
* src/clock_gettime_osx.h
Hold reference to PieceStorage when paused in order to provide
progress information via XML-RPC.
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
Fixed the bug that hash check hangs when aria2.pause is issued
while aria2 is checking piece hashes. Fixed the bug that the
download is paused after file allocation completion even if
aria2.pause is issued during file allocation.
* src/CheckIntegrityCommand.cc
* src/FileAllocationCommand.cc
Added aria2.pause and aria2.unpause XML-RPC method. aria2.pause
pauses the download denoted by gid. gid is of type string. The
status of paused download becomes "paused" and the download is
placed on the first position of waiting queue. As long as the
status is "paused", the download is not started. To change status
to "waiting", use aria2.unpause method. This method returns GID of
paused download. aria2.unpause changes the status of the download
denoted by gid from "paused" to "waiting". This makes the download
eligible to restart. gid is of type string. This method returns
GID of unpaused download.
* doc/aria2c.1.txt
* src/DownloadContext.cc
* src/FileEntry.cc
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed the bug that FTP data connection is not established via
proxy when --ftp-proxy is defined and --ftp-pasv=true and
--proxy-method=tunnel.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/InitiateConnectionCommand.cc
Fixed the bug that web-seed URI is not percent-encoded.
* src/a2functional.h
* src/bittorrent_helper.cc
* test/BittorrentHelperTest.cc
* test/url-list-multiFile.torrent
* test/url-list-singleFileEndsWithSlash.torrent
Added aria2.shutdown and aria2.forceShutdown XML-RPC method.
These methods, as their name implies, shutdown aria2. These
methods are useful for Windows because it lacks signal mechanism.
* doc/aria2c.1.txt
* src/TimedHaltCommand.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Don't send "Accept: default, gzip" by default. This is because
some server responds with "Content-Encoding: gzip" for files which
itself is gzipped file and aria2 inflates them. This is a problem
if user don't want to inflate the file. Apparently this is server
configuration error, but I cannot do anything about this. So turn
this off. Added --http-accept-gzip option. If true is given to
this option, aria2 sends 'Accept: deflate, gzip' request header
and inflates response if remote server responds with
'Content-Encoding: gzip' or 'Content-Encoding: deflate'. This
indicates we removed extension tgz hack in order not to inflate
files with tgz extensions.
* doc/aria2c.1.txt
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/HttpRequestTest.cc
Made aria2 not send
"application/metalink4+xml,application/metalink+xml" in Accept
header for web-seeding URIs and tracker request.
* src/Metalink2RequestGroup.cc
* src/TrackerWatcherCommand.cc
* src/download_helper.cc
* src/util.cc
* src/util.h
Fixed the bug that waiting download unintentionally starts when
URIs are added to it using aria2.changeUri XML-RPC method. This
also fixes the bug that causes segmentation fault when adding URIs
to waiting download, which is a regression introduced by the
previous change made to src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.cc
Fixed the bug that added URI using aria2.changeUri XML-RPC method
is not used immediately if there is no URIs remaining before
calling aria2.changeUri and the number of connection is less than
the value in -s(or -C for Metalink downloads).
* src/XmlRpcMethodImpl.cc
Documented --always-resume and --max-resume-failure-tries option
and exit status 8 in man page. Fixed typo.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
Added --always-resume and --max-resume-failure-tries option. If
--always-resume=false is given, when all given URIs does not
support resume or aria2 encounters N URIs which does not support
resume
(N is the value specified using --max-resume-failure-tries
option), aria2 download file from scratch. The default behavior
is --always-resume=true, which means if all URIs do not support
resume, download fails. I think this is OK because user normally
don't like to see that partially downloaded file is
overwritten(this is particularly true if file size is big). This
option is useful when aria2 is used as download backend and
graceful falling back to overwritten behavior is preferable.
Added exit status value 8, which means download failed because
server did not support resume.
* src/AbstractCommand.cc
* src/DefaultPieceStorage.cc
* src/DownloadCommand.cc
* src/DownloadResultCode.h
* src/FileEntry.h
* src/FtpNegotiationCommand.cc
* src/HttpResponse.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/SegmentMan.cc
* src/SegmentMan.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultPieceStorageTest.cc
* test/SegmentManTest.cc
Added --remove-control-file option. This option removes control
file(*.aria2 file) before download. Using with
--allow-overwrite=true, download always starts from scratch. This
will be useful for users behind proxy server which disables
resume. For such proxy user, -C1 is also recommended for Metalink
downloads to avoid establishing unnecessary connections.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed the bug that socket is added to EventPoll object twice. This
is because derived class FtpFinishDownloadCommand adds socket to
EventPoll object while base class AbstractCommand does that
already.
* src/FtpFinishDownloadCommand.cc
* src/FtpFinishDownloadCommand.h
Added v key in DHT message. aria2's DHT version is independent of
the package version and we defined it as 1 at the moment. It is
defined as DHT_VERSION in src/DHTConstants.h. aria2's DHT version
scheme is "A2"+2bytes DHT version number in network byte order.
* src/DHTAbstractMessage.cc
* src/DHTConstants.h
* src/DHTMessage.cc
* src/DHTMessage.h
* src/DHTMessageFactoryImpl.cc
* src/DHTQueryMessage.cc
* src/DHTResponseMessage.cc
* src/util.h
* test/DHTAnnouncePeerMessageTest.cc
* test/DHTAnnouncePeerReplyMessageTest.cc
* test/DHTFindNodeMessageTest.cc
* test/DHTFindNodeReplyMessageTest.cc
* test/DHTGetPeersMessageTest.cc
* test/DHTGetPeersReplyMessageTest.cc
* test/DHTPingMessageTest.cc
* test/DHTPingReplyMessageTest.cc
Fixed the bug that value of numSeeders in aria2.tellStatus XML-RPC
method response is integer, while manual says it is string. When
peer's port is not listening port, set '0' to port in
aria2.getPeers response.
* src/XmlRpcMethodImpl.cc
Lines starting "#" in -i list are treated as comments.
Example:
# this is comment
http://example.org/filehttp://example.org/file2
dir=/tmp
# another comment
out=myfile
* doc/aria2c.1.txt
* src/UriListParser.cc
* test/filelist1.txt
Accept IPv4 network address with CIDR block in --no-proxy option
and no_proxy environment variable. Current implementation does
not resolve hostname in URI to compare network address. So it is
only effecive if URI has numeric IP addresses.
* doc/aria2c.1.txt
* src/AbstractCommand.cc
* src/OptionHandlerFactory.cc
* src/bitfield.h
* src/usage_text.h
* src/util.cc
* src/util.h
* test/UtilTest.cc
* test/bitfieldTest.cc
Few adjustment for timeouts in DHT. DHT message timeout is changed
from 15 to 10. The interval of PeerLookup is first 5 seconds and
it adds another 5 seconds in each retry.
* src/DHTConstants.h
* src/DHTGetPeersCommand.cc
* src/DHTGetPeersCommand.h
Fixed the bug that FillRequestGroupCommand is not invoked when
RequestGroupMan::createInitialCommand() creates no Command object.
* src/FillRequestGroupCommand.cc
* src/RequestGroupMan.cc
Call RequestGroupMan::requestQueueCheck() when
max-concurrent-downloads option is changed or new downloads are
added/inserted into reserved list.
* src/RequestGroupMan.cc
* src/XmlRpcMethodImpl.cc
Create CreateRequestCommand to the number of -s/-C when URIs are
added by XML-RPC.
* src/RequestGroup.cc
* src/RequestGroup.h
* src/XmlRpcMethodImpl.cc
Fixed memory leak in SocketBuffer when _bufq is not empty when
SocketBuffer is deleted. Added BufEntry constructor and deleted
static factory functions.
* src/SocketBuffer.cc
* src/SocketBuffer.h
Only execute RequestGroupMan::fillRequestGroupFromReserver() when
queue maintenance is requested by RequestGroup to avoid to call
the function unnecessarily.
* src/FillRequestGroupCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
Rewritten SocketBuffer. Old implementation uses single std::string
to store data and erase sent data, which is costly. New
implementation uses deque to hold each data to avoid to mutate
string.
* src/SocketBuffer.cc
* src/SocketBuffer.h
Avoid to calculate end() iterator in each loop. std::deque is
particularly slow. Make sure that recalculate end iterator if
element is erased during loop.
Fixed the bug that grouped FileEntry objects are not used but
instead all FileEntry objects are used for each metaurl group.
* src/Metalink2RequestGroup.cc
* test/Metalink2RequestGroupTest.cc
* test/metalink4-groupbymetaurl.xml
Replaced null or control characters in file path with '_'. For
MinGW32 build, additional characters which is not allowed in
Windows kernel are also replaced. util::detectDirTraversal() now
returns true if given string contains null or control characters.
* src/DownloadContext.cc
* src/DownloadContext.h
* src/Metalink2RequestGroup.cc
* src/MetalinkParserController.cc
* src/bittorrent_helper.cc
* src/util.cc
* src/util.h
* test/UtilTest.cc
Discard metalink:file if its name attribute is empty string.
Removed FileEntry instantiation in
MetalinkParserController::setFileLengthOfEntry()
* src/MetalinkParserController.cc
* src/MetalinkParserStateV3Impl.cc
* src/MetalinkParserStateV4Impl.cc
Discard torrent file if path data in it contains directory
traversal directives. Discard metalink:file element in Metalink3
format if its name attribute contains directory traversal
directives. Ignore name attribute of metalink:signature element
in Metalink3 format if it contains directory traversal directives.
* src/MetalinkParserStateV3Impl.cc
* src/bittorrent_helper.cc
* src/message.h
* test/BittorrentHelperTest.cc
* test/Makefile.am
* test/MetalinkProcessorTest.cc
* test/metalink3-dirtraversal.xml
* test/test.xml
Store name attribute of metalink:metaurl element in MetalinkMetaurl.
* src/MetalinkMetaurl.h
* src/MetalinkParserController.cc
* src/MetalinkParserController.h
* src/MetalinkParserStateMachine.cc
* src/MetalinkParserStateMachine.h
* src/MetalinkParserStateV4Impl.cc
* test/MetalinkProcessorTest.cc
* test/metalink4-dirtraversal.xml
Added aiFlags argument to getInterfaceAddress(). Use
AI_NUMERICHOST to find interface specified using
--bt-lpd-interface option to avoid time-consuming address lookup.
* src/BtSetup.cc
* src/SocketCore.cc
* src/SocketCore.h
Return SharedHandle<LpdMessage>(new LpdMessage()) if received data
is bad in LpdMessageReceiver.
* src/LpdMessage.h
* src/LpdMessageReceiver.cc
* src/LpdMessageReceiver.h
* src/LpdReceiveMessageCommand.cc
* test/LpdMessageReceiverTest.cc
Added --bt-lpd-interface option to specify the interface to use
for Local Peer Discovery. LpdMessageDispatcher object now has its
own socket. LpdMessageReceiver's socket is binded to multicast
address to only receive multicast packets.
* src/BtSetup.cc
* src/LpdMessageDispatcher.cc
* src/LpdMessageDispatcher.h
* src/LpdMessageReceiver.cc
* src/LpdMessageReceiver.h
* src/LpdReceiveMessageCommand.cc
* src/LpdReceiveMessageCommand.h
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/LpdMessageDispatcherTest.cc
* test/LpdMessageReceiverTest.cc
Put the portion of code to get interface addresses in
SocketCore::bindAddress() into newly added getInterfaceAddress().
* src/SocketCore.cc
* src/SocketCore.h
Fixed compile error with mingw32 cross compiler. Defined
a2_sockopt_t as void* for the target systems other than mingw32.
* src/SocketCore.cc
* src/a2netcompat.h
User-defined custom request headers specified by --header option
now override builtin headers if they have same name.
* src/HttpRequest.cc
* src/HttpRequest.h
* test/HttpRequestTest.cc
Added unit tests for util::getContentDispositionFilename() from
http://greenbytes.de/tech/tc2231/ Fixed the function so that added
tests are passed.
* src/util.cc
* test/UtilTest.cc
Support RFC2231 "Parameter Value Character Set and Language
Information" in Content-Disposition header.
* src/HttpResponse.cc
* src/util.cc
* src/util.h
* test/UtilTest.cc
Removed ret == 0 checking for SSL_read(), SSL_write() and
SSL_peek() because the checks are done in the caller. In
SocketBuffer::send(), throw exception if nothing could be written
and socket error was not EWOULDBLOCK
* src/SocketBuffer.cc
* src/SocketCore.cc
Moved getFirstNMissingIndex to bitfield.h and made it return the
number of appended indexes.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/Piece.cc
* src/Piece.h
* src/bitfield.h
* test/BitfieldManTest.cc
Added BitfieldMan::getFirstNMissingUnusedIndex() to get multiple
unused block indexes at once instead of calling
getFirstMissingUnusedIndex() multiple times. Made use of it in
Piece class and DefaultBtRequestFactory class via Piece class.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/DefaultBtRequestFactory.cc
* src/Piece.cc
* src/Piece.h
* test/BitfieldManTest.cc
Added bittorrent key to the response of tellStatus XML-RPC method.
The associated value of the key is a struct and contains data
retrieved from .torrent file, such as name, announce-list,
comment, etc.
* doc/aria2c.1.txt
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Fixed the bug that cookie for domain a.b.c is not sent to the host
a.b.c if no other cookies are stored. Fixed the bug that
Cookie::markOriginServerOnly() is not called when cookies are
loaded from file/sqlite3 database.
* src/Cookie.h
* src/CookieStorage.cc
* src/NsCookieParser.cc
* src/Sqlite3MozCookieParser.cc
* test/CookieStorageTest.cc
* test/NsCookieParserTest.cc
* test/Sqlite3MozCookieParserTest.cc
* test/cookies.sqlite
* test/nscookietest.txt
Removed RequestGroup::initSegmentMan(). Guaranteed that either
both _pieceStorage and _segmentMan are initialized or they are
not.
* src/RequestGroup.cc
* src/RequestGroup.h
* test/BtDependencyTest.cc
Fixed the bug that causes segmentaiton fault when aria2 sees '404
not found' in the N times(N is where --max-file-not-found=N, N>0)
in a row without single '200 OK' response.
* src/RequestGroup.cc.
Added dir and files key to the response struct of aria2.tellStatus
XML-RPC method. The value associated with files key is the list
of files. Its element is the same struct used in aria2.getFiles
XML-RPC method. Added uris key to the response struct of
aria2.getFiles XML-RPC method. The value associated with uris key
is the list of URIs. Its element is the same struct used in
aria2.getUris XML-RPC method.
* doc/aria2c.1.txt
* src/XmlRpcMethodImpl.cc
* test/XmlRpcMethodTest.cc
Added aria2.getSessionInfo XML-RPC method. This method returns a
struct containing Session ID, which is generated each time when
aria2 is invoked.
* doc/aria2c.1.txt
* doc/xmlrpc/aria2rpc
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Now offset argument in aria2.tellWaiting and aria2.tellStopped
accepts a negative integer. 'offset' == -1 points last download
in the waiting queue and 'offset' == -2 points the download before
the last download, and so on. The downloads in the response are in
reversed order.
* doc/aria2c.1.txt
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Added --human-readable option. This option, when true is given,
prints sizes and speed in human readable format(e.g., 1.2Ki,
3.4Mi) in the console readout. The default value is true and it
looks exactly the same as aria2-1.8.0. So the 'new feature'
appears when false is given. In this case, sizes and speed are
printed without in bytes. No Ki, Mi units conversion is used.
This may be useful for a program to parse the output of aria2.
* doc/aria2c.1.txt
* src/ConsoleStatCalc.cc
* src/ConsoleStatCalc.h
* src/OptionHandlerFactory.cc
* src/main.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Now --all-proxy, --http-proxy, --https-proxy and --ftp-proxy
option accepts empty string "". When "" is given, it erases
previously defined proxy.
* doc/aria2c.1.txt
* src/OptionHandlerImpl.h
* src/usage_text.h
* test/OptionHandlerTest.cc
Added --bt-metadata-only option. If true is given to this option,
aria2 downloads metadata only. The file(s) described in metadata
will not be downloaded. This option has effect only when
BitTorrent Magnet URI is used. See also --bt-save-metadata option.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
* src/UTMetadataPostDownloadHandler.cc
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed memory leak. Commands stored in std::deque<Command*> are not
deleted when exception is thrown. Make sure that when passing
std::deque<Command*> to function to store Commands, handle
exception and delete these Commands.
* src/AbstractCommand.cc
* src/CheckIntegrityCommand.cc
* src/FileAllocationCommand.cc
* src/RequestGroup.cc
* src/TrackerWatcherCommand.cc
Added --http-no-cache option. When true is given, aria2 sends
Cache-Control: no-cache and Pragma: no-cache header to avoid
cached content. If false is given , these headers are not sent
and you can add Cache-Control header with a directive you like
using --header option.
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/OptionHandlerFactory.cc
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Removed Logger from OptionParser. When OptionParser is used to
parse options at bootstrap, LogFactory is not configured yet
properly. When LogFactory is used in OptionParser, it initializes
itself to return a logger which has no ability to write log to the
disk.
* src/OptionParser.cc
* src/OptionParser.h
Fixed the bug that causes segmentation fault if unknown option is
put in aria2.conf file. BUG#2928303
* src/OptionParser.cc
* src/OptionParser.h
* src/option_processing.cc
* test/OptionParserTest.cc
Get rid of AI_ADDRCONFIG when --disable-ipv6 opiton is given. It
causes name resolution error when none of network interface has
IPv4 address.
* src/main.cc
Added signal handler for SIGHUP to save .aria2 file when terminal
is closed. The handler is the same one for SIGINT and SIGTERM.
* src/MultiUrlRequestInfo.cc
Defined method name in XmlRpcMethod subclasses.
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Added tellStopped XML-RPC method. This method returns stopped
download in the specified range. It takes same parameters with
tellWaiting XML-RPC method. offset = 0 means the oldest download.
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Use AI_ADDRCONFIG flag if it is available. Refactored so that
getaddrinfo calls are not scattered around. Unset AI_ADDRCONFIG
when conducting unit tests because they fail if networking
interface is not configured with IPv4 address.
* src/NameResolver.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/a2netcompat.h
* test/AllTest.cc
Added --bt-save-metadata option. When true is given, it saves
metadata as .torrent file. This option has effect only when
BitTorrent Magnet URI is used. The filename is name in metadata
with suffix .torrent. The directory to be saved is the same
directory where download file is saved. If the same file already
exists, metdata is not saved.
* src/OptionHandlerFactory.cc
* src/UTMetadataPostDownloadHandler.cc
* src/UTMetadataPostDownloadHandler.h
* src/message.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/UTMetadataDataExtensionMessageTest.cc
Added changePosition XML-RPC method. It takes 3 parameters: gid,
pos and how. This method changes the position of download denoted
by gid. If how is POS_SET, it moves the download to a position
relative to the beginning of the queue. If how is POS_CUR, it
moves the download to a position relative to the current
position. If how is POS_END, it moves the download to a position
relative to the end of the queue. If the destination position is
less than 0 or beyond the end of the queue, it moves the download
to the beginning or the end of the queue respectively. Returns
the destination position.
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/RequestGroupManTest.cc
* test/XmlRpcMethodTest.cc
Added getOption and getGlobalOption XML-RPC method. getOption
takes GID as a parameter and returns its options as struct.
getGlobalOption takes no parameter and returns global
options. Because global option is used as a template for the
option of newly added downloads, it includes options returned by
getOption.
* src/Option.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Sort _optionHandlers in OptionParser by name in ascending order.
Use vector instead of deque for efficiency.
* src/OptionHandler.h
* src/OptionHandlerFactory.h
* src/OptionParser.cc
* src/OptionParser.h
* src/version_usage.cc
* test/OptionParserTest.cc
Added following 2 keys, followedBy and belongsTo, to the response
of tellStatus.
followedBy: List of GIDs which are generated by the consequence of
this download. For example, when aria2 downloaded Metalink file,
it generates downloads described in it(see *--follow-metalink*
option). This value is useful to track these auto generated
downloads. If there is no such downloads, this key will not be
included in the response.
belongsTo: GID of a parent download. Some downloads are a part of
another download. For example, if a file in Metalink has
BitTorrent resource, the download of .torrent is a part of that
file. If this download has no parent, this key will not be
included in the response.
* src/BtPostDownloadHandler.cc
* src/DownloadResult.h
* src/Metalink2RequestGroup.cc
* src/MetalinkPostDownloadHandler.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/UTMetadataPostDownloadHandler.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Fixed the bug that RequestGroupMan::downloadFinished() returns
true even if all downloads haven't finished, especially when
PostDownloadHandler is involved. Changed the condition so that it
only returns true if both _requestGroups and _reservedGroups are
empty.
* src/RequestGroupMan.cc
If '-' is given as an argument to --metalink-file option, aria2
reads Metalink file from stdin.
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/a2io.h
Use last 8 bytes of peer ID as 'key' parameter for tracker request.
* src/DefaultBtAnnounce.cc
* src/DefaultBtAnnounce.h
* test/DefaultBtAnnounceTest.cc
Fixed the bug that connection is always dropped if handshake
message in extension protocol don't have metadata_size.
src/HandshakeExtensionMessage.cc
* src/HandshakeExtensionMessage.cc
Fixed the bug that DHT is always enabled when BitTorrent Magnet
URI is supplied. Notify user that they should consider enabling
DHT if they use Magnet URI.
* src/RequestGroup.cc
Added option --bt-prioritize-piece. This option instruct aria2 to
try to download first and last pieces of each file first. The
argument can contain 2 keywords:head and tail. To include both
keywords, they must be separated by comma. These keywords can take
one parameter, SIZE. For example , if head=SIZE is specified,
pieces in the range of first SIZE bytes of each file get higher
priority. tail=SIZE means the range of last SIZE bytes of each
file. SIZE can include K or M(1K = 1024, 1M = 1024K).
* src/DefaultPieceStorage.h
* src/Makefile.am
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/PriorityPieceSelector.cc
* src/PriorityPieceSelector.h
* src/RequestGroup.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* src/util.cc
* src/util.h
* test/Makefile.am
* test/MockPieceSelector.h
* test/PriorityPieceSelectorTest.cc
* test/UtilTest.cc
Accept BitTorrent Magnet URI in Metalink resource type bittorrent.
Rewritten UTMetadataPostDownloadHandler. To create torrent data
from metadata, use new metadata2Torrent() function.
* src/BtDependency.cc
* src/UTMetadataPostDownloadHandler.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* test/BittorrentHelperTest.cc
* test/BtDependencyTest.cc
Removed options which is only valid for URIs specified in
command-line. If they are left, because op is used as a template
for new RequestGroup(such as created in XML-RPC command,
BtPostDownloadHandler etc), they causes unintentional effect.
* src/main.cc
Fixed the bug which causes segmentation fault with tellWaiting
XML-RPC method when BitTorrent download is waiting. The key of
BtRegistry is changed from info hash to GID, because it is
registered per RequestGroup, not info hash.
* src/BtRegistry.cc
* src/BtRegistry.h
* src/BtSetup.cc
* src/ConsoleStatCalc.cc
* src/InitiatorMSEHandshakeCommand.cc
* src/PeerInitiateConnectionCommand.cc
* src/PeerInteractionCommand.cc
* src/PeerInteractionCommand.h
* src/PeerReceiveHandshakeCommand.cc
* src/RequestGroup.cc
* src/XmlRpcMethodImpl.cc
* test/BtRegistryTest.cc
* test/XmlRpcMethodTest.cc
Fixed the bug that trackers in BitTorrent Magnet URI are not
inherited to generated RequestGroup.
* src/UTMetadataPostDownloadHandler.cc
* test/UTMetadataPostDownloadHandlerTest.cc
Don't inject validator into BtMessage in metadataGetMode because
most of the checks depends on the total length of download but it
is unknown. Delegate metadataGetMode to BtMessage.
* src/DefaultBtMessageFactory.cc
* src/DefaultBtMessageFactory.h
Added setEndGamePieceNum() pure virtual function to PieceStorage.
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.h
* test/MockPieceStorage.h
Added parseMagnetLink(). Hex encoded info hash is supported.
Base32 encoded info hash is not supported yet.
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* test/BittorrentHelperTest.cc
Added _metadataGetMode member variable. It toggles the action when
messages are received: usually they almost do nothing if
_metadataGetMode is true.
* src/AbstractBtMessage.cc
* src/AbstractBtMessage.h
* src/BtAllowedFastMessage.cc
* src/BtBitfieldMessage.cc
* src/BtCancelMessage.cc
* src/BtChokeMessage.cc
* src/BtHaveAllMessage.cc
* src/BtHaveMessage.cc
* src/BtInterestedMessage.cc
* src/BtNotInterestedMessage.cc
* src/BtPieceMessage.cc
* src/BtRejectMessage.cc
* src/BtRequestMessage.cc
* src/BtUnchokeMessage.cc
Added bencode::decode overload functions. They have extra argument
'end', passed by reference. 'end' points to the beyond the last
position of data used in decoding process.
* src/bencode.cc
* src/bencode.h
* test/BencodeTest.cc
Fixed the bug that slow server is not knocked down in favor of
faster one.
* src/AbstractCommand.cc
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.cc
* src/UnknownLengthPieceStorage.h
* test/MockPieceStorage.h
Changed the strategry of how to increase the number of outstanding
requests. Now the number is doubled if there are no outstanding
requests after receiving messages.
* src/BtConstants.h
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
Applied a patch from tizianomueller to fix sigbus errors on Linux
sparc. I modified the patch to eliminate a cast to uint32_t* and
include file ordering.
* src/PeerListProcessor.h
* src/bittorrent_helper.cc
Fixed the bug that DHTAbstractNodeLookupTask never finishes if
error occurred in DHTMessageDispatcherImpl::sendMessage().
* src/DHTMessageDispatcherImpl.cc
Removed peerStorage from DHTPeerAnnounceEntry. It is unlikely to
receive get_peers request for torrent which the client is now
downloading.
* src/BtSetup.cc
* src/DHTPeerAnnounceEntry.cc
* src/DHTPeerAnnounceEntry.h
* src/DHTPeerAnnounceStorage.cc
* src/DHTPeerAnnounceStorage.h
* src/RequestGroup.cc
* test/DHTPeerAnnounceEntryTest.cc
* test/DHTPeerAnnounceStorageTest.cc
Throw exception if binding listening port is failed. Removed
RequestGroupMan::getInitialCommand(). Use
fillRequestGroupFromReserver() instead. Delete commands for
RequestGroup which has errors when it is being added.
* src/BtSetup.cc
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/DownloadEngineFactory.cc
* src/MultiUrlRequestInfo.cc
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* test/RequestGroupManTest.cc
Fixed the bug that when downloading more than one torrent,
listening port is not reported properly to tracker for 2nd or
later torrents.
* src/BtSetup.cc
* src/PeerListenCommand.cc
* src/PeerListenCommand.h
* src/RequestGroup.cc
If user name is embedded but password is missing in URI, first
resolve password using .netrc. If password is found in .netrc,
then use it as password. If not, use the password specified in
--ftp-passwd.
* src/AuthConfigFactory.cc
* src/Request.cc
* src/Request.h
* test/AuthConfigFactoryTest.cc
Added --install to ACLOCAL_AMFLAGS.
Removed m4 from SUBDIRS.
Updated automake 1.11 and autoconf 2.64.
Replaced some obsolute macros with new one.
* Makefile.am
* configure.ac
* m4/aria2_arg.m4
Fixed the bug that causes segmentation fault if
req->getCurrentUrl() contains printf formatting characters such as
%d. The statement that causes this bug is useless and removed.
* src/AbstractCommand.cc
Don't save control file when aria2 exists while checking piece
hash(behavior of -V option). If control file doesn't exist when
aria2 launched, the completed length in saved control file will be
0 byte and this confuses user. disableSaveControlFile() is called
in RequestGroup::processCheckIntegrityEntry().
enableSaveControlFile() will be called after hash checking is
done. See CheckIntegrityCommand.
* src/CheckIntegrityCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
Included version number in Peer ID and client version. Peer ID
now starts with "aria2/VERSION-", where VERSION is
MAJOR.MINOR.MICRO. Client version is aria2/VERSION.
* src/DefaultBtInteractive.cc
* src/OptionHandlerFactory.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* src/main.cc
* src/usage_text.h
* test/BittorrentHelperTest.cc
Fixed the bug that the option values changed by XML-RPC
method(changeOption and changeGlobalOption) are overwritten to the
previous value by the next these request which doesn't contain
that option value. Supporse max-download-limit is initially 0. You
changed this value to 100K by changeOption. Then you issue
changeOption request to change max-upload-limit to 50K. This
second request doesn't contain xml-download-limit, so it is back
to initial value, 0. Another improvement is that exception is
thrown when changeOption and changeGlobalOption request contains
option name which doesn't allowed in each request.
* src/DownloadEngine.h
* src/XmlRpcMethod.cc
* src/XmlRpcMethod.h
* src/XmlRpcMethodImpl.cc
* src/download_helper.cc
* src/download_helper.h
* test/XmlRpcMethodTest.cc
Added our own daemon() function for systems which desn't have
daemon(3).
* configure.ac
* src/Makefile.am
* src/daemon.cc
* src/daemon.h
* src/option_processing.cc
Added help categories: #cookie and #hook. Added #https tag to
--https-proxy and --https-proxy, --all-proxy and --no-proxy.
* src/OptionHandlerFactory.cc
* src/help_tags
Help category now starts with "#" to distinguish a category from
keyword search. For example, "http" categroy is now "#http". You
can type "--help=#http" to get explanation of options related to
http. If '#' is omitted, then the argument is treated as a keyword
and aria2 searches options whose name includes the keyword and
print matched ones. For example, "--help=http" will show options
whose name includes "http".
* src/OptionHandlerFactory.cc
* src/help_tags.h
* src/usage_text.h
* src/version_usage.cc
Added support for IPv6 literal address in URI. Now aria2 can
handle URI such as http://[::1]/
* src/HttpRequest.cc
* src/HttpRequest.h
* src/Request.cc
* src/Request.h
* test/HttpRequestTest.cc
* test/OptionHandlerTest.cc
* test/RequestTest.cc
Added --xml-rpc-listen-all option. If true is given to this
option, aria2 listens incoming XML-RPC requests on all network
interfaces. If false is given, listens only on local loopback
interface. The default value is false.
* src/HttpListenCommand.cc
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Get comment, comment.utf-8, created by and creation date from
.torrent file and print them in -S output.
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* test/BittorrentHelperTest.cc
* test/test.torrent
* test/utf8.torrent
Fixed the bug that download fails if
SocketCore::establishConnection() throws exception and aria2
doesn't try another address.
* src/AbstractCommand.cc
* src/InitiateConnectionCommand.cc
* src/message.h
Renamed xmlrpc::elements::PARAMS to xmlrpc::elements::A2_PARAMS
because it causes compile error if PARAMS macro is defined.
* src/XmlRpcElements.cc
* src/XmlRpcElements.h
* src/XmlRpcRequestParserStateImpl.cc
Avoid to create zombie process when commands specified in
--on-download-* options are executed. Tested on Linux 2.6, Mac OS
X and NetBSD.
* src/main.cc
Added 'errorCode' to the reponse of tellStatus xml-rpc method.
This key is only available for stopped/completed downloads and its
value is the error code defined in EXIT STATUS in man page.
* src/XmlRpcMethodImpl.cc
Don't call prepareForRetry(1) if all segments are ignored in
SegmentMan.
* src/AbstractCommand.cc
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/SegmentMan.cc
* src/SegmentMan.h
Added assert(!req.isNull()) when DlRetryEx is caught(this is
relatively naive approach, though). For DownloadFailureException,
we handle the case when req is null properly.
* src/AbstractCommand.cc
Added function returning suffix of control file to
DefaultBtProgressInfoFile.
* src/DefaultBtProgressInfoFile.cc
* src/DefaultBtProgressInfoFile.h
* src/RequestGroup.cc
Implemented getVersion xml-rpc method. This method returns struct
which has 2 key-value pairs: "version" key is associated to the
version of aria2, such as "1.5.0". "enabledFeatures" key is
associated to the list of enabled features, such as "Async DNS",
"BitTorrent".
* src/FeatureConfig.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Keep CreateRequestCommand in queue when no segment is available so
that they can pick up pieces which slow BitTorrent peers are
downloading.
* src/AbstractCommand.cc
* src/CreateRequestCommand.cc
* src/CreateRequestCommand.h
Winsock select() doesn't work if no socket is in FD_SET. To
overcome this problem, a dummy socket is added to FD_SET and it is
given to select().
* src/SelectEventPoll.cc
* src/SelectEventPoll.h
Added --bt-stop-timeout=SEC option. This function stops BitTorrent
download if the download speed is 0 and the number of seeder is 0
in consecutive SEC seconds. By default, this function is disabled.
* src/BtSetup.cc
* src/Makefile.am
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Removed the call to DiskAdaptor::onDownloadComplete() from
BtCheckIntegrityEntry and DefaultPieceStorage.
* src/BtCheckIntegrityEntry.cc
* src/DefaultPieceStorage.cc
Call RequestGroup::createNextCommandWithAdj() from
BtFileAllocationEntry if at least one FileEntry has URI. The
static function hasAssociatedUri in RequestGroup.cc is renamed as
isUriSuppliedForRequsetFileEntry() and placed in FileEntry.h.
* src/BtFileAllocationEntry.cc
* src/FileEntry.h
* src/RequestGroup.cc
Add formerly fastest PeerStat's sessionDownloadLength to new
fastest PeerStat and use _fastestPeerStats to calcuate downloaded
bytes in a session.
* src/PeerStat.cc
* src/SegmentMan.cc
In a single file download, file size becomes known just after
downloading, set total length to FileEntry object when download
completed.
* src/DownloadCommand.cc
Rewritten PeerStats handling in SegmentMan.cc. Now we have 2 list
of PeerStat in SegmentMan. peerStats is used for calculating
download speed. Therefore all active PeerStats should be in
there. Another one is _fastestPeerStats and it only contains
fastest PeerStat for each hostname/protocol pair. They are used
for updating ServerStat.
* src/DownloadCommand.cc
* src/Request.h
* src/RequestGroupMan.cc
* src/SegmentMan.cc
* src/SegmentMan.h
* test/SegmentManTest.cc
Rewritten PeerStat handling. In the previous implementation,
faster command tries to find slower command. In this new
implementation, slower command tries to find faster command.
PeerStat is now created in each HTTP/FTP request to get download
rate correctly. If the download range is small, the download rate
tends to small and this will occur at the later stage of download.
* src/AbstractCommand.cc
* src/DownloadCommand.cc
* src/FileEntry.cc
* src/FileEntry.h
* src/Request.cc
* src/Request.h
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/SegmentMan.cc
* src/SegmentMan.h
* test/SegmentManTest.cc
In CookieStorage::load() and saveNsFormat(), handle exception
inside the functions. When saving Cookies, first write temporary
file and after successful writes, then renames it to final
destination.
* src/CookieStorage.cc
* src/CookieStorage.h
* src/MultiUrlRequestInfo.cc
The default value of --dir option is the absolute path to the
current directory. If getcwd() is failed, then it is ".", which is
the same value with old implementation. This change is necessary
because after daemon() call, the current working directory is
changed to /.
* src/File.cc
* src/File.h
* src/OptionHandlerFactory.cc
* src/option_processing.cc
Call daemon() with arguments(0,0), which means daemon() changes
current working directory to / and redirects stdin, stdout and
stderr to /dev/null.
* src/option_processing.cc
Added _xmlRpc member variable to RequestGroupMan to reduce the
number of call Option::getAsBool(PREF_ENABLE_XML_RPC)
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
Receive the return value as const reference from
DownloadContext::getFileEntries().
* src/DefaultPieceStorage.cc
* src/RequestGroupMan.cc
* src/XmlRpcMethodImpl.cc
DownloadContext now has _fileEntries so that
DownloadContext::getFileEntries() can returns its const reference.
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DownloadContext.cc
* src/DownloadContext.h
* src/SingleFileDownloadContext.cc
* src/SingleFileDownloadContext.h
Moved getFirstRequestedFileEntry(), countRequestedFileEntry() and
writeFilePath() function template from RequestGroupMan.cc to
FileEntry.h
* src/FileEntry.h
* src/RequestGroupMan.cc
Removed _acceptFeatures and its accessor functions from
RequestGroup since they are not used practically.
* src/HttpRequestCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
Removed member _maxTries from RequestGroup class to avoid
duplicate option value. Those classes who refer this variable
should use option value of PREF_MAX_TRIES directly.
* src/AbstractCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/TrackerWatcherCommand.cc
Added countSeeder() function which counts seeder in the given
iterator range. Use it in ConsoleStatCalc and XmlRpcMethodImpl.
* src/ConsoleStatCalc.cc
* src/Peer.h
* src/XmlRpcMethodImpl.cc
* test/PeerTest.cc
Added uploadLength and numSeeders to the response of tellStatus
xml-rpc method. Assert that PeerStorage instance is not null
instead of checking if statement. It should be non-null in this
context.
* src/XmlRpcMethodImpl.cc
Use name.utf-8 and path.utf-8 key in higher priority than name and
path key respectively when persing .torrent file.
* src/BtContext.cc
* src/BtContext.h
* src/DefaultBtContext.cc
* test/DefaultBtContextTest.cc
* test/utf8.torrent
Removed PKG_CONFIG variable in sqlite3.m4, which conflicts the
variable in pkg.m4. Use PKG_CHECK_MODULES instead of hand-crafted
scripts. Renamed SQLITE3_CPPFLAGS as SQLITE3_CFLAGS since
PKG_CHECK_MODULES macro uses latter name.
* m4/sqlite3.m4
* src/Makefile.am
* test/Makefile.am
Since upcoming libgnutls 2.8 doesn't have libgnutls-config, Check
presence of libgnutls using pkg-config first. If it fails, fall
back to old macro libgnutls.m4.
* configure.ac
Removed tellAll XML-RPC command because its reponse tends to be
big if stopped/waiting downloads pile up.
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Added the ability to execute command when download starts and
stops. You can also specify command for particular cases such as
complete/error download. Added --on-download-start,
--on-download-stop, --on-download-complete and --on-download-error
option.
* src/OptionHandlerFactory.cc
* src/RequestGroupMan.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Abbreviated KiB/s to KiBs and its precision decreased to 1 to save
space in console readout. Also they are now shown in MiB/s if
speed > 1024KiB/s.
* src/ConsoleStatCalc.cc
Added SEED to console output, which represents the number of
seeders currently the client is connecting to.
* src/ConsoleStatCalc.cc
* src/ConsoleStatCalc.h
* src/DownloadEngine.cc
* src/NullStatCalc.h
* src/StatCalc.h
Show "[MEMORY]" prefix before filename in download summary if it
is downloaded into memory.
* src/DownloadResult.h
* src/RequestGroup.cc
* src/RequestGroupMan.cc
DownloadResult now has the list of FileEntry. The download
summary displays the path of first selected file and the number of
remaining files for multi-file torrent.
* src/DownloadResult.h
* src/RequestGroup.cc
* src/RequestGroupMan.cc
* test/RequestGroupTest.cc
Throw DlAbortEx instead of FatalException during parsing options
because we don't want for aria2 to quit when bad option is passed
via XML-RPC.
* src/OptionHandlerException.cc
* src/OptionHandlerException.h
* src/OptionHandlerImpl.h
* src/OptionParser.cc
* src/OptionParser.h
* src/PStringSegment.cc
* src/ParameterizedStringParser.cc
* src/download_helper.cc
* test/ParameterizedStringParserTest.cc
Selecting files are now done in
DefaultBtContext::setFileFileter().
PieceStorage::setFileFilter(), DiskAdaptor::addDownloadEntry()
functions are removed because they are no longer used. Creating
filter in BitfieldMan is done in new funtion
PieceStorage::setupFileFilter()
* src/BtContext.cc
* src/BtContext.h
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/DiskAdaptor.cc
* src/DiskAdaptor.h
* src/PieceStorage.h
* src/RequestGroup.cc
* src/UnknownLengthPieceStorage.h
* src/XmlRpcMethodImpl.cc
* test/DefaultBtContextTest.cc
* test/MockBtContext.h
* test/MockPieceStorage.h
The information for files, URIs, peers are removed from the
reponse of TellaActive, TellStatus command because they tend to be
large. Instead they can be retrieved by the dedicated commands:
getFiles, getUris and getPeers respectively.
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Added "uris" key to the response of tellStatus command. Added
"connections" key to the response of tellStatus and tellActive
command.
* src/XmlRpcMethodImpl.cc
Return fault structure for error. FailXmlRpcMethod is renamed as
NoSuchMethodXmlRpcMethod. pieceLength and numPieces are returned
in non-torrent download. Return single param value.
* src/XmlRpcMethod.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Added tellActiveStatus xml-rpc command which reports download
status of active downloads.
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Added remove xml-rpc command which removes specified download.
There is a known issue: the removed unfinished downloads are
reported ERR when aria2 exits. They should be reported as INPR.
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
If --enable-http-server is enabled, don't stop aria2 when all
download finished and don't quit when no files to download at
start up.
* src/RequestGroupMan.cc
* src/main.cc
* src/option_processing.cc
Added xml-rpc functionality. Currently only addURI commad is
supported. To enable xml-rpc, run aria2 with
--enable-http-server. This option name is temporal and will be
changed. The feature that reports download progress in html format
is temporarily disabled.
* src/HttpServer.cc
* src/HttpServer.h
* src/HttpServerBodyCommand.cc
* src/HttpServerBodyCommand.h
* src/HttpServerCommand.cc
* src/HttpServerResponseCommand.cc
* src/Makefile.am
* src/OptionParser.cc
* src/OptionParser.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/XmlRpcMethod.cc
* src/XmlRpcMethod.h
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodFactory.h
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* src/download_helper.cc
* src/download_helper.h
* test/Makefile.am
* test/XmlRpcMethodTest.cc
Don't retrieve PREF_MAX_DOWNLOAD_LIMIT and PREF_MAX_UPLOAD_LIMIT
from option directly. Instead, get them from RequestGroup.
* src/ActivePeerConnectionCommand.cc
* src/ActivePeerConnectionCommand.h
* src/PeerReceiveHandshakeCommand.cc
* src/RequestGroup.h
Added static member _protocolFamily to SocketCore. By default,
SocketCore uses AF_UNSPEC for getaddrinfo hints to resolve
address. Sometime SocketCore::bind() and
SocketCore::establishConnection() use difference protocl family
and latter cannot connect to former. To avoid this situation, we
limit protocol family to AF_INET for unit tests.
* src/SocketCore.cc
* src/SocketCore.h
* test/AllTest.cc
In DefaultBtContext::getActualBasePath(), return first
FileEntry::getPath() for single file torrent.
* src/DefaultBtContext.cc
* test/DefaultBtContextTest.cc
Now the constructor of AbstractDiskWriter takes filename as an
argument and filename argument is removed from openFile(),
initAndOpenFile(), openExistingFile() interface. storeDir
member and its accessor functions are removed from DiskAdaptor
because it is not used anymore. size() member function of
DefaultDiskWriter, DirectDiskAdaptor and MultiDiskAdaptor now
can be called without opening file.
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/ByteArrayDiskWriter.cc
* src/ByteArrayDiskWriter.h
* src/ByteArrayDiskWriterFactory.cc
* src/ByteArrayDiskWriterFactory.h
* src/DefaultDiskWriter.cc
* src/DefaultDiskWriter.h
* src/DefaultDiskWriterFactory.cc
* src/DefaultDiskWriterFactory.h
* src/DefaultPieceStorage.cc
* src/DirectDiskAdaptor.cc
* src/DirectDiskAdaptor.h
* src/DiskAdaptor.h
* src/DiskWriter.h
* src/DiskWriterFactory.h
* src/MessageDigestHelper.cc
* src/MultiDiskAdaptor.cc
* src/RequestGroup.cc
* src/UnknownLengthPieceStorage.cc
* src/Util.cc
* test/DefaultDiskWriterTest.cc
* test/DirectDiskAdaptorTest.cc
* test/FallocFileAllocationIteratorTest.cc
* test/MessageDigestHelperTest.cc
* test/MetalinkProcessorTest.cc
* test/MultiDiskAdaptorTest.cc
* test/MultiFileAllocationIteratorTest.cc
* test/SingleFileAllocationIteratorTest.cc
* test/UtilTest.cc
Fixed the bug that read-only file with wrong file size will
cause error because it cannot be truncated to the correct size.
Now if file size is different than the expected one, re-open
file in writable mode.
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/BtCheckIntegrityEntry.cc
* src/DiskAdaptor.h
* src/MultiDiskAdaptor.h
* src/RequestGroup.cc
Fixed the bug that with --check-integrity option aria2 reports
downloaded file size is 0 even if some parts of file is
correctly downloaded. This bug is reproducible for the download
that a file includes last piece is missing. This bug doesn't
reveal for single-torrent with file allocation on.
* src/IteratableChecksumValidator.cc
* test/IteratableChecksumValidatorTest.cc
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 upload limit exceeds the value specified in
--seed-ratio option depending on the timing of the execution of
SeedCheckCommand.
* src/SeedCheckCommand.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
Run DefaultBtMessageDispatcher::
checkRequestSlotAndDoNecessaryThing()
in every 1 sec. The timeout of RequestSlot is 60s by default and
it doesn't need to be called every time when
DefaultBtInteractive::doInteractionProcessing() is called.
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
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
Added an option to specify the interval between tracker
requests.
If non-zero value is specified, aria2 uses it and ignores the
interval value in the response of tracker. If zero is specified,
aria2 determines the inteval value based on the tarcker response
and download progress.
* src/DefaultBtAnnounce.cc
* src/DefaultBtAnnounce.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Refactored getMissingIndexRandomly, getFirstMissingIndex,
getAllMissingBlockIndexes to reduce a call to
array_function_base::operator[].
* src/BitfieldMan.cc
Cached TransferStat/download speed to avoid to sum them up in
each call.
* src/DefaultPeerStorage.cc
* src/DefaultPeerStorage.h
* src/SegmentMan.cc
* src/SegmentMan.h
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
Fixed the bug that AdaptiveURISelector doesn't select any URI
when all URIs are tested and their timeout is not reached.
* src/AdaptiveURISelector.cc
* src/AdaptiveURISelector.h
Added --dry-run option. In this mode, aria2 just checks whether
the remote file is available and doesn't download data. This
option has effect on HTTP/FTP downloads and BitTorrent downloads
are canceled in this mode.
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroupMan.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Don't reset URI in retry to avoid additional round trips because
of redirects.
* src/AbstractCommand.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.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
Now select-file can be specified in the uri list(-i list).
* src/BtContext.cc
* src/BtContext.h
* src/RequestGroup.cc
* src/Sequence.h
* src/download_helper.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
In BitTorrent, Open files in read-only mode for hash check.
After that, re-open file in read/write mode only when the
download is not finished.
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/BtCheckIntegrityEntry.cc
* src/DiskAdaptor.h
* src/DiskWriter.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/RequestGroup.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 segmentation fault during execution of choking
algorithm in leecher state because of broken compare operator
implementation.
* src/BtLeecherStateChoke.cc
* src/BtLeecherStateChoke.h
Assign the value of tv.tv_sec to time_t timesec instead of
giving tv.tv_sec to localtime_r directly because tv.tv_sec may
not be of type time_t.
* src/SimpleLogger.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
Changed the default value of --proxy-method option from 'tunnel'
to 'get'. Use 'tunnel' for HTTPS regardless of --proxy-method
option.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/FtpInitiateConnectionCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpInitiateConnectionCommand.h
* src/OptionHandlerFactory.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
Added _maxTries property to RequestGroup and assign the option
value of PREF_MAX_TRIES to it. AbstractCommand now looks up
RequestGroup::getMaxTries() instead of
Option::getAsInt(PREF_MAX_TRIES).
* src/AbstractCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
Applied AdaptiveURISelector-timeout patch from Pascal Rigaux at
Mandriva. I modified the patch: make RequestGroup have the
timeout value and AdaptiveURISelector directly modifies that
value.
* src/AbstractCommand.cc
* src/AdaptiveURISelector.cc
* src/AdaptiveURISelector.h
* src/FtpNegotiationCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
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
Fixed the bug that the average speed is wrong in
http/ftp/BitTorrent integrated download. Only the download bytes
in BitTorrent were considered.
* src/RequestGroup.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
Remove leading "--" from help keyword and a substring after "="
from help keyword, so that one can query options by '-h--max-'
or '-hmax-peers=10'.
* src/option_processing.cc
Persist connection between the built-in HTTP server and a client
if a client supports keep-alive. Fixed the bug that aria2 exits
when the HTTP server receives EOF from a client.
* src/HttpServer.cc
* src/HttpServer.h
* src/HttpServerCommand.cc
* src/HttpServerCommand.h
* src/HttpServerResponseCommand.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
Moved setStatusRealtime() from FileAllocationDispatcherCommand
to SequentialDispatcherCommand.
* src/FileAllocationDispatcherCommand.cc
* src/SequentialDispatcherCommand.h
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
Added --bt-hash-check-seed option. If true is given to this
option, after hash check using --check-integrity option and file
is complete, continue to seed file. If you want to check file
and download it only when it is damaged or incomplete, set this
option to false. This option has effect only on BitTorrent
download. The default value is true(This is the same behavior
with the previous release).
* src/BtCheckIntegrityEntry.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Added --event-poll option to select the method for polling
events.
The available methods are "select" and "epoll". "epoll" is
available on Linux only. The earlier release has the compile
option to choose from these methods.
* configure.ac
* src/RequestGroupMan.cc
* src/OptionHandlerFactory.cc
* src/EpollEventPoll.h
* src/StreamFileAllocationEntry.cc
* src/a2io.h
* src/SelectEventPoll.h
* src/option_processing.cc
* src/prefs.h
* src/EpollEventPoll.cc
* src/EventPoll.h
* src/SocketCore.h
* src/Makefile.am
* src/main.cc
* src/DownloadEngine.h
* src/SelectEventPoll.cc
* src/DownloadEngine.cc
* src/SocketCore.cc
* src/DownloadEngineFactory.cc
* src/Makefile.in
* src/prefs.cc
* src/usage_text.h
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
Added --use-head option to toggle whether HEAD method should be
used in the first HTTP request. By default aria2 uses HEAD
method as the first request. When the server doesn't recognize
HEAD, then give aria2 --use-head=false to force aria2 to use GET
method instead.
* src/OptionHandlerFactory.cc
* src/RequestGroupMan.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
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
Rename file by appending digits if a local file exists and its
file size is larger than that of remote file with --continue
option. The old implementation just throws exception in such
case.
* src/RequestGroup.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
Added --max-overall-upload-limit option. This option limits the
overall upload speed. Stated in help message that the existing
--max-upload-limit option limits the upload speed per each
torrent. Man page is also updated.
* doc/aria2c.1.txt
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/OptionHandlerFactory.cc
* src/PeerInteractionCommand.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
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
Added `https' tag to help option category. Added https tag to
--ca-certificate, --certificate, --check-certificate and
--private-key option.
* src/OptionHandlerFactory.cc
* src/help_tags.h
* src/option_processing.cc
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
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
Fixed the bug that causes segmentation fault/bus error during
executing choking algorithm while seeding. This is caused by
improper implementation of compare function which returns
inconsistent results depending on the timing of last unchoke.
* src/BtSeederStateChoke.cc
* src/BtSeederStateChoke.h
* src/DefaultPeerStorage.cc
Added -V for the short form of --check-integrity option.
Now the argument of --check-integrity option is optional:
if it is omitted, it is evaluated as true.
* doc/aria2c.1.txt
* src/option_processing.cc
* src/usage_text.h
Made the default value of --ftp-pasv option set to true and it
can take true/false values.
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/usage_text.h
* doc/aria2c.1.txt
Erase peer before executing onReturningPeer and onErasingPeer
because choking algorithm called from onReturningPeer doesn't
like erasing peer in the active peer list.
* src/DefaultPeerStorage.cc
Instead of creating special filename in createDownloadResult()
if inMemoryDownload() is true, now it is done in getFilePath().
* src/RequestGroup.cc
* test/RequestGroupTest.cc
Print "[MEMORY]" and filename if a file is not saved in disk and
just processed in memory. This is the fix for previous comment
out.
* src/MemoryBufferPreDownloadHandler.cc
* src/RequestGroup.cc
* src/RequestGroup.h
Commented out the code which sets virtual directory path
"[MEMORY]" propagate directory to store to following
RequestGroup.
* src/MemoryBufferPreDownloadHandler.cc
Rewritten URI handling functions. They are now provided as a
testable functions.
* src/Makefile.am
* src/RequestGroup.cc
* src/RequestGroup.h
* src/download_helper.cc
* src/download_helper.h
* src/main.cc
* test/DownloadHelperTest.cc
* test/Makefile.am
* test/input_uris.txt
Added the ability to specify output filename and directory in
input file.
Additional parameters are added in the following line of URIs
with proceeding white space(s), 1 parameter in 1 line.
The parameter names are the same with the command-line option
name without proceeding "--". Not all the options are available
here: at the moment, 'dir' and 'out' options are avialable.
Please note that out option has no effect against Metalink or
BitTorrentdownloads.
Example input file:
http://host/foo-1.1.tar.bz2
out=foo.tar.bz2
dir=/tmp/downloads
http://host/thundermonkey-2.0.tar.bz2
And then invoke 'aria2c -i url.txt --dir ~/mydownloads'.
foo-1.1.tar.bz2 is saved as /tmp/downloads/foo.tar.bz2, whereas
thundermonkey-2.0.tar.bz2 is saved as
~/mydownloads/thundermonkey-2.0.tar.bz2.
* src/BtPostDownloadHandler.cc
* src/Metalink2RequestGroup.cc
* src/Metalink2RequestGroup.h
* src/MetalinkPostDownloadHandler.cc
* src/UriListParser.cc
* src/UriListParser.h
* src/main.cc
* test/Metalink2RequestGroupTest.cc
* test/UriListParserTest.cc
* test/filelist1.txt
Fixed the bug that metalink file is not processed if
Content-Type field has a paramter.
* src/HttpResponse.cc
* src/HttpResponse.h
* test/HttpResponseTest.cc
Fixed the bug that DefaultPieceStorage::getCompletedLength()
returns the value larger than DefaultPieceStorage::getTotalLength()
when in flight pieces are involved.
* src/DefaultPieceStorage.cc
* test/DefaultPieceStorageTest.cc
Added --no-proxy option. It receives comman separated hostname
or domains to which proxy should not be used.
aria2 honors the environment variable no_proxy to override
no-proxy value in configuration file. The user can override the
environment variable no_proxy with --no-proxy command-line
option.
* src/AbstractCommand.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Added the ability to verify peer in SSL/TLS using given CA
certificates.
The CA certificates are specified in --ca-certificate option.
By default, the verification is disabled. Use --check-certificate
option to enable it.
* src/HttpRequestCommand.cc
* src/LibgnutlsTLSContext.cc
* src/LibgnutlsTLSContext.h
* src/LibsslTLSContext.cc
* src/LibsslTLSContext.h
* src/MultiUrlRequestInfo.cc
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/a2functional.h
* src/message.h
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Added client certificate authentication for SSL/TLS.
Currently a private key must be decrypted for use with aria2.
If a user accidentally gives encrypted file to aria2 then
following thing happens:
If encrypted private key is given to aria2, it behaves
differently depending on the ssl library it uses. If aria2 built
with openssl then openssl prompts the user for password.
If aria2 build with gnutls then aria2 exists with error at start up.
* src/DownloadEngineFactory.cc
* src/MultiUrlRequestInfo.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Introduced TLSContext that holds TLS related data that can be
shared with multiple SSL connections.
* src/DownloadEngineFactory.cc
* src/LibgnutlsTLSContext.cc
* src/LibgnutlsTLSContext.h
* src/LibsslTLSContext.cc
* src/LibsslTLSContext.h
* src/Makefile.am
* src/SocketCore.cc
* src/SocketCore.h
* src/TLSContext.h
* src/message.h
Fixed the bug that the DiskWriter of the first FileEntry whose
`needsFileAllocation' property is false is not created
even if it shares a piece with next FileEntry which `requested'
property is true.
Fixed the bug that zero-length file is not created if pre file
allocation is not done.
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* test/MultiDiskAdaptorTest.cc
Added the ability to pool proxy connection.
The conneciton in FTP with proxy-method=GET is not pooled.
Proxy-Connection header will not be sent when sending CONNECT
method.
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpResponse.cc
* src/HttpSkipResponseCommand.cc
* test/HttpRequestTest.cc
* test/HttpResponseTest.cc
Added support for following envrionment variables: http_proxy,
https_proxy, ftp_proxy and all_proxy.
Each variable is equivalent to the aria2 option whose name is
the variable name with '_' replaced with '-'.
They overrides options specified in aria2.conf file.
The envrionment variables can be overrode using command-line
option.
* src/option_processing.cc
Treat Cookie object as session cookie if expiry = 0 is given.
With this change, you can specify session scoped cookies in an
external file setting expiry value to 0.
* src/Cookie.cc
* src/Cookie.h
* test/CookieParserTest.cc
* test/CookieStorageTest.cc
* test/CookieTest.cc
Changed signature of DHTMessageFactory::createResponseMessage().
Removed unused validateIDMatch.
* src/DHTMessageFactory.h
* src/DHTMessageFactoryImpl.cc
* src/DHTMessageFactoryImpl.h
* src/DHTMessageTracker.cc
* test/DHTMessageFactoryImplTest.cc
* test/MockDHTMessageFactory.h
Dropped DHT message coming from same ID of localhost.
* src/DHTMessageReceiver.cc
Rejected adding node whose ID is the same as localhost's.
* src/DHTRoutingTable.cc
* test/BtPortMessageTest.cc
* test/DHTRoutingTableTest.cc
Fixed the bug that causes time out when redirection occurs with
content-length 0.
* src/HttpResponseCommand.cc
* src/HttpSkipResponseCommand.cc
* src/HttpSkipResponseCommand.h
Now each status legends is shown only when it appears in Download
Result. If Download Result has no item, then status legend will not
be printed.
* src/RequestGroupMan.cc
Fixed the bug that causes segmentation fault when accessing files which
don't exist or are not included in --select-file option while
validating chunk checksum.
* src/MultiDiskAdaptor.cc
Added length equality test to operator== to drop a piece message
whose length does not match to the requested one.
* src/RequestSlot.cc
* test/DefaultBtMessageDispatcherTest.cc
Fixed the bug that aria2 aborts when a request larger than 16KiB
is
recieved.
In this fix, if a request larger than 16KiB length is received,
aria2
disconnects the peer.
* src/BtConstants.h
* src/PeerMessageUtil.cc
* src/PeerMessageUtil.h
* test/BtRequestMessageTest.cc
Added --auto-save-interval=SEC option. A control file(*.aria2)
is saved
every SEC seconds.
* src/DownloadEngineFactory.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/usage_text.h
Fixed compile warning on linux-amd64
* src/FtpConnection.cc
* src/IteratableChunkChecksumValidator.cc
* src/MultiDiskAdaptor.cc
Fixed the bug that unit test fails on linux-amd64
* test/UtilTest.cc
Added --dht-file-path option to change the path to dht.dat,
which is a
serialized DHT routing table.
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/usage_text.h
Fixed the bug that referer header field contains fragment.
Now Request class removes fragment part of URI and encodes it
in Request::setUri() and setReferer().
* src/Request.h
* src/Request.cc
* test/RequestTest.cc
Use sqlite3_open if sqlite3_open_v2 is not available.
* src/Sqlite3MozCookieParser.cc
* src/Sqlite3MozCookieParser.h
* m4/sqlite3.m4
* test/Sqlite3MozCookieParserTest.cc
Use seek() and SetEndOfFile() for mingw32 build instead of
ftruncate(),
because mingw32's ftruncate() cannot handle more than 2GB-size
file.
* src/AbstractDiskWriter.cc
Don't set Request::supportsPersistentConnection() in
HttpConnection
since this code is also used in AbstractProxyResponseCommand.
Moved those code to HttpResponse.
* src/HttpResponse.cc
* src/HttpResponse.h
* src/HttpConnection.cc
* src/HttpConnection.h
* src/HttpResponseCommand.cc
* test/HttpResponseTest.cc
Fixed compile error with debian mingw32 cross compiler(4.2.1).
The configuration is minimum: no torrent, no metalink, so there
may be
other compile error on their code.
* src/a2netcompat.h
* src/File.cc
* src/File.h
* src/SocketCore.cc
* src/SocketCore.h
Fixed the bug that aria2 may send duplicate data to BitTorrent
peer if
whole message data is not sent in one send() call.
* src/BtPieceMessage.cc
* src/BtPieceMessage.h
* src/PeerConnection.cc
* src/PeerConnection.h
* src/SimpleBtMessage.cc
* src/SimpleBtMessage.h
Fixed the bug that aria2 downloads faster than
max-download-limit when
downloading file using both HTTP(or FTP) and BitTorrent, because
aria2
evaluates speed separatly(HTTP and BiTorrent) against
max-download-limit
, instead of sum of them.
* src/ActivePeerConnectionCommand.cc
* src/DefaultBtInteractive.cc
* src/DownloadCommand.cc
* src/PeerInteractionCommand.cc
* src/PeerReceiveHandshakeCommand.cc
When error occurs while aria2 is parsing an command-line option,
print
the usage of the option.
* src/Makefile.am
* src/NameMatchOptionHandler.h
* src/OptionHandlerException.h
* src/option_processing.cc
Reverted previous change.
Insert username+'@' to URI(after ftp://) when URI is FTP scheme
and
username is not in URI.
* src/HttpRequest.cc
* src/Request.cc
* test/HttpRequestTest.cc
* test/RequestTest.cc
Now colon is required for username and password in FTP URL,
like:
ftp://username:password@host.
If colon is not there, aria2 don't parse it as a username. For
example,
aria2 don't retrieve username from ftp://username@host.
This fix was made in order to login FTP server via
non-transparent ftp
proxy.
* src/Request.cc
* test/RequestTest.cc
Use netrc for HTTP.
Now FTP user/password is sent in Authorization header when
--ftp-via-http-proxy=get is given.
* src/AuthConfigFactory.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/NetrcAuthResolver.cc
* src/NetrcAuthResolver.h
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* test/AuthConfigFactoryTest.cc
* test/HttpRequestTest.cc
* test/NetrcAuthResolverTest.cc
Issue PWD command first and get working directory and use it as
a prefix
for CWD command.
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* test/FtpConnectionTest.cc
Fixed the bug that a block in a piece is requested when same
block is
already requested to the same peer in end game mode.
* src/BtRequestFactory.h
* src/DefaultBtInteractive.cc
* src/DefaultBtRequestFactory.cc
* src/DefaultBtRequestFactory.h
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.cc
* src/UnknownLengthPieceStorage.h
* test/DefaultBtRequestFactoryTest.cc
* test/DefaultPieceStorageTest.cc
* test/MockBtRequestFactory.h
* test/MockPieceStorage.h
Removed _uploadLength and _downloadLength from
PeerSessionResource
and use PeerStat::_sessionUploadLength and
PeerStat::_sessionDownloadLength.
* src/PeerSessionResource.cc
* src/PeerSessionResource.h
Fixed the bug that prefixLength of split bucket which doesn't
include
local node ID is incremented.
* src/DHTBucket.cc
* src/DHTBucket.h
* test/DHTBucketTest.cc
Moved isProxyGETRequest function outside #ifdef ENABLE_ASYNC_DNS
clause
to fix compile error when async DNS is not enabled by
configuration.
* src/AbstractCommand.cc
If establishing conneciton to a server is failed, then mark
error on
its ServerStat.
Added the cause of error to log when error event occurred.
Moved message string to message.h for translation.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/FtpNegotiationCommand.cc
* src/HttpRequestCommand.cc
* src/PeerAbstractCommand.cc
* src/message.h
If error event is received in epoll, then abort download
immediately.
* src/AbstractCommand.cc
* src/Command.cc
* src/Command.h
* src/DownloadEngine.cc
* src/PeerAbstractCommand.cc
Added upper limit of FTP response buffer. The current
implementation
uses 4096bytes as a limit.
* src/FtpConnection.cc
* src/FtpConnection.h
* test/FtpConnectionTest.cc
Added --max-file-not-found=NUM option. If aria2 receives `file
not
found' error from HTTP/FTP server NUM times without getting
single
bytes of data, then force the download to fail.
Basically aria2 tris all URIs available. So if long list of URIs
are
specified in Metalink, then aria2 will take a long time to fail
eventually if all URIs are outdated. This option eases this
situation
to limit the number of servers to try.
* src/FtpNegotiationCommand.cc
* src/HelpItemFactory.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/PeerStat.h
* src/RequestGroup.cc
* src/RequestGroup.h
* src/SegmentMan.cc
* src/SegmentMan.h
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed the bug that bulkReceiveResponse() reads all received data
as a
response even if more than one response is in it.
* src/FtpConnection.cc
* src/FtpConnection.h
* test/FtpConnectionTest.cc
Added --connect-timeout option to specify connect timeout in
seconds.
This option is in effect for HTTP/FTP/proxy server. The timeout
for
connecting to BitTorrent peer is not controlled by this option.
* src/AbstractProxyRequestCommand.cc
* src/FtpNegotiationCommand.cc
* src/HelpItemFactory.cc
* src/HttpRequestCommand.cc
* src/OptionHandlerFactory.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Implemented the ability to get timestamp from remote FTP server
using
MDTM command described in RFC3659.
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* test/FtpConnectionTest.cc
* test/Makefile.am
Implemented the ability to get timestamp from remote HTTP server
and
apply it to local file. To enable this feature, --remote-time
option
is added. No usage text has been written yet.
If several servers returns difference timestamp, then aria2 uses
latest
one.
* src/CopyDiskAdaptor.cc
* src/CopyDiskAdaptor.h
* src/DirectDiskAdaptor.cc
* src/DirectDiskAdaptor.h
* src/DiskAdaptor.h
* src/File.cc
* src/File.h
* src/HttpHeader.cc
* src/HttpHeader.h
* src/HttpResponse.cc
* src/HttpResponse.h
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* test/CopyDiskAdaptorTest.cc
* test/FileTest.cc
* test/Makefile.am
* test/Makefile.in
* test/MultiDiskAdaptorTest.cc
* test/TestUtil.cc
Fixed the bug that DiskWriterEntry is not created when its
FileEntry.isRequested() is false and it doesn't share a piece
with
other FileEntries that are requested. This bug causes
segmentation fault
in the end.
Fixed the bug that exception is thrown when
MultiDiskAdaptor::size() is
called if the number of file entries are greater than max open
files.
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/DiskAdaptor.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* test/MultiDiskAdaptorTest.cc
If an error occurred with a URI, remove identical URI from
remaining
URI list because it is likely that same error occurred in the
end and it
is waste of time.
* src/AbstractCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
Moved implementation to SimpleRandomizer.cc from
SimpleRandomizer.h.
Added return value of getpid() to argument of srand() to achieve
more
randomized value.
* src/SimpleRandomizer.cc
* src/SimpleRandomizer.h
Contact tracker frequently when the number of connections are 0
and
download is not finished yet.
* src/ActivePeerConnectionCommand.cc
* src/BtAnnounce.h
* src/DefaultBtAnnounce.cc
* src/DefaultBtAnnounce.h
* test/MockBtAnnounce.h
Added _incoming member to Peer class and made it true if the
peer
initiated connection. Don't add those peer to UTPex message.
If extended handshake is received, assign _incoming to false.
* src/DefaultBtInteractive.cc
* src/HandshakeExtensionMessage.cc
* src/Peer.cc
* src/Peer.h
* src/PeerListenCommand.cc
Made files whose name ends with ".gz", ".tgz" not inflated by
Content
Encoding Decoder. Removed size threshold for turning off on the
fly
inflation because resulting file may or may not be inflated
depending
on the file size and I think it is not expected by users.
This change fixes segmentation fault when Metalink file contains
gzipped
file and its filesize is provided.
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
Added CookieStorage class which is based on RFC2109 and manages
cookies
more strictly than CookieBox and CookieBoxFactory class.
* src/CookieStorage.cc
* src/CookieStorage.h
* src/Cookie.cc
* src/Cookie.h
* test/CookieStorageTest.cc
* test/CookieTest.cc
Bump up version number of dht.dat file to 3. In version 3
format, time
is stored in 64bit, network byte order.
New build can load old format(version 2) but it saves the file
in new
format. It means once you used new build, your dht.dat becomes
incompatible with older build.
* src/DHTRoutingTableDeserializer.cc
* src/DHTRoutingTableSerializer.cc
* test/DHTRoutingTableSerializerTest.cc
Bump up version number of .aria2 control file to 0001.
New aria2 can still load version 0000 file but it saves the file
in
version 0001 format. It means that new aria2 can resume download
started by old aria2 but the opposite is not true.
* src/DefaultBtProgressInfoFile.cc
* src/DefaultBtProgressInfoFile.h
* test/DefaultBtProgressInfoFileTest.cc