* Update HOMEPAGE
Chagnelog:
aria2 1.30.0
============
Release Note
------------
This release fixes several bugs. See Changes below for detailed bug
fixes. This release adds an ability to expand `${HOME}` to user's
home directory in several options. It would be useful when used in
configuration file. -S option against torrent file now prints out DHT
nodes.
Changes
-------
* mingw: Use sqlite 3.15.2
* Fix bug that --disable-websocket causes build error
* Fix bug that lower bound of optimize-concurrent-downloads becomes 1
GH-798
* Print DHT nodes with -S option
GH-795
* Take into account address family when resolving DHT node address
GH-794
* Allow block device file to -i option
GH-785
* Expand `${HOME}` to user's home directory in several options
The following options implement this substitution:
* --ca-certificate
* --certificate
* --dht-file-path
* --dht-file-path6
* --dir
* --input-file
* --load-cookies
* --log
* --metalink-file
* --netrc-path
* --on-bt-download-complete
* --on-download-complete
* --on-download-error
* --on-download-start
* --on-download-stop
* --on-download_pause
* --out
* --private-key
* --rpc-certificate
* --rpc-private-key
* --save-cookies
* --save-session
* --server-stat-if
* --server-stat-of
* --torrent-file
GH-780
* Document that libaria2 is not thread safe
GH-775
* configure: Use pkg-config to find libs whenever possible
Use pkg-config to find cppunit, libxml2 and expat. All those
libraries provide pkg-config files, and in all of those cases the
pkg-config macro is superior to the custom macros used currently.
The advantages of pkg-config files include:
- Explicit static linking support via --static. Currently, e.g.
'xml2-config --libs' prints all libraries needed for static
linking when doing dynamic linking unnecessary, resulting in
unnecessary direct deps.
- Better cross-build support. You don't have to build the additional
*-config tools for target.
- Better multilib support. Per-ABI pkgconfig directories are
commonly supported while packages usually fail to look for
per-CHOST *-config variants.
- Better override support. The current macros allow little to no
result overrides, the pkg-config macros let you pass FOO_CFLAGS
and FOO_LIBS manually.
- Cleaner version checks. The code used in libxml.m4 is really
creepy.
Patch from Michał Górny
GH-773
* WinTLS: Rewrite writeData
We re-wrote WinTLSSession::writeData. The major points are:
* Buffer is now preallocated once handshake is finished.
Previously, they are allocated each time when we send one TLS
record.
* Schannel uses header, body and trailer for each secBuffer. Now we
send them off at once using WSASend which is windows counterpart
of sendv. Previously, we do memmove if some of them are
truncated.
* We don't try to send application data in
WinTLSSession::closeConnection, since semantically we need same
application data used to create TLS record before. Using 0 length
data to finish sending buffered data looks like a hack.
GH-772
Many of these definitely do not depend on readline.
So there must be a different underlying problem, and that
should be tracked down instead of papering over it.
Solves:
/usr/libexec/binutils225/elf/ld.gold: error: cannot find -lreadline
The missing specification is obvious on DragonFly because there's
no publically accessible version of readline in base.
Release Note
------------
This release fixes the bug that progress summary is not shown timely.
Changes
-------
* Fix bug that progress summary is not shown timely
* Fix "-sqlite ssl" build (pkg-config required).
* Fix -nls build (PLIST problem).
Changelog:
aria2 1.18.10
=============
Release Note
------------
This releases fixes several bugs reported since the last release.
Changes
-------
* Add encoding specifier to Russian man page
Fixes GH-341
* Mingw: Use _wgetenv to get user's home directory
Fixes GH-342
* Handle linux getrandom returning EINTR on interrupts/signals
Also handle ENOTSUP failures where aria2 was build with linux
headers newer than the actual running kernel.
Fixes GH-336
aria2 1.18.9
============
Release Note
------------
This releases fixes memory leak with OpenSSL and crash on OSX when
proxy is used. We added several new features. Adler32 checksum is
now available in --checksum option and hash element in Metalink files.
We added --bt-detach-seed-only option, which excludes seed-only
downloads when counting concurrent active downloads (-j option). We
disabled SSLv3 by default. If you ever want to enable it or further
tune the TLS protocols to enable, use new --min-tls-version option.
--bt-force-encryption option was added to make requiring BitTorrent
full encryption easier. From this release, we build Android binary
using API level 16.
Changes
-------
* Support HTTP date ending "+0000" as well as "GMT".
Closes GH-330
* Revise getRandom facilities
Use one of the following to provide random bytes:
- Windows CryptGenRandom
- Linux getrandom (syscall interface to urandom, without nasty
corner cases such as file descriptor exhaustion or re-linked
/dev/urandom)
- std::device_random (C++ random device, which usually will be
urandom)
This also equalizes util::getRandom and SimpleRandomizer (the former
will now use the latter) instead of having essentially two different
PRNG interfaces with potentially different quality.
Closes GH-320
* Added debug log of all Metalink URLs with final priorities
Patch from Dan Fandrich
* Use gcc-4.9 and android-16 API level for android build
* Add --bt-force-encryption option
This option requires BitTorrent message payload encryption with
arc4. This is a shorthand of --bt-requre-crypto
--bt-min-crypto-level=arc4. If true is given, deny legacy
BitTorrent handshake and only use Obfuscation handshake and always
encrypt message payload. This option defaults to false.
* TLS: Fix memory leak with OpenSSL
Based on the patch submitted by midnight2k
* Warn about insecure SSL connections.
Fixed GH-313
* Add --min-tls-version option
The --min-tls-version option specifies minimum SSL/TLS version to
enable. Possible Values: SSLv3, TLSv1, TLSv1.1, TLSv1.2 Default:
TLSv1
* LibsslTLSContext: Disable SSLv3 and enable ECDHE cipher suites
* Add Dockerfile.mingw
Dockerfile.mingw builds aria2 Windows binary. It is probably the
easiest way to build the Windows binary.
* Fix crash when JSON batch response vector is empty
* Fix doc: Wrong rpc secret token prefix
* Add --bt-detach-seed-only option
This option excludes seed only downloads when counting concurrent
active downloads (-j option). This means that if -j3 is given and
this option is turned on and 3 downloads are active and one of those
enters seed mode, then it is excluded from active download count
(thus it becomes 2), and the next download waiting in queue gets
started. But be aware that seeding item is still recognized as
active download in RPC method.
* mingw: Use MoveFileExW for better atomic move
* Work around libintl's vprintf macro messing with OutputFile::vprintf
Patch from David Macek
* Fix crash on OSX when proxy is used
See GH-275
* Support Adler32 checksum
Adler32 checksum is available for --checksum option and hash element
in Metalink files. Currently, we use Adler32 implementation in
Zlib.
Changelog:
aria2 1.18.8
============
Release Note
------------
This releases fixes the bug that aria2 cannot read piped stdin on
mingw32. It also fixes busy loop on mingw32 when SSL/TLS is used. We
also fixed 2 crashes which can occur on all platforms.
Changes
-------
* WinTLS: Fix abrupt connection closing and closing in general.
Fixes GH-277
* LibsslTLSSession: Treat 0 from readData as EOF
* Enable dynamicbase and nxcompat in Windows binaries
* Fix crash in OpenedFileCounter::ensureMaxOpenFileLimit()
The crash happens if PieceStorage and/or DiskAdaptor are not
initialized in one of active RequestGroups.
* mingw32: Fix bug that aria2 does not read piped stdin
* Fix std::length_error when no_proxy is used
This is regression introduced in 8cada497.
* Try to set sane limits for RLIMIT_NO_FILE
E.g. on OSX the default is 256, which isn't exactly compatible with
torrent downloads.
Closes GH-257
* Delay auth failures instead of PBKDF2
Closes GH-256
aria2 1.18.7
============
Release Note
------------
This release fixes regression which makes 100% CPU utilization in
multi-file torrent download with -V option. It also fixes build error
on big endian platforms.
Changes
-------
* Fixed segfault unsupported encodings
Patch from diadistis
* Fix regression 100% CPU utility when -V is used and download is
multi-file bittorrent downloads.
This is regression of a3426821c8a7f9cf8d80a81726157d4eb844f661
* Fix compile error on big endian platform
aria2 1.18.6
============
Release Note
------------
This release fixes several bugs reported in github issues and adds a
feature to make RPC authentication more resilient to certain attacks.
New option --pause-metadata is added. The explanation is a bit log,
so check the changelog and manual. The session is now only saved if
there are changes from the last saved state.
From this release, MinGW32 build uses Windows native TLS
implementation and no longer use OpenSSL library.
Changes
-------
* Disard cache when checking checksum
This will slow down checksum checking but does not thrash cache.
* Compat with libuv 0.11 (Unstable)
Fixes#241
* Drop WinMessageDigestImpl.
The algorithms the `CryptProv` on Windows supports does not
currently include SHA-224, so there is a "dark spot" in this
implementation. Also on Win XP < SP3, most of the SHA-2 family is
not actually supported. All other implementation provide support
for MD5, SHA-1 and all of the SHA-2 family, hence drop the
incomplete WinMessageDigest implementation in favor of any other
supported implementation (at least the internal implementation is
always available at compile-time).
* Add --pause-metadata option
This option pauses downloads created as a result of metadata
download. There are 3 types of metadata downloads in aria2: (1)
downloading .torrent file. (2) downloading torrent metadata using
magnet link. (3) downloading metalink file. These metadata
downloads will generate downloads using their metadata. This option
pauses these subsequent downloads.
* Improve compiler/platform/libs information in logs
Add and use usedCompilerAndPlatform(). This adds compiler
information to INFO logs and the --version output, and may be
helpful when trying to diagnose/reproduce user-reported problems.
Also make INFO logs include usedLibs() output.
Closes#235
* Fix use-after-free on exit with multi-file torrent download + DHT
DefaultPieceStorage may be referenced by one of DHT task (e.g.,
DHTPeerLookupTask), after RequestGroup was deleted, and even after
RequestGroupMan was deleted. DefaultPieceStorage has a reference to
MultiDiskAdaptor which calls RequestGroupMan object on destruction.
So when DHT task is destroyed, DefaultPieceStorage is destroyed,
which in turn destroys MultiDiskAdaptor. DHT task is destroyed
after RequestGroupMan was destroyed, MultiDiskAdaptor will use now
freed RequestGroupMan object, this is use-after-free.
* Fix bug that zero length file is not opened when flushing cache
This bug was only seen when MultiDiskAdaptor was used.
* Support PREF_DIR change for Metalink files
Reworked previous commit adeead6f0396e2f8551d1182972e277728fd6c8b,
and now support changing PREF_DIR for Metalink downloads.
* Fix assertion failure when dir option of paused HTTP/FTP download is
changed
When the directory is changed via aria2.changeOption RPC method, we
directly change first FileEntry's path using FileEntry::setPath().
If there is no PREF_OUT option is given, basically file name is
unknown, so we just set empty string and let the next run determine
the correct file name and new directory is applied there. But
previous code does not reset length property of FileEntry, so the
unexpected code path is taken when unpaused and its path expects
path is not empty string. This commit fixes this issue by setting
length to 0 using FileEntry::setLength().
* Save session only when there is change since the last serialization
This is a slight optimization not to cause useless disk access.
This only applies to saving session automatically (see
--save-session-interval). aria2.saveSession and serialization at
the end of the session are always performed as before.
When serialization, we first check that whether there is any change
since the last serialization. To do this, we first calculate hash
value of serialized content without writing into file. Then compare
this value to the value of last serialization. If they do not
match, perform serialization.
* Fix (unknown length) downloads larger than 2GiB
Closes#215
* Fix F_PREALLOC based allocation on some OSX versions
* Use index.html as filename for conditional-get when file is missing
in URI
Previously we disabled conditional-get if file part is missing in
URI. But we use constant string "index.html" in this case, so we
can do the same to determine the modification time. In this patch,
if we have file part in URI, we are not going to set absolute file
path in FileEntry, since it prevents content-disposition from
working.
* Always add README.html to dist_doc_DATA
rst2html is required to produce README.html from README.rst. We
include generated README.html to distribution. And rst2html is not
required when compiling sources in distribution and always
README.html is available.
* Validate token using PBKDF2-HMAC-SHA1.
This change should make token validation more resilient to:
- timing attacks (constant time array compare)
- brute-force/dictionary attacks (PBKDF2)
Closes#220
* Add --disable-websocket configure option
* mingw32: Enable wintls and compile with GMP
By enabling wintls, we can use Windows certificate store to validate
server's certificate. Previously, we built windows build using
openssl and since we don't bundle CA certificates, aria2 fails to
validate server's certificate unless user setups their CA
certificates. GMP provides fast big integer calculations, whic is
used in BitTorrent encryption.
* AppleTLS: Enable BEAST mitigations in ST
Only available in 10.9+, but since we might be building on a
previous version but running on 10.9+, always try to set the option.
* WinTLS: Accept chains with no revocation information.
This is kind what browser do anyway (IE, Firefox, Chrome tested),
what AppleTLS does, what GnuTLS does and what OpenSSL
does. Actually, most browsers will also be OK with the CRL/OCSP
provider being offline. WinTLS will still fail in that case.
Should revocation information be available in the trust chain (CRL
or OCSP) the certificate still will be checked!
"Real" CAs, aka. those provided by the OS or system CA bundle,
usually provide revocation information and are thus still checked.
It should be mostly (only?) custom (organization) CAs that lack
revocation information, but those users might want to use aria2 in
their intranets and VPNs anyway ;)
See #217
* Fix GnuTLS 2.x compatiblity
Closes GH-216
* AppleTLS: Use newer, non-deprecated API in 10.8+
aria2 1.18.5
============
Release Note
------------
This release fixes BitTorrent download failure on Mingw build.
Changes
-------
* Ignore error when setting DSCP value
Setting DSCP is additional feature and failure to enable it should
not abort download entirely. This change fixes the bug that windows
build does not perform bittorrent downloads.
Changelog:
aria2 1.18.4
============
Release Note
------------
This release adds new RPC authorization mechanism using --rpc-secret
option. The existing --rpc-user and --rpc-passwd options are now
deprecated, and all applications using RPC API is strongly encouraged
to migrate to the new mechanism. See RPC INTERFACE section in aria2
manual page for the details. The new RPC method, aria2.saveSession,
was added, which tells aria2 server to save session file immediately.
There are several enhancements and bug fixes. See the changes for the
details.
Changes
-------
* Added support for RPC channel encryption in aria2rpc
Patch from David Macek
* Add aria2.saveSession RPC method
This method saves the current session to a file specified by
--save-session option. This method returns "OK" if it succeeds.
* Add numStoppedTotal key to aria2.getGlobalStat() RPC method response
It shows the number of stopped downloads in the current session and
not capped by --max-download-result option. On the other hand, the
existing numStopped key also shows the number of stopped downloads,
but it is capped by --max-download-result option.
* Better handling of 30x HTTP status codes
Reference: http://greenbytes.de/tech/tc/httpredirects/
* Implement new RPC authorization using --rpc-secret option
Add future deprecation warning to --rpc-user and --rpc-passwd. Warn
if neither --rpc-secret nor a combination of --rpc-user/rpc-passwd
is set.
* Add --enable-color option to enable/disable terminal color output
* Add DSCP support
* gnutls: Don't fail handshake if returned error is not fatal
* Add workaround GnuTLS bug with OCSP status extension and
non-blocking socket
GnuTLS version 3.1.3 - 3.1.18 and 3.2.0 - 3.2.8, inclusive, has this
bug. For these versions, we disable OCSP status extension.
* Make GnuTLS log level dependent on the aria2 ones
aria2 1.18.3
============
Release Note
------------
This release fixes the bug which may cause assertion failure after
multi-file downloads (e.g., multi-file metalink or torrent) are
performed several times due to the bad handling of --bt-max-open-files
option.
Changes
-------
* Fix crash if unpause failed before assigning BtProgressInfoFile
object
* Enable and check PIE in makerelease-osx
* Fix bug that numOpenFile_ is not reduced when MultiDiskAdaptor is
deleted
This bug caused assertion error in
RequestGroupMan::ensureMaxOpenFileLimit
* This package requires gcc 4.7 later from pkgsrc
Changelog:
aria2 1.18.2
============
Release Note
------------
This release fixes the wrong handling of return value of fork(), which
leads to high CPU usage. The progress readout has some color output.
Mingw32 build now receives colorized output. Mingw32 build now can
read unicode command-line arguments. The build script of OSX was
rewritten. The --bt-max-open-files now limits the number of opened
file globally for multi-file downloads instead of per download basis.
Changes
-------
* Remove the outdated, broken build_osx_release.sh
* Initial revision of the a new OSX release Makefile
* Allow using libgmp with AppleTLS/WinTLS
* Fix crash when metaurl contains unsupported URI or text
* Fix bad fork() return value handling
* Use some colors in progress reports (where available)
* Implement basic color support for the Windows console
Only \033[*m (SGR) is supported, with a 16+16 color terminal.
* AppleTLS: Implement PKCS12 loading.
* Limit number of opened file globally with --bt-max-open-files option
This change changes the behavior of --bt-max-open-files. Previously,
it specifies the maximum number of opened files for each multi-file
download. Since it is more useful to limit the number globally, the
option now specifies the global limit. This change suggests that
aria2.changeOption() method now ignores --bt-max-open-files and
aria2.changeGlobalOption now reads it and dynamically change the
limit.
* Don't fail multiple concurrent dl same file if auto-file-renaming is
enabled
* mingw32: Use CommandLineToArgvW() and GetCommandLineW() to read
cmd-line args
This change enables aria2 to read unicode characters in
command-line.
aria2 1.18.1
============
Release Note
------------
This release fixes the percent-encoding bug which affects file name
encodings. It adds PKCS12 support in certificate import. It also adds
experimental internal implementation of message digest functions, ARC4
cipher and bignum. It means that no external libraries are required to
build BitTorrent support, but this feature is still marked as
experimental. This release also fixes the android build with NDK r9.
Changes
-------
* LibsslTLSContext: Remove weak cipher suite
* AppleTLS: Enable --certificate
* util::percentEncodeMini: Fix regression bug removed unsignedness
srange-based for around std::string is convenient but several
functions depend unsigned char for correctness and readability.
* Log exception; throw error if loading private key and/or certificate
failed
* Provide internal ARC4 implementation
Now you can build bittorrent support without without external
libraries, meaning you can skip libnettle, libgmp, libgcrypt, GnuTLS
and OpenSSL on OSX (for now).
* Internal implementation of DHKeyExchange
Reusing a bignum (well, unsigned very-long) implementation I had
lying around for years and just cleaned up a bit and brought to
C++11 land.
It might not be the most performant implementation, but it shoud be
fast enough for our purposes and will go a long way of removing
gcrypt, nettle, gmp, openssl dependencies when using AppleTLS and
WinTLS (upcoming).
* PKCS12 support in --certificate and --rpc-certificate options.
* Add --disable-ssl configure option
* Add internal md5 and sha1 message digests
* Fix AppleMessageDigestImpl use with large data
* Set old cookie's creation-time to new cookie on replacement
As described in http://tools.ietf.org/html/rfc6265#section-5.3
* Fix link error with Android NDK r9
Since Android ndk r9, __set_errno is deprecated. It is now defined
as inline function in errno.h. The syscall assembly calls
__set_errno, but since libc.so does not export it, the link
fails. To workaround this, replace all occurrences of __set_errno
with a2_set_errno and define it as normal C function.
aria2 1.18.0
============
Release Note
------------
This release changes the default disk cache size to 16 MiB. To change
the default size, --with-disk-cache configure option was added. Now
used URIs are also saved by --save-session option. The control file is
now always saved if --force-save is given. The ctrl-c handling on
Mingw build was improved. The internal intl library is no longer
supplied. From this release, C++11 compiler is required to build aria2
executable. For gcc, at least 4.6.3 is required.
Changes
-------
* Use AM subdir-objects
Doing so in AM_INIT_AUTOMAKE seems to be the most compatible way of
doing so.
Closes GH-120
* AM_SILENT_RULES([yes]) with backwards-compatiblity
Supported since automake-1.11. There is no point in having the very
verbose compile stuff running about, which cannot even silenced
properly with `make -s` by default. Otherwise, `make V=1` or
`--disable-silent-rules` are your friends
* Fix automake-1.14 am_aux_dir
AC_USE_SYSTEM_EXTENSIONS will cause AC_PROG_CC, which is overridden
by automake-1.14, which will then init (part) of automake, in
particular am_aux_dir expansion, which in turn relies on ac_aux-dir,
which is not initialized at this point, and thus: certain doom (or
fun, depending on your POV and mood :p)
Hence call AC_USE_SYSTEM_EXTENSIONS only after
AM_INIT_AUTOMAKE. This, of course, caused a lot of related macro
shuffling.
Tested against automake-1.10 (OSX Lion/XCode version) and
automake-1.14 (homebrew version)
* Require external gettext for --enable-nls
And stop using the internal flavor with ./intl
* Make AX_CXX_COMPILE_STDCXX_11 test for -stdlib=libc++ via std::shared_ptr
The clang shipped with OSX XCode and clangs not build enabling
libcpp, will default to the libstdc++ headers and lib installed on
the system. In the OSX case, that libstdc++ is the one bundles with
gcc-4.2, which is far too old to provide all required C++11 types,
such as std::shared_ptr. Hence, the C++11 check should try to
compile a program with a C++11 type and try -stdlib=libc++ if the
default lib fails to compile said program.
* Make the configure check for C++11 compiler mandatory
Remove stray "dnl", so that mandatory actually works with (my)
autoreconf.
* Always build doc/manual-src
Should sphinx-build be not available AND the man file not be prsent,
then just "touch" it into existence (and warn about that)
* Win: Use SetConsoleCtrlHandler for SIGINT/SIGTERM
* Implement a simple resource lock (threading)
In this initial implementation Locks are no-ops on platforms other
than Windows.
* Check for sphinx-build during configure
* Add --with-disk-cache configure option
Enables packagers more fine grained control over the default value
without having to mess with config files.
See GH-115
* Change defaults: Enable 16M disk cache by default.
* Always save control file if --force-save is given
* Set log level DEBUG for unittests
* Check that C++ compiler supports override keyword
If the compiler supports override, define CXX11_OVERRIDE as
override, otherwise define it as empty. Use CXX11_OVERRIDE instead
of override.
* AppleTLS: Fix MessageDigestImpl
* AppleTLS: Fix session CFRelease stuff
* Use AX_CXX_COMPILE_STDCXX_11 macro to detect C++0x/C++11 support in
compiler
* Require -std=c++11 and use std::shared_ptr instead of SharedHandle
* Join URI on redirect
* Send HAVE message to the peer which the piece is downloaded from
Historically, aria2 did not send HAVE message to the peer which the
piece is coming from, thinking it is obvious that the peer knows we
have the piece. But it is not obvious if one piece is download from
more than 1 peers (e.g., end game mode). So it is better to send
HAVE to all peers connected.
* Improvements to --follow-torrent=false documentation.
Patch from gt
* SessionSerializer: Truly unique URIs
Before, only spent uris where sanitized not to be contained within
remaining uris. Change this so that each uri in the
union(remaining,spent) get saved once at most. The order of the
uris will won't be changed, with remaining uris going first followed
by spent uris.
Also avoid copying the uri std::strings around during dupe checking,
usually resulting in better performance regarding CPU and space.
* Make getOption RPC method return option for stopped downloads
* SessionSerializer: Save spent URIs as well as remaining ones
Changelog:
aria2 1.17.1
============
Release Note
------------
This release adds large file support for Android build and libuv
support for event polling mechanism. AppleTLS now supports Snow
Leopard (10.6). The experimental libaria2 C++ library API was added.
Changes
-------
* Add code to detect rst2html.py or rst2html
* AppleTLS: Properly support Snow Leopard (10.6)
Tested on 10.6.8 + XCode 4.2 (llvm-gcc-4.2, clang)
Contributed by Nils Maier
* Enable multicast loopback in BitTorrent local peer discovery
* Enable TLS1.1 with gnutls build
* Support off64_t for Android build
Android NDK R8e does not provide ftruncate64, but bionic has the
assembler code to access kernel function. We borrowed those
ftruncate64.S files from android source code repository. It turns
out that x86 asm.h in NDK R8e is also broken, so latest asm.h was
also borrowed.
* Check zlib availability usin AC_CHECK_LIB
This is workaround for zlib 1.2.3 which does not come with
pkg-config file.
* Treat response is completed if EOF is received before streamFilter
completes
This fixes the error with web server which has buggy chunked
encoding.
* uitos: Fix off-by-one error bug
* Add configure support for linking tcmalloc_minimal and/or jemalloc
Both tcmalloc_minimal and jemalloc outperform the native malloc
implemention on Windows (MSVCRT) in terms of committed memory
consumption (~-30%) and performance (e.g. far less page faults,
~-60%), depending, of course, on the actual workload. The longer
the download queue, the bigger the impact ;)
On *nix the picture is a little different... tcmalloc usually still
outperforms the native malloc implementation, but not that
significantly than on Windows. jemalloc however is only marginally
better than recent native Linux implementations, while it is already
used by some BSD as the native allocator.
tcmalloc is part of gperftools and very mature and tested by now. It
doesn't work on OSX in the default configuration, however.
http://code.google.com/p/gperftools/
jemalloc is the default allocator at least on FreeBSD and NetBSD and
used in Firefox. http://www.canonware.com/jemalloc/index.html
Contributed by Nils Maier
* Close GZipFiles in the d'tor
Contributed by Nils Maier
* Add libaria2, C++ library interface to aria2
The libaria2 is a C++ library and offers the core functionality of
aria2. The library takes care of all networking and downloading
stuff, so its usage is very straight forward right now. See
libaria2ex.cc in examples directory to see how to use API. By
default, libaria2 is not built. See libaria2 section in README to
how to enable it.
The APIs in this release is considered experimental.
* Add missing check for sigaction
* Fix cached data is not flushed when downloaded data is less than
16KiB
* LibUV: Implement LibuvEventPoll
LibUV event will use the best available polling method on a system,
kind of like aria2 does already with the different *EventPoll
implementations. However, libuv may support different/newer polling
mechanisms; for example on Windows it will use IO Completion Ports
which are superior to select() ;)
Contributed by Nils Maier
aria2 1.17.0
============
Release Note
------------
This release adds Mac OS X native SSL/TLS library support. The IPv6
asynchronous DNS is enabled by default and A/AAAA lookups are done in
parallel. The simple Happy Eyeballs algorithm was implemented to
mitigate long timeout when connecting to IPv6 host on dual-stack host.
--save-session option only saves the options specified by command-line
or RPC.
Changes
-------
* Updated Russian manual
Contributed by ITriskTI
* Updated Portuguese manual
Contributed by Gilberto dos Santos Alves
* Append --static to pkg-config arguments when ARIA2_STATIC=yes
* Save options directly specified for download in --save-session
This change makes --save-session save only options specified for
download, more specifically, options in command-line, -i file and
via RPC. The other options from conf file and default values are not
saved. This will drastically decrease the size of session file.
* Save URI returned only from FileEntry::getRemainingUris()
The currently used URIs are inserted back into remaining URI list in
FileEntry::putBackRequest(), which overlaps to some of the URIs in
spentUris_. If we save spent URIs, each time save is performed, the
number of URIs are increased due to this overlap. This change fixes
this bug.
* Print linked 3rd party libraries with version in `aria2c -v` output
* AppleTLS: Support credentials via KeyChain fingerprints
Contributed by Nils Maier
* AppleTLS: Implement AppleTLS and Apple Message Digest
Contributed by Nils Maier
* Use info level log for system trusted ca imports failure
This is because on some platforms (gnutls on cygwin for example),
library always fails for this function and getting ERROR every time
aria2c invoked is too hard.
* Don't add Windows native DLLs for Cygwin build
* Remove deprecated options: --enable-direct-io and --metalink-servers
* Deprecate --enable-async-dns6
The IPv6 asynchronous name resolver is enabled if the host has at
least one interface with IPv6 address configured (the loopback
address will not be counted), which is roughly the same behaviour of
the standard getaddrinfo(3). To disable IPv6 asynchronous name
resolver, use --disable-ipv6.
* Fix uninitialized UDPTrackerClient::numWatchers_
* Implement simple Happy Eyeballs for HTTP/FTP downloads
* Parallel A and AAAA record lookups with c-ares
But we don't wait for AAAA query response if A query response has
been received. If we got IPv4 lookup response, we don't wait for
IPv6 lookup response. This is because DNS server may drop AAAA query
and we have to wait for the long time before timeout. We don't do
the inverse, because, based on todays deployment of DNS server,
almost all of them can respond A query just fine.
Changelog:
aria2 1.16.4
============
Release Note
------------
This release fixes the bug that active downloads are not saved with
--save-session-interval and the bug that aria2 hangs when size of
download result exceeds its maximum. BitTorrent UDP tracker support
was added. If the filename specified using --save-session ends with
".gz", aria2 stores the session file in gzipped form. The -i option
can handle this gzipped file as well as plain text file. 1.15.2 based
Portuguese translated manual was added.
Changes
-------
* Make configure argument meaning more consistent and obvious.
Most other software uses --disable/--without for features it does
build or at least check by default.
Change aria2 configure options so that:
* --enable-*: do not build by default, unless --enable specified
* --disable-*: check and build by default, unless --disable specified
* --with-*: do not use by default, unless --with specified
* --without-*: check and use by default, unless without specified
Contributed by Nils Maier
* Allow for out-of-tree Sphinx builds
Contributed by Nils Maier
* Bring back datetime in console log
* Run checksum check if -V and -c are used and file is completed
With -c option, aria2 can continue download after the existing file
position. If it is not completed, then after completion aria2 runs
checksum checking if available. But if existing file has already
been completed, then CreateRequestCommand exits without issuing
checksum checking. And aria2 treats it download error because it
needs checksum verification but it has not been done. This change
fixes this by properly checking download state and issue checksum
checking before CreateRequestCommand.
* Support for gzipped -i and --save-session
Saved sessions may very large, as in hundreds and even thousands of
megabyte when dealing with large queues. Add support to save and
reload sessions to gzipped files, when libz is available.
The session serializer will output gzipped contents when the file
ends with .gz, while the input file reader (UriListParser) will
accept whatever is thrown at it.
Document -i/--save-session gzip behaviour
Contributed by Nils Maier
* Do not use a virtual varargs function
This stuff breaks in some compiler (configurations)
Contributed by Nils Maier
* Check for sys/signal.h and/or signal.h
mingw-w64 does not actually have sys/signal.h, while OSX currently
has a broken signal.h Better check the presence of both and use
sys/signal.h if present, else signal.h
Contributed by Nils Maier
* Hygiene: Fix some clang warnings, mostly unused private members.
Contributed by Nils Maier
* Fix bustage on OSX with ./configure CC=cc CXX=c++ (clang)
Contributed by Nils Maier
* Do not reference RequestGroups longer than necessary
There is an initial vector of SharedHandle<RequestGroup> to seed the
DownloadEngine. This vector was however kept alive via main.cc ->
MultiUrlRequestInfo up until the program exits, hence effetively
leaking all initial RequestGroups and associated object instances.
Hence, as a matter of dirty-workaround, drop the contents of that
initial vector as soon as it is not required any longer.
Contributed by Nils Maier
* Detect console with on Windows
Contributed by Nils Maier
* Fix infinite loop when size of downloadResults_ exceeds maxDownloadResult_
* Support BitTorrent UDP tracker
It shares UDP listening port with IPv4 DHT. At the moment, in order
to enable UDP tracker support, enable IPv4 DHT.
* Show correct end byte in error message when HTTP response range is not ok
Previously, unless HTTP pipelining is enabled, end byte in that
message is always 0. With this change, it shows correct end byte
sent to the HTTP server.
* Add Portuguese manual
This translation is based on aria2 version 1.15.2 manual.
Contributed by Gilberto dos Santos Alves
* Fix bug that active downloads are not saved with --save-session-interval
Changelog:
aria2 1.16.3
============
Release Note
------------
This release fixes the bug which causes random crash. It also fixes
socket option setting failure on Windows platform.
Changes
-------
* Fix failure to set TCP_NODELAY on Windows
On Windows setting TCP_NODELAY after non-blocking connect fails at
least on Windows 7.
* Fix invalid iterator handling when deleting RequestGroup
aria2 1.16.2
============
Release Note
------------
This release fixes the bug which causes long running BitTorrent
download to stall. The several new options have been added.
Changes
-------
* Check SSL_OP_NO_COMPRESSION is available before using it
* Fix bug returnPeer is not called if sequence_ == INITIATOR_SEND_KEY
In InitiatorMSEHandshakeCommand, when aborting connection, we must
return peer to the PeerStorage. But it is not done if sequence_ is
INITIATOR_SEND_KEY. This causes stale Peer objects whose usedBy()
returns true eventually occupies peer list and aria2 cannot make any
connections.
* Accept k and m as well as K and M in util::getRealSize()
* mingw32: Make NTFS sparse file on --file-allocation=trunc
* Added --save-session-interval option
--save-session-interval option saves error/unfinished downloads to a
file specified by --save-session option every SEC seconds. If 0 is
given, file will be saved only when aria2 exits.
* Use request URI as referer if --referer="*" is given
* Log warn if unknown option is found in config file or -i file
* Added --console-log-level option
--console-log-level option sets log level to output to console.
Changelog:
aria2 1.16.1
============
Release Note
------------
This release adds the ability to persist GID across sessions. The GID
will be saved with --save-session. There are several restrictions how
GID is persisted. See the manual for details. For this change, now GID
is 64 bits binary data and represented by 16 characters hex string in
RPC query. The disk cache feature was added, which may reduce disk
activity. The console readout was redesigned. The warning displayed
when --file-allocation=falloc is used on MinGW32 build was removed as
a bug.
Changes
-------
* mingw32: Re-open files with read-only mode enabled on seeding
On Mingw32 build, if aria2 opens file with GENERIC_WRITE access
right, some programs cannot open the file aria2 is seeding. To avoid
this situation, re-open files with read-only enabled when seeding is
about to begin.
* Save gid option with --save-session option
* Added --gid option
This option sets GID manually. aria2 identifies each download by the
ID called GID. The GID must be hex string of 16 characters, thus
[0-9a-zA-Z] are allowed and leading zeros must not be stripped. The
GID all 0 is reserved and must not be used. The GID must be unique,
otherwise error is reported and the download is not added. This
option is useful when restoring the sessions saved using
--save-session option. If this option is not used, new GID is
generated by aria2.
* Use 64 bits random bytes as GID
This change replaces the current 64 bit sequential GID with 64 bits
random bytes GID in an attempt to support persistent
GID. Internally, the GID is stored as uint64_t. For human
representation and RPC interface, GID is represented as 16 bytes hex
string. For console readout, 16 bytes are too long, so it is
abbreviated to first 6 bytes. When querying GID in RPC calls, user
can speicfy the prefix of GID as long as the prefix is shared by
more than 1 GID entries.
* Fixed BitfieldMan::getOffsetCompletedLength overflow on 32-bit systems
* mingw32: Use HANDLE only for MinGW32 build
* Changed console readout, making it more compact
"SIZE:" is removed because it is obvious. SEEDING, SEED, SPD and UP
are now replaced with SEED, SD, DL and UL respectively.
* Compact readout when more than 1 simultaneous downloads are going on
If more than 1 simultaneous downloads are going on, use more compact
format in readout. Currently, at most 5 download stats are
displayed.
util::abbrevSize() is rewritten to support "Gi" unit and provides
more compact abbreviation.
* Console color output
Log level and download result string is now colored.
* Logger: Simplified console output and change level format in log
The date and time are now removed from console output. The log
level is now formatted as "[LEVEL]".
* Start to find faster host before the number of missing segments becomes 1
The old implementation starts to find faster host when the number of
missing segment becomes 1. Because of --min-split-size option,
before the number of missing segment becomes 1, the number of
connection becomes 1 and it can be slow. In this case, we have to
wait until the last segment is reached. The new implementation
starts to find faster host when the remaining length is less than
--min-split-size * 2, to mitigate the problem stated above.
* Removed warning when --file-allocation=falloc is used in MinGW32 build
The warning was just a mistake. SetFilePointerEx + SetEndOfFile
actually allocate disk space.
* Write data in 4K aligned offset in write with disk cache enabled
This greatly reduces disk activity especially on Win + NTFS. Not so
much difference on Linux.
* mingw32: Removed FSCTL_SET_SPARSE set
* Added --disk-cache option
This option enables disk cache. If SIZE is 0, the disk cache is
disabled. This feature caches the downloaded data in memory, which
grows to at most SIZE bytes. The cache storage is created for aria2
instance and shared by all downloads. The one advantage of the disk
cache is reduce the disk seek time because the data is written in
larger unit and it is reordered by the offset of the file. If the
underlying file is heavily fragmented it is not the case.
changelog:
aria2 1.16.0
============
Release Note
------------
This release adds SSL/TLS encryption support in RPC transport. The new
RPC method aria2.appendUri is added, which is a wrapper to
aria2.changeUri. The Content-Disposition parser is now RFC 6266
conformant. The resource leak in XmlParser, JSON and Bencode parser
was fixed. The uploaded data size calculation bug was fixed. For
MinGW32 build, files are now opened with read/write shared mode.
Changes
-------
* mingw32: Open file using _wsopen and added --enable-mmap support
I tried CreateFile but the subsequent ReadFile fails with Access
Denied if sparse file is read on NTFS. I mostly reverted previous
changes and use _wsopen with read/write share enabled instead of
CreateFile.
This change also includes --enable-mmap support for MinGW32
build. Memory mapped file may be useful for 64-bits OS and lots of
RAM. Currently, FlushViewOfFile is not called during the download,
so it is slightly vulnerable against sudden power loss. I found lots
of read when resuming download due to page fault. So for now it is
useful for the initial download. I recommend not to use
--file-allocation=prealloc with --enable-mmap for MinGW32, because
it triggers page faults even in the initial download. Anyway, the
option is experimental.
* Removed PO files and generated aria2.pot from repository
Currently, message translation is done at launchpad. All PO files
can be exported from there. The merge process from launchpad is done
when new release. First download export file from launchpad And use
import-po script to import PO files into po directory.
* Set F_GLOBAL_NOCACHE for Mac OS X
* Enabled TCP_NODELAY
* Don't use AC_FUNC_MMAP
Don't use AC_FUNC_MMAP becaue it fails on some platforms (e.g.,
OpenWRT) which have mmap and it works in the way we use in aria2.
Instead use mmap in AC_CHECK_FUNCS list.
* Added --force-save option.
--force-save option saves download with --save-session option even
if the download is completed or removed. This may be useful to save
BitTorrent seeding which is recognized as completed state. The
default value is false.
* Get the correct uploaded data size
Subtract msgHdrLen_ from writtenLength to get the uploaded data
size. Without this correction, the seeder assumes it has uploaded
more data than it actually has.
* Made --http-no-cache false by default
* Fixed memory leak in AsyncNameResolver
* Fixed resource leak in XmlParser and GenericParser
* Reset iostream format state
* gnutls: Added more status checking when verifying peer
* Content-Disposition parser conforming to RFC 6266.
RFC 2231 Continuation is not supported.
* Reworked download/upload statistics calculation
The old implementation calculates download/upload statistics for a
RequestGroup by summing up all PeerStat objects. For global
statistics, those are summed together. This clearly incurs runtime
penalty and we introduced some kind of caching which updates
statistics every 250ms but it did not work right.
This change removes all these aggregation code, and instead makes
RequestGroup and RequestGroupMan objects hold NetStat object and
download/upload bytes are directly calculated by thier own NetStat.
This is far more simplar than the old way and less runtime penalty
and brings more accuracy.
* Added --rpc-save-upload-metadata option
If true is given, which is default, save the uploaded torrent or
metalink metadata in the directory specified by --dir option. The
filename consists of SHA1-hash hex string of metadata plus
extension. For torrent, the extension is '.torrent'. For metalink,
it is '.meta4'. If false is given to this option, the downloads
added by aria2.addTorrent or aria2.addMetalink will not be saved by
--save-session option.
* Perform SSL/TLS handshake after checking whether connection is established
* Fixed bug that --enable-mmap won't work if MultiDiskAdaptor is used
* RPC over SSL/TLS transport
To enable RPC over SSL/TLS, specify server certificate and private
key using --rpc-certificate and --rpc-private-key options and enable
--rpc-secure option. After the encryption is enabled, use https and
wss scheme to access RPC server.
* aria2rpc: Added appendUri command
This command calls aria2.changeUri(GID, fileIndex, [], [URI,...])
internally.
* Don't send Proxy-Connection header field
* Don't set SNI hostname if it does not include "." for GNUTLS
* Disable SSL/TLS compression with OpenSSL
* Pause download even if download is completed
This allows to pause and unpause BitTorrent seed.
* Use execlp() instead of execl()
Changelog:
aria2 1.15.2
============
Release Note
------------
This release fixes several critical bugs. It also adds new features
such as TLS SNI and CORS support. The --file--allocation option now
take another value trunc. The new option --enalbe-mmap was added.
aria2 now uses system-wide SSL/TLS certificates by default, which
eliminates the requirement to specify --ca-certificate option.
Changes
-------
* Catch exception from Socket::getPeerInfo() when pooling connection.
Socket::getPeerInfo() may fail if its TCP connection has already
disconnected. In this case, we log this error. The success or
failure of pooling connection should not affect the later execution
of the program. This bug may cause segmentation fault if
Socket::getPeerInfo() throws exception during pooling connection
after successful tracker request.
* Fixed assertion error if --retry-wait is used. In
CreateRequestCommand, if Request object returned from getRequest()
is still sleeping, CreateRequestCommand pools it back but still
holds its reference. This makes assertion error in
UnknownLengthPieceStroage::hasMissingUnusedPiece() from
AbstractCommand::execute().
* Added new file allocation method called 'trunc'. --file-allocation
option can now take new value 'trunc'. 'trunc' uses ftruncate()
system call or platform-specific counterpart to truncate a file to a
specified length.
* Use int64_t instead of off_t. Using off_t, at least, in DiskAdaptor
layer is problematic because torrent can contain under 2GiB files
but total sum of those files may exceed 2GiB limit, which makes
off_t overflow in 32 bit system without large file support. So we
use int64_t in API. We'll check the file length before download so
that it does not exceed max off_t.
* Added TLS SNI support.
* Rewritten timegm replacement function. The algorithm is based on
Python 2.7 calendar.timegm.
* Use system-wide certificates for SSL. Use system-wide certificates
for SSL. For GnuTLS it requires the latest version, 3.0.20. OpenSSL
had it for longer. This means that if SSL library is properly
configured to locate system-wide certificates store, the user don't
have to use --ca-certificate option. Also packagers don't have to
use --with-ca-bundle configure option. Patch from Cristian Morales
Vega
* Fixed base64::decode() return "" if input ends with garbage and no
padding.
* Changed default Peer ID prefix. The new Peer ID prefix is
"A2-$MAJOR-$MINOR-$MICRO-", where $MAJOR, $MINOR and $MICRO are the
major version, the minor version and the micro version
respectively. For instance, 1.15.2 release of aria2 will use
"A2-1-15-2-".
* Don't percent-decode filename value in Content-Disposition. We only
percent-decode filename* value in Content-Disposition because the
encoding is fully specified. But since filename value is not, so we
just accept it as is.
* Don't sum in-flight piece which does not intersect filtered ranges.
When calculating completed length, don't sum the completed length of
piece which does not intersect filtered ranges.
* Fixed segmentation fault when logger failed to open log file.
* Added ARIA2_STATIC precious variable to configure option. To build
statically linked aria2 binary, give ARIA2_STATIC=yes to configure,
like this:
$ ./configure ARIA2_STATIC=yes
* Use PRId64 for int64_t format specifier
* Handle the case when MINGW32 vsnprintf returns -1. MINGW32 vsnprintf
returns -1 if output is truncated. Increased buffer for vsnprintf
in WinConsoleFile and fmt.
* Added --enable-mmap option. If this option is used, map files into
memory using mmap(2). This option is experimental.
* Added CORS preflight request support in RPC interface. This change
is based on the patch from binux.
Changelog:
aria2 1.15.1
============
Release Note
------------
This release fixes the bug that prevents --bt-lpd-interface from
working. If some options sent by RPC request are not acceptable for
the download type, they are now simply ignored instead of rejecting
RPC request entirely. The aria2 RPC server now returns 4XX error code
if the request is not valid in the HTTP level. To improve packaging,
--with-bashcompletiondir configure option was added. This option
overrides where the aria2c bash_completion file is going to be
installed. All manual pages are now generated by Sphinx.
Changes
-------
* Return appropriate HTTP status code on RPC failure. In this change,
we return 404 if the request path is neither /json-rpc nor /rpc. If
XML feature is not enabled and /rpc is requested, return 404. If
XML parser failed, return 400. JSON parser failure has been handled
well in the existing code.
* Ignore unacceptable options in RPC request instead of throwing
error. This change allows RPC client to send same options for the
different type of downloads.
* Handle sockaddr_in.sin_len and sockaddr_in6.sin6_len. Check
sockaddr_in.sin_len and sockaddr_in6.sin6_len are available and
assign values to them properly. This change fixes unit test error
and most error related to getnameinfo() on netbsd.
* Removed dependency on inet_aton. Implemented inetPton as a
replacement of inet_aton. inetPton is implemented using
net::getBinAddr. This change fixes bug#3525424.
* Added --with-bashcompletiondir configure option. By default,
bash_completion file named aria2c is installed to the directory
$prefix/share/doc/aria2/bash_completion. To change the install
directory of the file, use --with-bashcompletiondir option.
* Converted README.asciidoc into README.rst
* Use Sphinx for aria2 manual page documentation. The source files
for manual pages are placed under doc/manual-src. The manual pages
are generated under doc/manual-src/$LANG/_build. The HTML version
manual page was dropped from the distribution archive.
* Fixed the bug which prevents --bt-lpd-interface from working.
Fixes bug#3520125
Chngelog:
Changes
-------
* Supported network-path reference in HTTP redirect.
* Updated bash_completion.
* aria2 now doesn't assume download has completed just because file
size matched. The only exception is zero-length file. If server
tells that file is zero-length and --checksum option is given,
aria2 now correctly checks its checksum. There is one known issue:
If downloaded file is zero-length file and .aria2 file exists, it
will not be deleted on successful verification, because .aria2 file
is not loaded.
* Fixed the bug that --checksum is not working. SFBUG#3466888
* Fixed compile error without libnettle, libgcrypt and openssl.
SFBUG#3466463
* Fixed the bug that log file is not created if there is warning
before log file is opened.
Changelog:
aria2 1.13.0
============
Release Note
------------
This release fixed libgcrypt version check error. Several command line
options were added. For details of each new option, read changes
below. aria2 now returns error response if RPC request parameter has
wrong type. For MinGW32 build, Unicode filenames support was added.
From this release, aria2 uses libnettle and libgmp by default instead
of libgcrypt. If you want to use libgcrypt, use configure options
--without-libnettle --with-libgcrypt.
Changes
-------
* Check libgcrypt version is greater or equal to required version.
This will fixes Debian bug#642989.
* Added --piece-length option. This option sets a piece length for
HTTP/FTP downloads. This is the boundary when aria2 splits a
file. All splits occur at multiple of this length. This option will
be ignored in BitTorrent downloads. It will be also ignored if
Metalink file contains piece hashes.
* Throw exception if parameter has wrong type in RPC method.
Formally, depending on the method implementation, this kind of
error is just ignored and parameter is skipped. Now aria2 responds
error for these cases. The required parameter checking is also
reworked along with this change.
* Cleanup log message for binding server socket.
* Recognize tab as white space before option in -i list.
* Added geom parameter to --stream-piece-selector option. If 'geom'
is given, at the beginning aria2 selects piece which has minimum
index like 'inorder', but it exponentially increasingly keeps space
from previously selected piece. This will reduce the number of
establishing connection and at the same time it will download the
beginning part of the file first. This will be useful to view movie
while downloading it.
* Added completedLength response key in aria2.getFiles RPC method
* Added #checksum help tag.
* Added --checksum option. Added --checksum=TYPE=DIGEST option. This
option sets checksum. TYPE is hash type. The supported hash type is
listed in "Hash Algorithms" in "aria2c -v". DIGEST is hex digest.
For example, setting sha-1 digest looks like this:
sha-1=0192ba11326fe2298c8cb4de616f4d4140213838 This option applies
only to HTTP(S)/FTP downloads.
* Added --hash-check-only opiton. Added --hash-check-only opiton.
If true is given, after hash check using --check-integrity option,
abort download whether or not download is complete. The default
value is false.
* Added --download-result option. Added --download-result=OPT
option. This option changes the way "Download Results" is
formatted. If OPT is 'default', print GID, status, average download
speed and path/URI. If multiple files are involved, path/URI of
first requested file is printed and remaining ones are omitted. If
OPT is 'full', print GID, status, average download speed,
percentage of progress and path/URI. The percentage of progress and
path/URI are printed for each requested file in each row.
* Added --rpc-allow-origin-all option. This option adds
Access-Control-Allow-Origin header field with value '*' to the RPC
response.
* Ignore --out option supplied in command-line if -i is used. You
can still use out option in the text file specified in -i.
* Disable SSLv2 by default and optimize memory usage.
Patch from Cristian Rodríguez.
* Added libnettle and libgmp support. libnettle and libgmp is used
by default. Old implementation uses libgcrypt as default. If more
and more Linux distributions offer libnettle linked GnuTLS, then
this change decrease library dependency against libgcrypt and
libgpg-error. The current library detection for libnettle and
libgmp is very simple, just use AC_SEARCH_LIBS.
util::generateRandomData() was written using SimpleRandomizer, thus
no external library dependency from this function.
* In MinGW32, open file with UNICODE filename and print them in ANSI.
Changelog:
aria2 1.12.1
============
Release Note
------------
This release adds RFC 6249 Metalink/HTTP support. Current
implementation only uses rel=duplicate links. --enable-direct-io
option was deprecated because of performance issue. Since recent
GnuTLS uses libnettle as default instead of libgcrypt, this release
added initialization code for libgcrypt.
Changes
-------
* Initialize libgcrypt. We relied initialization of libgcrypt on
gnutls_global_init(), but recent change in gnutls, which changes
default crypto backend from libgcrypt to libnettle, leaves
libgcrypt uninitialized if it uses libnettle as backend(and this is
likely because libnettle is chosen by default). To fix this issue,
we simply initialize libgcrypt on our own.
* Throw exception with error message if gnutls_global_init() failed.
* Implemented Metalink/HTTP. 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.
* Remove Metalink content-type after first server response. We don't
accept Metalink content-type after first server response.
* Updated Russian translation of aria2 man page. Thanks to ITriskTI
for translation.
* Fixed the bug due to dangling pointers in RequestGroup.
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.
* Added log message to clarify error for BitTorrent server socket.
* Added #deprecated help tag.
* Removed deprecated options: --enable-xml-rpc, --xml-rpc-listen-all,
--xml-rpc-listen-port, --xml-rpc-max-request-size, --xml-rpc-user,
--xml-rpc-passwd.
* Removed use of O_DIRECT because of performance issue. Deprecated
--enable-direct-io option.
* Increased the maximum number of in-flight request in BitTorrent.
* Added --log option to aria2rpc
Changelog:
1.12.0
Changes
-------
* Use ServerStat to find faster server. This is useful when several
downloads were started in parallel, but one download is slow and
the other downloads have completed. Then aria2 knows which servers
are fast by the results of completed downloads, and check the
available URIs of slow downloads to see faster server is available
there. If so, use it instead of current slow one to make download
faster.
* Added Russian translation of man page and HTML manual contributed
by ITriskTI.
* Added aria2.getGlobalStat RPC method. It returns overall
download/upload speed and the number of active/stopped/waiting
downloads.
* Added --pause option. 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.
* Abort aria2 if it could not setup any RPC server.
* Added --truncate-console-readout option. 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.
* Cache and reuse RpcMethod objects.
* Allowed missing params in system.multicall RPC method.
* Added --stream-piece-selector option. 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.
* Removed unnecessary template parameter from std::make_pair call.
The patch was contributed from Dan Fandrich.
* Implemented fast file allocation in MinGW32 build. We use
SetFilePointerEx and SetEndOfFile to allocate extents. This only
works with NTFS. To enable this feature, --file-allocation=falloc
must be given.
* Only percent-encode non-printable ASCII chars(0x00-0x1f), non-ASCII
chars(>0x7f), ' ', '"', '<' and '>' for URIs supplied by user and
remote server(usually Location header field).
* Don't throw exception if Z_BUF_ERROR is encountered in GZipEncoder.
This fixed the bug that compressed RPC request failed.
* Don't save removed download in --save-session text file. Now stat
column of removed downloads in Download Results is 'RM' instead of
INPR.
1.11.2
Changes
-------
* Updated Japanese, Spanish and Simplified Chinese translation.
Thanks to all translators.
* Eliminated few seconds delay when downloads stop or pause.
* Added --metalink-base-uri option. --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 '/'.
* Run batch file with cmd.exe. Quoted user command. 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".
* Fixed the bug that the message "Loaded cookies from ..." appears
when loading cookies from that file failed.
* Applied patch from Dan Fandrich. This patch fixes compatibility
issue when compiling aria2 on older systems.
* Support relative URI in Metalink file. 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.
* Erase user and password specified in command-line from argv. The
user and password is masked with '*'.
* If no data type tag is used in XML-RPC, treat the data as string.
* aria2-metalink option is removed. This is enabled by default already.
Changelog:
aria2 1.11.1
============
Release Note
------------
This release fixes the bug that aria2 does not work on platforms which
have kqueue() system call due to invalid timeout parameter. The
--show-console-readout option was added. This option toggles the
appearance of console readout.
Changes
-------
* Added --show-console-readout option. This option toggles
appearance of console readout.
* Fixed the bug that microsecond part of timeval overwlows in
waitData(). This bug affects platforms which have kqueue() system
call. Those systems are FreeBSD, OpenBSD, NetBSD and Darwin (Mac OS
X).
aria2 1.11.0
============
Release Note
------------
This release adds JSON-RPC interface. The JSON-RPC and XML-RPC shares
same APIs. The JSON-RPC also supports JSONP. 2 new options were added:
--retry-wait and --async-dns-server. The downloads added by
aria2.addTorrent and aria2.addMetalink RPC method are now saved to the
file specified in --save-session option. The proxy options and related
environment variables now accept https:// and ftp:// scheme. This
release fixes the bug that causes segmentation fault when unpausing
downloads in some situations. MinGW32 build now looks for USERPROFILE
and the combination of HOMEDRIVE and HOMEPATH to get user's home
directory and doesn't check permission of .netrc file.
Changes
-------
* Updated gettext to 0.18
* Added JSON-RPC support. --enable-xml-rpc was deprecated and
--enable-rpc should be used instead. Similarly, --xml-rpc-*
options were replaced with --rpc-* options. We are implementing
JSON-RPC based on JSON-RPC 2.0 draft spec.
* Fixed rounding error in DownloadEngine::run(). This fixes the bug
that executeCommand() with Command::STATUS_ALL is not called in
every interval correctly because of rounding error in timer.
* Refresh buckets at DHT initialization without checking serialized
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 soon, it does not refresh buckets because
serialized time is recent.
* Save downloads added by aria2.addTorrent or aria2.addMetalink in
--save-session file. Uploaded data are saved as file named hex
string of sha1 hash of uploaded data plus extension(".torrent" for
torrent and ".meta4" 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.
* Fixed the bug that causes segmentation fault when unpause
RequestGroup which has resolved BtDependency.
* Look for USERPROFILE and the combination of HOMEDRIVE and HOMEPATH
to 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.
* Fixed the bug that DownloadContext::basePath_ is not escaped.
* Added Date, Expires and Cache-Control response header field to RPC
response.
* Added --async-dns-server option. This option accepts comma
separated list of DNS server addresses 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.
* Accept https:// and ftp:// in proxy options and environment variables.
* Fixed overflow in the calculation of progress percentage for file
allocation and hash check when off_t is 32bit.
* Accept HTTP 304 reply as success when If-None-Match request-header
field is specified using --header option. When --conditional-get
is used, --allow-overwrite is now required to overwrite existing
file.
* Added aria2.removeDownloadResult RPC method. 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.
* Use IP address of control connection to connect to the remote server in
FTP passive mode.
* Don't check permission of .netrc file in MinGW32 build.
* Added --retry-wait option. This option was once existed in aria2
but erased on 2009-09-20. Now it is resurrected once again. We
choose 0 as default value for backward compatibility. 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.
* Don't show metadata download and paused download in "Download Results".
aria2 1.10.0
============
This release adds an option to limit the number of connections to the
same host in each download. aria2 now chooses server which is least
used in aria2c instance. This release also adds Chromium cookie
support and HTTP only conditional download support which is download
file only when the local file is older than remote file. aria2 now
can handle %2F in FTP URI properly. HTTP/1.1 chunked decoder was
fixed. For Linux, aria2 uses fallocate by default if it is usable.
aria2 1.9.5
============
This release fixes the bug that causes corrupted file. It also fixes
assertion error in DefaultPeerStorage class. Now aria2 doesn't reset
referer to "" on redirect. log and log-level option can be used
in aria2.changeGlobalOption XML-RPC method. This means you can
dynamically start or stop logging and change log file and log level.
aria2 1.9.4
============
This release fixes the bug that connection reuse on FTP does not work
if FTP server changes root directory based on account. It also fixes
the bug that reading Metalink document from pipe (-M- option) does not
work when aria2 is built with expat or old libxml2(2.7.6 or
earlier). Now aria2 does not emit error if given Metalink document is
empty(no file element). The response of aria2.tellStopped XML-RPC
method now has more information: totalLength, completedLength,
uploadLength, bitfield and so on.
aria2 1.9.3
============
This release fixes the bug that aria2 cuts filename after ';' if
filename in Content-Disposition header includes ';'. It also fixes
the bug that name attribute of file element in Metalink file is not
properly sanitized.
aria2 1.9.2
============
This release adds kqueue, port_associate/port_getn and poll() support
for socket event notification to eliminate 1024 file descriptor
limitation of select() call. The bug that aria2.unpause and
aria2.unpauseAll XML-RPC method fail when -s1 is given in command-line
argument was fixed.
aria2 1.9.1
============
This release adds the ability to save unfinished downloads as text
file. aria2 can read the file with -i option on restart. This
release also adds the ability to download file from scratch when aria2
sees resume is not supported by remote server. This feature is
disabled by default. See --always-resume option for
details. --no-proxy option accepts IPv4 network address with CIDR
block. aria2 now doesn't send "Accept-Encoding: deflate, gzip" by
default. --http-accept-gzip option was added to toggle this behavior.
aria2 now treats lines starting "#" in -i list as comments. Several
XML-RPC methods were added: aria2.pause, aria2.unpause,
aria2.shutdown, and their families. The new exist status code '8' was
added. The bug that makes aria2 hang when system time changes while
aria2 is running was fixed on MinGW32, Mac OS X and the system which
has clock_gettime(). Several other bugs also have been fixed.
aria2 1.9.0
============
This release adds Metalink4 support and BitTorrent Local Peer
Discovery. aria2.changeUri XML-RPC method was added. It enables you
to add/remove URIs to existing downloads dynamically. The user and
password for proxy server now can be specified in command-line
separately. We refactored the code based on profiler results, so
aria2 now runs more efficiently than ever. Russian and Simplified
Chinese translation were updated.
aria2 1.8.3
============
This release fixes the bug that --file-allocation=falloc doesn't work
with single file download. It also fixes the bug that the return value
of aria2 is unreliable if error occurs before download begins. When
custom request headers specified by --header option now override
built-in headers if they have same name.
aria2 1.8.2
============
s release fixes the bug that causes segmentation fault with
--max-file-not-found option involved. Now aria2 can handle redirected
URI which is not properly percent encoded. In MinGW32 build, console
readout is now always cut by 80 characters. 'bittorrent' key is added
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.
aria2 1.8.1
============
This release fixes the bug that causes segmentation fault if unknown
options exist in aria2.conf file and user cannot include empty line in
aria2.conf.
Following new command line options are added: --http-no-cache,
--bt-metadata-only and --human-readable option. --dir option now
treats "" as ".". --all-proxy, --http-proxy, --https-proxy and
--ftp-proxy option accept empty string "". When "" is given, it
erases previously defined proxy.
aria2.getSessionInfo XML-RPC method was added. aria2.tellWaiting and
aria2.tellStopped XML-RPC method accept a negative integer as
offset. For example, in aria2.tellWaiting, 'offset' == -1 points last
download in the waiting queue and 'offset' == -2 points the download
before the last download, and so on. 'dir' and 'files' key were added
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. 'uris' key was
added 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. aria2 now
returns gzip compressed XML-RPC response if XML-RPC client accepts
gzip content encoding.
aria2 1.8.0
============
This release fixes the bug that configure script fails to detect
GnuTLS library if --without-sqlite3 is given. The new XML-RPC methods
are added: aria2.getOption, aria2.getGetGlobalOption,
aria2.changePosition, aria2.tellStopped and system.multicall.
--bt-save-metadata option is added. This option saves metadata as
.torrent file. This option has effect only when BitTorrent Magnet URI
is used.
aria2-1.7.2
============
This release fixes the bug that aria2 listens wrong port in
BitTorrent/FTP downloads when --interface option is used. If
--metalink-file='-' is given, aria2 now reads Metalink file from
stdin. Magnet URI is printed in the output of -S option. DHT is
now enabled by default. DHT doesn't start while aria2 only handles
HTTP/FTP downloads. On the first torrent download begins, aria2
initiates DHT functionality. After that, DHT runs until aria2 exits
aria2 1.7.1
============
This release fixes the bug that --bt-prioritize-piece=tail is not
working.
aria2 1.7.0
============
This release adds BitTorrent Magnet URI support. 3 options were
added: the ability to bind to particular interface, disabling IPv6 and
prioritizing piece in BitTorrent downloads. In configure script, if
--with-PACKAGE and --enable-FEATURE are given but PACKAGE is missing
in the system or FEATURE cannot be enabled in the current
configuration, the script now prints error message and exits.
--http-auth-scheme option was removed since it is useless. Updated
Russian, Ukrainian, German and French translations.
aria2 1.6.3
============
This release fixes reported bugs and updates Polish, Catalan, French,
Italian, Russian and Japanese translations.
aria2 1.6.2
============
This release fixes segmentation fault error if URI to download
contains printf format string and logging is enabled. The build
scripts are updated to automake 1.11 and autoconf 2.64. Updated
Ukrainian translation.
aria2 1.6.1
============
This release fixes memory leak in HTTP/FTP download. It also fixes the
bug that the option values changed by XML-RPC changeOption and
changeGlobalOption methods are cleared. Now User-agent and Peer ID
include version number. Updated Simplified Chinese translations.
aria2 1.6.0
============
This release changes the default behavior of XML-RPC server. Now it
listens only on local loopback interface by default for security
reasons. If you want to connect to aria2c from remote hosts, use
--xml-rpc-listen-all option. The XML-RPC client sample script written
in Ruby are now included in the archive under doc/xmlrpc directory.
These scripts are licensed under MIT License. The help category tags
are now start "#" to distinguish them from keyword search. Several
help category tags were added: #xml-rpc, #cookie, #hook and #file.
--retry-wait option was removed because it doesn't work properly under
the architecture. Updated Bulgarian, Russian, Slovak and Japanese
translations.
aria2 1.5.2
============
This release fixes the bug that when the first attempt to establishing
connection fails, aria2 don't try to connect another address and a
download immediately fails. -S output was enhanced: exact file size
is now printed. For -S with torrent file, meta data such as comment,
comment.utf-8, created by and creation date are now printed. Ukrainian
and Russian translations were updated.
aria2 1.5.1
============
This release fixes linker error in unit test code on 32bit
systems. The unit test failure on mingw32 was also fixed. The file I/O
error handlings were written.
aria2 1.5.0
============
This release adds WEB-Seeding support for multi-file torrent.
--bt-stop-timeout option was added. This function stops BitTorrent
download if the download speed is 0 in consecutive given seconds.
aria2 now tries all resolved addresses to connect to remote servers in
HTTP(S)/FTP until it gets connected. For XML-RPC, two new methods
were added: aria2.tellWaiting and aria2.getVersion. The error code is
available in the response of aria2.tellStatus methods for
stopped/completed downloads. --use-head is now disabled by default
since using HEAD request causes problems in some web sites. The
behavior of -D option has been changed: If -D is specified, the
current working directory is set to / and stdin, stdout and stderr are
redirected to /dev/null. This release fixes the bug that zombie
processes are created when commands specified in --on-download-*
options are executed and the bug that http-user, http-passwd, ftp-user
and ftp-passwd are ignored when they are given via XML-RPC. Updated
Russian, Italian, Danish, Bulgarian, Japanese and Ukrainian
translations.
aria2 1.4.1
============
This release fixes the compile error without the development package
of c-ares library installed. The compile error under MinGW was fixed.
aria2.tellStatus XML-RPC method now returns "uploadLength" and
"numSeeders". Ukrainian translation was updated.
aria2 1.4.0
============
This release adds XML-RPC interface and the ability to run command
when download started/stopped and the ability to save cookies. The
current XML-RPC API allows users to add http(s)/ftp/torrent/Metalink
download and change options dynamically. The APIs such as reporting
download progress, file paths, URIs and peer information are also
available. For complete API specification, see XML-RPC INTERFACE
section in man page and
http://apps.sourceforge.net/trac/aria2/wiki/XmlrpcInterface. The
console readout was slightly updated and now includes the number of
seeders the client has connected to. Slovak translation was
added. Ukrainian and Brazilian Portuguese translation were updated.
aria2 1.3.3
============
This release fixes the bug that --check-integrity option doesn't work
properly if a file including last piece is missing and increases
internal receive buffer for FTP in order to receive big banner.
Ukrainian, Russian and Simplified Chinese translations were updated.
aria2 1.3.2
============
This release fixes the bug that prevents certain BitTorrent downloads
from finishing and possible segmentation fault when gzip decoding is
involved and infinite loop bug if last "0" chunk-size marker is not
received in chunked encoding transfer. aria2 now supports
WEB-Seeding(HTTP-Seeding) for single file torrent. Ukrainian
translation was updated.
aria2 1.3.1
============
This release fixes the bug that aria2 wrongly determines that
specified share ratio is reached because of miscalculation of upload
bytes and the bug that upload limit exceeds the value specified in
--seed-ratio option depending on the timing of the execution of
SeedCheckCommand.
aria2 1.3.0
============
This release adds the ability to specify the output filenames in
BitTorrent downloads and the option to limit overall download speed
and dry run mode which just checks the availability of the remote
file. -i list option can now take new options: select-file and
index-out. The default behavior of sending HTTP Authorization header
is reverted back to version 1.1.2 style. The bug in
AdaptiveURISelector was fixed. You can now seed read-only files in
BitTorrent. --file-allocation option can take new parameter
'falloc'. If it is given and you are using newer file systems such as
ext4, btrfs or xfs, large(few GiB) files are allocated almost
instantly. The performance optimization has been done and aria2 runs
more efficiently.
Indonesian, Russian, Italian, Ukrainian, Simplified Chinese, Japanese,
Spanish and Norwegian Nynorsk translations were updated.