aria2 1.10.4
============

Release Note
------------

This release fixes the bug that aria2 hangs when FTP server does not
send '226 Transfer Complete' message and the bug that the time used in
file allocation is taken into account when calculating download speed.
Non UTF-8 filenames are now percent-encoded.  The comments and name in
.torrent file in XML-RPC response are also percent-encoded if they are
not UTF-8.  Compile error on OpenBSD4.7(i386) was fixed.  A warning
message when CA certificates are not imported is not printed in
console. It is shown when certificate verification error is actually
occurred.

Please note that since 1.10.0 release, aria2 uses 1 connection per
host by default and has 20MiB segment size restriction. So whatever
value you specify using -s option, it uses 1 connection per host. To
make it behave like 1.9.x, use -x16 -k1M (see
--max-connection-per-server and --min-split-size option in man
page). If you specify multiple hosts, aria2 will use all of them and
open multiple connections.

Changes
-------
 
 * Updated Russian, Simplified Chinese and French translation. Thanks
   to all translators.

 * Use RFC1123 date format for creation date of .torrent file printed
   using -S.

 * Rewritten Cookie class and Cookie parser based on
   http://tools.ietf.org/html/draft-ietf-httpstate-cookie-15

 * 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.

 * Don't show warning message in console when CA certificates are not
   imported.  --ca-certificate and --check-certificate option were
   mentioned in the error message displayed when certificate
   verification failed.

 * Print message when performing slow file allocation at first time.

 * Fixed compile error on OpenBSD4.7(i386).

 * Execute 5 DHT tasks concurrently in each task queue.

 * 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).

 * Rewritten util::escapePath(). Now it does not replace bad chars
   with '_':it performs percent-encoding against them.
   util::fixTaintedBasename() now replaces "/" with "%2F".  Added 0x7f
   as bad chars in util::detectDirTraversal().

 * 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.

 * 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.

 * 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.



aria2 1.10.3
============

Release Note
------------

This release adds short option -x for --max-connection-per-server
option and -k for --min-split-size option.  It also adds
--max-download-result=NUM option.  This option sets maximum number of
download result kept in memory and the default value is 1000.
--max-connection-per-server now accepts up to 16.  '@' character is
now allowed in username embedded in URI.  This release fixes the bug
that aria2 reports error and exits with non-zero status when file is
already downloaded and checksum is available.

Please note that since 1.10.0 release, aria2 uses 1 connection per
host by default and has 20MiB segment size restriction. So whatever
value you specify using -s option, it uses 1 connection per host. To
make it behave like 1.9.x, use -x16 -k1M (see
--max-connection-per-server and --min-split-size option in man
page). If you specify multiple hosts, aria2 will use all of them and
open multiple connections.

Changes
-------

 * Replaced V_TRUE with A2_V_TRUE. Replaced V_FALSE with A2_V_FALSE.

 * 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.

 * 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.

 * 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.

 * Mark cached IP address bad on timeout to allow
   aria2 to renew IP address cache.

 * Fixed the bug that aria2 reports error and exits with non-zero
   status when file is already downloaded.

 * 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.

 * Data from remote server in HTTP/FTP download are now written to the
   disk(or memory) through StreamFilter. Decoding chunked and gziped
   streams are done cascading StreamFilter.  Removed inefficient 1byte
   read code.



aria2 1.10.2
============

Release Note
------------

This release fixes the bug that prevents HTTP redirect from working
when multiple files are downloaded from same host at the same time.
For netrc, aria2 now performs domain match if machine name defined in
.netrc starts with ".".

Please note that since 1.10.0 release, aria2 uses 1 connection per
host by default and has 20MiB segment size restriction. So whatever
value you specify using -s option, it uses 1 connection per host. To
make it behave like 1.9.x, use --max-connection-per-server=4
--min-split-size=1M. If you specify multiple hosts, aria2 will use
all of them and open multiple connections.

Changes
-------

 * In .netrc file, if machine name starts ".", aria2 performs domain
   match instead of exact match.

 * Fixed the bug which prevents HTTP redirection from working when
   downloading multiple files from same host at the same time.



aria2 1.10.1
============

Release Note
------------

This release adds IPv6 support for FTP, BitTorrent and BitTorrent DHT.
For FTP, EPSV and EPRT command support was added.  Enabling IPv6 DHT
requires several options, so please check out the usage example in man
page or wiki usage example page. By default, the asynchronous DNS
resolver does not handle IPv6 address. To work with IPv6 address, use
--enable-async-dns6 option.  aria2 now listens on both IPv4 and IPv6
socket for BitTorrent, its DHT and XML-RPC. aria2 uses same port for
both IPv4 and IPv6. The ability to add/remove BitTorrent tracker
announce URI was added.  The link error for
FallocFileAllocationIterator was fixed.

Please note that since 1.10.0 release, aria2 uses 1 connection per
host by default and has 20MiB segment size restriction. So whatever
value you specify using -s option, it uses 1 connection per host. To
make it behave like 1.9.x, use --max-connection-per-server=4
--min-split-size=1M. If you specify multiple hosts, aria2 will use
all of them and open multiple connections.

Changes
-------

 * Enter end game mode as soon as all pieces are assigned to peers to
   avoid substantial slow down at the very last stage of download.

 * Set max outstanding request size of BitTorrent download to 100. Set
   stepping to 6.

 * 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. Added bt-tracker and bt-exclude-tracker to -i
   list option.

 * Listen both IPv4 and IPv6 for BitTorrent protocol.

 * Listen both IPv4 and IPv6 for xml-rpc request.

 * Added IPv6 DHT. Added --dht-entry-porint6, --dht-file-path6,
   --dht-listen-addr6 and --enable-dht6 option.  IPv6 DHT is disabled
   by default. To use IPv6 DHT, you need to use --enable-dht6 and
   specify a global unicast address to --dht-listen-addr6.  IPv6 DHT
   is highly experimental.

 * Added support for peers6 key in tracker response.  Added added6,
   added6.f and dropped6 in ut_pex.

 * Add only gracefully disconnected peer to ut_pex dropped list.  Add
   incoming dropped list to PeerStorage.

 * Don't use pre-calculate hash value when end-game mode.  Throw
   exception if bad piece is received.

 * Added bittorrent::packcompact() which replaces
   bittorrent::createcompact() and supports IPv6 addresses. Rewritten
   bittorrent::unpackcompact() and bittorrent::extractPeer() to
   support IPv6 addresses. Fixed added.f flags in ut_pex.

 * Added --enable-async-dns6 option. This option enables IPv6 name
   resolution in asynchronous DNS resolver. This option will be
   ignored when --async-dns=false.

 * Use hostname of original URI when counting hostname in
   inFlightRequest.

 * Fixed the bug that
   AdaptiveFileAllocationIterator::getCurrentLength() does not return
   updated allocated bytes.

 * Added FTP EPSV and EPRT command support. aria2 issues these
   commands when address family of local socket is AF_INET6.

 * Rewritten check for fallocate using AC_COMPILE_IFELSE.

 * Fixed the bug that HAVE_SOME_FALLOCATE gets undefined if fallocate
   is not available even if posix_fallocate is available. This causes
   FallocFileAllocationIterator.cc is out of compile targets and
   linker error.



aria2 1.10.0
============

Release Note
------------

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.

Changes
-------

 * Metadata download may take very long time. If URIs are available,
   give up metadata download in at most 30 seconds.

 * 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.

 * 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.

 * FeedbackURISelector now tries to select URI whose host is least
   used in aria2 globally.

 * 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.

 * 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.

 * Set end byte in Range header if start byte > 0 to get more chance
   to pool socket.

 * Fixed ChunkedDecoder. It does not read trailer and final CRLF.

 * Send each CWD component of FTP URI in separate CWD command as
   described in RFC1738.

 * 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.

 * Added Chromium/Google Chrome Cookies file support. Thanks to
   gotrunks for original patch.

 * 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.
