aria2 1.19.3 ============ Release Note ------------ This release fixes lots of bugs. See the Changes section below. Changes ------- * Fix bug that pause/unpause seeding torrent prevents new downloads from starting Previously, with --bt-detach-seed-only, when user issued pause and unpause command to seeding torrent, and it was started again, and it immediately got seeding status, but aria2 did not start new download waiting in the queue. This commit fixes this bug. See GH-490 * Add --bt-enable-hook-after-hash-check option This option sets flag which allows hook command invocation after hash check (see -V option) in BitTorrent download. By default, when hash check succeeds, the command given by --on-bt-download-complete is executed. To disable this action, give false to this option. * Add --socket-recv-buffer-size option Set the maximum socket receive buffer in bytes. Specifing 0 will disable this option. This value will be set to socket file descriptor using SO_RCVBUF socket option with setsockopt() call. See GH-487 about the usecase of this option * Disable --deferred-input when --save-session is used together With --deferred-input=true, aria2 only reads input file to fill active download slots, while keeping input file open. Meanwhile, --save-session saves all download info inside memory, but this does not take into account of unread item in input file. This will lead to lose input data in saved session file. Also current BufferedFile implementation used to read/write input/output file take a lock on Windows. This effectively prevents session serializer from writing session data to the same file which is still kept open because of --deferred-input. See GH-493 * base32: decode lowercased characters as well This fixes the bug that magnet URI with lowercased btih is treated as malformed. * mingw: Use GetFileSize to get file size _wstat family does not work with symbolic links. They always returns size 0. To workaround this, we now use GetFileSize to get file size. To do that, we need to first obtain file HANDLE, which is a bit tedious because of the messy interface of CreateFileW, but we have no way to get around it. * Fix bug that file allocation=trunc does not work with Windows symlink * Send the last error message as part of tellStatus RPC response Patch from Jarda Snajdr * Don't enable mmap if file allocation is disabled Without file allocation, we cannot map file because file length could be zero. This could fix bug reported at GH-478 * Evict timed out pooled socket periodically Previously we only scanned pool socket to check they are timed out when we pooled another socket. This means that pooled socket is not closed long time (stays in CLOSE-WAIT state) if we don't pool any more socket. In this commit, we now check pooled socket periodically (30 seconds) to avoid the sockets hanging in CLOSE-WAIT state long time. See GH-477 * Don't write control file if content is not changed from previous one This is desirable so that we don't have to wake up disk if control file is not changed, and it is not have to be written again. We use the same method (SHA1 hash) to check the content is the same. The limitation is the hash is stored in memory, so we have to write the first time in each session. See GH-382 * Remove content-length and content-range if transfer-encoding is given See GH-473 * Retry after 404 status if --max-file-not-found > 0 aria2 1.19.2 ============ Release Note ------------ This release fixes the bug that progress summary is not shown timely. Changes ------- * Fix bug that progress summary is not shown timely aria2 1.19.1 ============ Release Note ------------ This release fixes TLS handshake error with servers which only support RSA-SHA1 signature algorithm. We removed RSA-SHA1 for enchanced security, but many users reported there were servers which could not talk aria2 1.19.0, so added it again for compatibility reasons. For Windows build, we fixed potential infinite loop bug when TLS is used. We changed the location where dht.dat and aria2.conf are looked up. The aria2 manual page described details. Basically we now follow XDG specification (http://standards.freedesktop.org/basedir-spec/latest/). For dht.dat, the default location is $XDG_CACHE_HOME/aria2/ directory. For aria2.conf, the default location is $XDG_CONFIG_HOME/aria2/ directory. To keep the current user configuration working, if aria2 detects dht.dat under $HOME/.aria2/ directory, it is used instead. Similarly, if aria2.conf exists under $HOME/.aria2/ directory, it is used instead. Previously, we return 500 HTTP status if RPC method execution encountered error. Now it returns with 400 HTTP status with error code. This is more natural because server processed request and found an error, and returned error reply correctly. This is not something server crashed or something. Also, there is RPC libraries which throws exception if it sees 5XX status code, where 400 is better because we can examine the error. Changes ------- * Update README.android Providing some workarounds about CA certificates and standard output Patch from amtlib-dot-dll * Return 400 HTTP status code if exception was caught while executing RPC method Previously, we returned 500 HTTP status code. I think the found in RPC level, not in HTTP protocol, so 500 is not appropriate. * WinTLS: Fix potential infinite loop * Fix on-download-error is executed even if download succeeded * Update Dockerfile.mingw Patch from Adam Baxter * Increase --select-file upper bound to 1m for torrent containing lots of files * Fix busy loop with --dry-run and 4xx response for URI listed in metalink See GH-430 * Update sqlite in OSX build to 3.8.10.2 * Make LibuvEventPoll compatible with the latest libuv again * gnutls: Allow SIGN-RSA-SHA1 for compatibility reason * Make script compatible with both Python 2 and 3 Patch from Vasilij Schneidermann * Make config and cache files conform to XDG See http://standards.freedesktop.org/basedir-spec/latest/ for further details. This implementation decides the default based on whether a file exists at the legacy location, if it doesn't, it picks the XDG-conforming location instead. Patch from Vasilij Schneidermann * ftp, sftp: Fix heap-after-free bug on exception * ftp: Fix timeout when reusing FTP connection * Various MinGW-w64 build improvements - Fix detection of localtime_r and asctime_r on MinGW-w64 - Fix linking with libintl on MinGW-w64 Patch from David Macek aria2 1.19.0 ============ Release Note ------------ This releases adds SFTP support, and fixes several bugs. SFTP support has been implemented using libssh2. We added several new options. --multiple-interface option is like --interface option, but can take several interfaces. They are used in round-robin manner, and it works like link aggregation. Previously, .netrc search path is fixed under $HOME directory, and cannot be changed. In this release, --netrc-path option has been added to override the search path. The runtime bug concerning getrandom has been fixed in this release. Previously if download failed because checksum error, aria2 exited with error code 1 (unknown error). Now it exits with dedicated error code 32. We fixed long outstanding bug that aria2 crashes when downloading multi-file torrent. Changes ------- * android: Build and link with zlib Previously, we linked with zlib shipped with NDK, but it seems this is not part of NDK API, and thus could break our app. * Allow netrc-path to be specified in the config file Adds --netrc-path to override default .netrc search path. Patch from Ryan Steinmetz * Exit with 32 status code if checksum verification failed * Add SFTP support using libssh2 aria2 can now download files via sftp protocol: aria2c sftp://.... --ssh-host-key-md option is added to specify expected server's fingerprint. * Added Dockerfile to cross complile aria2 for RaspberryPI (armhf) Patch from Igor Khomyakov * multiple interface support for link aggregation Adds --multiple-interface option. Patch from Sarim Khan * Run on-bt-download-complete command when -V reports download finished Fixes GH-355 * Use dedicated DiskWriter in MultiDiskFileAllocationIterator We have to use dedicated DiskWriter instead of (*entryItr_)->getDiskWriter(). This is because SingleFileAllocationIterator cannot reopen file if file is closed by OpenedFileCounter. Fixes GH-350 * Fix getrandom for system with libc not including errno or systems not supporting ENOSYS in the first place. Fixes GH-347 * Don't send back rpc-secret option value in aria2.getGlobalOption RPC method * Make libuv default off See GH-241 for discussion * Fixed slow RPC response Fxies GH-345 * Fix getrandom interface detection Fixes GH-346