NEWS 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. aria2 1.18.10
  2. =============
  3. Release Note
  4. ------------
  5. This releases fixes several bugs reported since the last release.
  6. Changes
  7. -------
  8. * Add encoding specifier to Russian man page
  9. Fixes GH-341
  10. * Mingw: Use _wgetenv to get user's home directory
  11. Fixes GH-342
  12. * Handle linux getrandom returning EINTR on interrupts/signals
  13. Also handle ENOTSUP failures where aria2 was build with linux
  14. headers newer than the actual running kernel.
  15. Fixes GH-336
  16. aria2 1.18.9
  17. ============
  18. Release Note
  19. ------------
  20. This releases fixes memory leak with OpenSSL and crash on OSX when
  21. proxy is used. We added several new features. Adler32 checksum is
  22. now available in --checksum option and hash element in Metalink files.
  23. We added --bt-detach-seed-only option, which excludes seed-only
  24. downloads when counting concurrent active downloads (-j option). We
  25. disabled SSLv3 by default. If you ever want to enable it or further
  26. tune the TLS protocols to enable, use new --min-tls-version option.
  27. --bt-force-encryption option was added to make requiring BitTorrent
  28. full encryption easier. From this release, we build Android binary
  29. using API level 16.
  30. Changes
  31. -------
  32. * Support HTTP date ending "+0000" as well as "GMT".
  33. Closes GH-330
  34. * Revise getRandom facilities
  35. Use one of the following to provide random bytes:
  36. - Windows CryptGenRandom
  37. - Linux getrandom (syscall interface to urandom, without nasty
  38. corner cases such as file descriptor exhaustion or re-linked
  39. /dev/urandom)
  40. - std::device_random (C++ random device, which usually will be
  41. urandom)
  42. This also equalizes util::getRandom and SimpleRandomizer (the former
  43. will now use the latter) instead of having essentially two different
  44. PRNG interfaces with potentially different quality.
  45. Closes GH-320
  46. * Added debug log of all Metalink URLs with final priorities
  47. Patch from Dan Fandrich
  48. * Use gcc-4.9 and android-16 API level for android build
  49. * Add --bt-force-encryption option
  50. This option requires BitTorrent message payload encryption with
  51. arc4. This is a shorthand of --bt-requre-crypto
  52. --bt-min-crypto-level=arc4. If true is given, deny legacy
  53. BitTorrent handshake and only use Obfuscation handshake and always
  54. encrypt message payload. This option defaults to false.
  55. * TLS: Fix memory leak with OpenSSL
  56. Based on the patch submitted by midnight2k
  57. * Warn about insecure SSL connections.
  58. Fixed GH-313
  59. * Add --min-tls-version option
  60. The --min-tls-version option specifies minimum SSL/TLS version to
  61. enable. Possible Values: SSLv3, TLSv1, TLSv1.1, TLSv1.2 Default:
  62. TLSv1
  63. * LibsslTLSContext: Disable SSLv3 and enable ECDHE cipher suites
  64. * Add Dockerfile.mingw
  65. Dockerfile.mingw builds aria2 Windows binary. It is probably the
  66. easiest way to build the Windows binary.
  67. * Fix crash when JSON batch response vector is empty
  68. * Fix doc: Wrong rpc secret token prefix
  69. * Add --bt-detach-seed-only option
  70. This option excludes seed only downloads when counting concurrent
  71. active downloads (-j option). This means that if -j3 is given and
  72. this option is turned on and 3 downloads are active and one of those
  73. enters seed mode, then it is excluded from active download count
  74. (thus it becomes 2), and the next download waiting in queue gets
  75. started. But be aware that seeding item is still recognized as
  76. active download in RPC method.
  77. * mingw: Use MoveFileExW for better atomic move
  78. * Work around libintl's vprintf macro messing with OutputFile::vprintf
  79. Patch from David Macek
  80. * Fix crash on OSX when proxy is used
  81. See GH-275
  82. * Support Adler32 checksum
  83. Adler32 checksum is available for --checksum option and hash element
  84. in Metalink files. Currently, we use Adler32 implementation in
  85. Zlib.
  86. aria2 1.18.8
  87. ============
  88. Release Note
  89. ------------
  90. This releases fixes the bug that aria2 cannot read piped stdin on
  91. mingw32. It also fixes busy loop on mingw32 when SSL/TLS is used. We
  92. also fixed 2 crashes which can occur on all platforms.
  93. Changes
  94. -------
  95. * WinTLS: Fix abrupt connection closing and closing in general.
  96. Fixes GH-277
  97. * LibsslTLSSession: Treat 0 from readData as EOF
  98. * Enable dynamicbase and nxcompat in Windows binaries
  99. * Fix crash in OpenedFileCounter::ensureMaxOpenFileLimit()
  100. The crash happens if PieceStorage and/or DiskAdaptor are not
  101. initialized in one of active RequestGroups.
  102. * mingw32: Fix bug that aria2 does not read piped stdin
  103. * Fix std::length_error when no_proxy is used
  104. This is regression introduced in 8cada497.
  105. * Try to set sane limits for RLIMIT_NO_FILE
  106. E.g. on OSX the default is 256, which isn't exactly compatible with
  107. torrent downloads.
  108. Closes GH-257
  109. * Delay auth failures instead of PBKDF2
  110. Closes GH-256
  111. aria2 1.18.7
  112. ============
  113. Release Note
  114. ------------
  115. This release fixes regression which makes 100% CPU utilization in
  116. multi-file torrent download with -V option. It also fixes build error
  117. on big endian platforms.
  118. Changes
  119. -------
  120. * Fixed segfault unsupported encodings
  121. Patch from diadistis
  122. * Fix regression 100% CPU utility when -V is used and download is
  123. multi-file bittorrent downloads.
  124. This is regression of a3426821c8a7f9cf8d80a81726157d4eb844f661
  125. * Fix compile error on big endian platform
  126. aria2 1.18.6
  127. ============
  128. Release Note
  129. ------------
  130. This release fixes several bugs reported in github issues and adds a
  131. feature to make RPC authentication more resilient to certain attacks.
  132. New option --pause-metadata is added. The explanation is a bit log,
  133. so check the changelog and manual. The session is now only saved if
  134. there are changes from the last saved state.
  135. From this release, MinGW32 build uses Windows native TLS
  136. implementation and no longer use OpenSSL library.
  137. Changes
  138. -------
  139. * Disard cache when checking checksum
  140. This will slow down checksum checking but does not thrash cache.
  141. * Compat with libuv 0.11 (Unstable)
  142. Fixes #241
  143. * Drop WinMessageDigestImpl.
  144. The algorithms the `CryptProv` on Windows supports does not
  145. currently include SHA-224, so there is a "dark spot" in this
  146. implementation. Also on Win XP < SP3, most of the SHA-2 family is
  147. not actually supported. All other implementation provide support
  148. for MD5, SHA-1 and all of the SHA-2 family, hence drop the
  149. incomplete WinMessageDigest implementation in favor of any other
  150. supported implementation (at least the internal implementation is
  151. always available at compile-time).
  152. * Add --pause-metadata option
  153. This option pauses downloads created as a result of metadata
  154. download. There are 3 types of metadata downloads in aria2: (1)
  155. downloading .torrent file. (2) downloading torrent metadata using
  156. magnet link. (3) downloading metalink file. These metadata
  157. downloads will generate downloads using their metadata. This option
  158. pauses these subsequent downloads.
  159. * Improve compiler/platform/libs information in logs
  160. Add and use usedCompilerAndPlatform(). This adds compiler
  161. information to INFO logs and the --version output, and may be
  162. helpful when trying to diagnose/reproduce user-reported problems.
  163. Also make INFO logs include usedLibs() output.
  164. Closes #235
  165. * Fix use-after-free on exit with multi-file torrent download + DHT
  166. DefaultPieceStorage may be referenced by one of DHT task (e.g.,
  167. DHTPeerLookupTask), after RequestGroup was deleted, and even after
  168. RequestGroupMan was deleted. DefaultPieceStorage has a reference to
  169. MultiDiskAdaptor which calls RequestGroupMan object on destruction.
  170. So when DHT task is destroyed, DefaultPieceStorage is destroyed,
  171. which in turn destroys MultiDiskAdaptor. DHT task is destroyed
  172. after RequestGroupMan was destroyed, MultiDiskAdaptor will use now
  173. freed RequestGroupMan object, this is use-after-free.
  174. * Fix bug that zero length file is not opened when flushing cache
  175. This bug was only seen when MultiDiskAdaptor was used.
  176. * Support PREF_DIR change for Metalink files
  177. Reworked previous commit adeead6f0396e2f8551d1182972e277728fd6c8b,
  178. and now support changing PREF_DIR for Metalink downloads.
  179. * Fix assertion failure when dir option of paused HTTP/FTP download is
  180. changed
  181. When the directory is changed via aria2.changeOption RPC method, we
  182. directly change first FileEntry's path using FileEntry::setPath().
  183. If there is no PREF_OUT option is given, basically file name is
  184. unknown, so we just set empty string and let the next run determine
  185. the correct file name and new directory is applied there. But
  186. previous code does not reset length property of FileEntry, so the
  187. unexpected code path is taken when unpaused and its path expects
  188. path is not empty string. This commit fixes this issue by setting
  189. length to 0 using FileEntry::setLength().
  190. * Save session only when there is change since the last serialization
  191. This is a slight optimization not to cause useless disk access.
  192. This only applies to saving session automatically (see
  193. --save-session-interval). aria2.saveSession and serialization at
  194. the end of the session are always performed as before.
  195. When serialization, we first check that whether there is any change
  196. since the last serialization. To do this, we first calculate hash
  197. value of serialized content without writing into file. Then compare
  198. this value to the value of last serialization. If they do not
  199. match, perform serialization.
  200. * Fix (unknown length) downloads larger than 2GiB
  201. Closes #215
  202. * Fix F_PREALLOC based allocation on some OSX versions
  203. * Use index.html as filename for conditional-get when file is missing
  204. in URI
  205. Previously we disabled conditional-get if file part is missing in
  206. URI. But we use constant string "index.html" in this case, so we
  207. can do the same to determine the modification time. In this patch,
  208. if we have file part in URI, we are not going to set absolute file
  209. path in FileEntry, since it prevents content-disposition from
  210. working.
  211. * Always add README.html to dist_doc_DATA
  212. rst2html is required to produce README.html from README.rst. We
  213. include generated README.html to distribution. And rst2html is not
  214. required when compiling sources in distribution and always
  215. README.html is available.
  216. * Validate token using PBKDF2-HMAC-SHA1.
  217. This change should make token validation more resilient to:
  218. - timing attacks (constant time array compare)
  219. - brute-force/dictionary attacks (PBKDF2)
  220. Closes #220
  221. * Add --disable-websocket configure option
  222. * mingw32: Enable wintls and compile with GMP
  223. By enabling wintls, we can use Windows certificate store to validate
  224. server's certificate. Previously, we built windows build using
  225. openssl and since we don't bundle CA certificates, aria2 fails to
  226. validate server's certificate unless user setups their CA
  227. certificates. GMP provides fast big integer calculations, whic is
  228. used in BitTorrent encryption.
  229. * AppleTLS: Enable BEAST mitigations in ST
  230. Only available in 10.9+, but since we might be building on a
  231. previous version but running on 10.9+, always try to set the option.
  232. * WinTLS: Accept chains with no revocation information.
  233. This is kind what browser do anyway (IE, Firefox, Chrome tested),
  234. what AppleTLS does, what GnuTLS does and what OpenSSL
  235. does. Actually, most browsers will also be OK with the CRL/OCSP
  236. provider being offline. WinTLS will still fail in that case.
  237. Should revocation information be available in the trust chain (CRL
  238. or OCSP) the certificate still will be checked!
  239. "Real" CAs, aka. those provided by the OS or system CA bundle,
  240. usually provide revocation information and are thus still checked.
  241. It should be mostly (only?) custom (organization) CAs that lack
  242. revocation information, but those users might want to use aria2 in
  243. their intranets and VPNs anyway ;)
  244. See #217
  245. * Fix GnuTLS 2.x compatiblity
  246. Closes GH-216
  247. * AppleTLS: Use newer, non-deprecated API in 10.8+
  248. aria2 1.18.5
  249. ============
  250. Release Note
  251. ------------
  252. This release fixes BitTorrent download failure on Mingw build.
  253. Changes
  254. -------
  255. * Ignore error when setting DSCP value
  256. Setting DSCP is additional feature and failure to enable it should
  257. not abort download entirely. This change fixes the bug that windows
  258. build does not perform bittorrent downloads.
  259. aria2 1.18.4
  260. ============
  261. Release Note
  262. ------------
  263. This release adds new RPC authorization mechanism using --rpc-secret
  264. option. The existing --rpc-user and --rpc-passwd options are now
  265. deprecated, and all applications using RPC API is strongly encouraged
  266. to migrate to the new mechanism. See RPC INTERFACE section in aria2
  267. manual page for the details. The new RPC method, aria2.saveSession,
  268. was added, which tells aria2 server to save session file immediately.
  269. There are several enhancements and bug fixes. See the changes for the
  270. details.
  271. Changes
  272. -------
  273. * Added support for RPC channel encryption in aria2rpc
  274. Patch from David Macek
  275. * Add aria2.saveSession RPC method
  276. This method saves the current session to a file specified by
  277. --save-session option. This method returns "OK" if it succeeds.
  278. * Add numStoppedTotal key to aria2.getGlobalStat() RPC method response
  279. It shows the number of stopped downloads in the current session and
  280. not capped by --max-download-result option. On the other hand, the
  281. existing numStopped key also shows the number of stopped downloads,
  282. but it is capped by --max-download-result option.
  283. * Better handling of 30x HTTP status codes
  284. Reference: http://greenbytes.de/tech/tc/httpredirects/
  285. * Implement new RPC authorization using --rpc-secret option
  286. Add future deprecation warning to --rpc-user and --rpc-passwd. Warn
  287. if neither --rpc-secret nor a combination of --rpc-user/rpc-passwd
  288. is set.
  289. * Add --enable-color option to enable/disable terminal color output
  290. * Add DSCP support
  291. * gnutls: Don't fail handshake if returned error is not fatal
  292. * Add workaround GnuTLS bug with OCSP status extension and
  293. non-blocking socket
  294. GnuTLS version 3.1.3 - 3.1.18 and 3.2.0 - 3.2.8, inclusive, has this
  295. bug. For these versions, we disable OCSP status extension.
  296. * Make GnuTLS log level dependent on the aria2 ones
  297. aria2 1.18.3
  298. ============
  299. Release Note
  300. ------------
  301. This release fixes the bug which may cause assertion failure after
  302. multi-file downloads (e.g., multi-file metalink or torrent) are
  303. performed several times due to the bad handling of --bt-max-open-files
  304. option.
  305. Changes
  306. -------
  307. * Fix crash if unpause failed before assigning BtProgressInfoFile
  308. object
  309. * Enable and check PIE in makerelease-osx
  310. * Fix bug that numOpenFile_ is not reduced when MultiDiskAdaptor is
  311. deleted
  312. This bug caused assertion error in
  313. RequestGroupMan::ensureMaxOpenFileLimit
  314. aria2 1.18.2
  315. ============
  316. Release Note
  317. ------------
  318. This release fixes the wrong handling of return value of fork(), which
  319. leads to high CPU usage. The progress readout has some color output.
  320. Mingw32 build now receives colorized output. Mingw32 build now can
  321. read unicode command-line arguments. The build script of OSX was
  322. rewritten. The --bt-max-open-files now limits the number of opened
  323. file globally for multi-file downloads instead of per download basis.
  324. Changes
  325. -------
  326. * Remove the outdated, broken build_osx_release.sh
  327. * Initial revision of the a new OSX release Makefile
  328. * Allow using libgmp with AppleTLS/WinTLS
  329. * Fix crash when metaurl contains unsupported URI or text
  330. * Fix bad fork() return value handling
  331. * Use some colors in progress reports (where available)
  332. * Implement basic color support for the Windows console
  333. Only \033[*m (SGR) is supported, with a 16+16 color terminal.
  334. * AppleTLS: Implement PKCS12 loading.
  335. * Limit number of opened file globally with --bt-max-open-files option
  336. This change changes the behavior of --bt-max-open-files. Previously,
  337. it specifies the maximum number of opened files for each multi-file
  338. download. Since it is more useful to limit the number globally, the
  339. option now specifies the global limit. This change suggests that
  340. aria2.changeOption() method now ignores --bt-max-open-files and
  341. aria2.changeGlobalOption now reads it and dynamically change the
  342. limit.
  343. * Don't fail multiple concurrent dl same file if auto-file-renaming is
  344. enabled
  345. * mingw32: Use CommandLineToArgvW() and GetCommandLineW() to read
  346. cmd-line args
  347. This change enables aria2 to read unicode characters in
  348. command-line.
  349. aria2 1.18.1
  350. ============
  351. Release Note
  352. ------------
  353. This release fixes the percent-encoding bug which affects file name
  354. encodings. It adds PKCS12 support in certificate import. It also adds
  355. experimental internal implementation of message digest functions, ARC4
  356. cipher and bignum. It means that no external libraries are required to
  357. build BitTorrent support, but this feature is still marked as
  358. experimental. This release also fixes the android build with NDK r9.
  359. Changes
  360. -------
  361. * LibsslTLSContext: Remove weak cipher suite
  362. * AppleTLS: Enable --certificate
  363. * util::percentEncodeMini: Fix regression bug removed unsignedness
  364. srange-based for around std::string is convenient but several
  365. functions depend unsigned char for correctness and readability.
  366. * Log exception; throw error if loading private key and/or certificate
  367. failed
  368. * Provide internal ARC4 implementation
  369. Now you can build bittorrent support without without external
  370. libraries, meaning you can skip libnettle, libgmp, libgcrypt, GnuTLS
  371. and OpenSSL on OSX (for now).
  372. * Internal implementation of DHKeyExchange
  373. Reusing a bignum (well, unsigned very-long) implementation I had
  374. lying around for years and just cleaned up a bit and brought to
  375. C++11 land.
  376. It might not be the most performant implementation, but it shoud be
  377. fast enough for our purposes and will go a long way of removing
  378. gcrypt, nettle, gmp, openssl dependencies when using AppleTLS and
  379. WinTLS (upcoming).
  380. * PKCS12 support in --certificate and --rpc-certificate options.
  381. * Add --disable-ssl configure option
  382. * Add internal md5 and sha1 message digests
  383. * Fix AppleMessageDigestImpl use with large data
  384. * Set old cookie's creation-time to new cookie on replacement
  385. As described in http://tools.ietf.org/html/rfc6265#section-5.3
  386. * Fix link error with Android NDK r9
  387. Since Android ndk r9, __set_errno is deprecated. It is now defined
  388. as inline function in errno.h. The syscall assembly calls
  389. __set_errno, but since libc.so does not export it, the link
  390. fails. To workaround this, replace all occurrences of __set_errno
  391. with a2_set_errno and define it as normal C function.
  392. aria2 1.18.0
  393. ============
  394. Release Note
  395. ------------
  396. This release changes the default disk cache size to 16 MiB. To change
  397. the default size, --with-disk-cache configure option was added. Now
  398. used URIs are also saved by --save-session option. The control file is
  399. now always saved if --force-save is given. The ctrl-c handling on
  400. Mingw build was improved. The internal intl library is no longer
  401. supplied. From this release, C++11 compiler is required to build aria2
  402. executable. For gcc, at least 4.6.3 is required.
  403. Changes
  404. -------
  405. * Use AM subdir-objects
  406. Doing so in AM_INIT_AUTOMAKE seems to be the most compatible way of
  407. doing so.
  408. Closes GH-120
  409. * AM_SILENT_RULES([yes]) with backwards-compatiblity
  410. Supported since automake-1.11. There is no point in having the very
  411. verbose compile stuff running about, which cannot even silenced
  412. properly with `make -s` by default. Otherwise, `make V=1` or
  413. `--disable-silent-rules` are your friends
  414. * Fix automake-1.14 am_aux_dir
  415. AC_USE_SYSTEM_EXTENSIONS will cause AC_PROG_CC, which is overridden
  416. by automake-1.14, which will then init (part) of automake, in
  417. particular am_aux_dir expansion, which in turn relies on ac_aux-dir,
  418. which is not initialized at this point, and thus: certain doom (or
  419. fun, depending on your POV and mood :p)
  420. Hence call AC_USE_SYSTEM_EXTENSIONS only after
  421. AM_INIT_AUTOMAKE. This, of course, caused a lot of related macro
  422. shuffling.
  423. Tested against automake-1.10 (OSX Lion/XCode version) and
  424. automake-1.14 (homebrew version)
  425. * Require external gettext for --enable-nls
  426. And stop using the internal flavor with ./intl
  427. * Make AX_CXX_COMPILE_STDCXX_11 test for -stdlib=libc++ via std::shared_ptr
  428. The clang shipped with OSX XCode and clangs not build enabling
  429. libcpp, will default to the libstdc++ headers and lib installed on
  430. the system. In the OSX case, that libstdc++ is the one bundles with
  431. gcc-4.2, which is far too old to provide all required C++11 types,
  432. such as std::shared_ptr. Hence, the C++11 check should try to
  433. compile a program with a C++11 type and try -stdlib=libc++ if the
  434. default lib fails to compile said program.
  435. * Make the configure check for C++11 compiler mandatory
  436. Remove stray "dnl", so that mandatory actually works with (my)
  437. autoreconf.
  438. * Always build doc/manual-src
  439. Should sphinx-build be not available AND the man file not be prsent,
  440. then just "touch" it into existence (and warn about that)
  441. * Win: Use SetConsoleCtrlHandler for SIGINT/SIGTERM
  442. * Implement a simple resource lock (threading)
  443. In this initial implementation Locks are no-ops on platforms other
  444. than Windows.
  445. * Check for sphinx-build during configure
  446. * Add --with-disk-cache configure option
  447. Enables packagers more fine grained control over the default value
  448. without having to mess with config files.
  449. See GH-115
  450. * Change defaults: Enable 16M disk cache by default.
  451. * Always save control file if --force-save is given
  452. * Set log level DEBUG for unittests
  453. * Check that C++ compiler supports override keyword
  454. If the compiler supports override, define CXX11_OVERRIDE as
  455. override, otherwise define it as empty. Use CXX11_OVERRIDE instead
  456. of override.
  457. * AppleTLS: Fix MessageDigestImpl
  458. * AppleTLS: Fix session CFRelease stuff
  459. * Use AX_CXX_COMPILE_STDCXX_11 macro to detect C++0x/C++11 support in
  460. compiler
  461. * Require -std=c++11 and use std::shared_ptr instead of SharedHandle
  462. * Join URI on redirect
  463. * Send HAVE message to the peer which the piece is downloaded from
  464. Historically, aria2 did not send HAVE message to the peer which the
  465. piece is coming from, thinking it is obvious that the peer knows we
  466. have the piece. But it is not obvious if one piece is download from
  467. more than 1 peers (e.g., end game mode). So it is better to send
  468. HAVE to all peers connected.
  469. * Improvements to --follow-torrent=false documentation.
  470. Patch from gt
  471. * SessionSerializer: Truly unique URIs
  472. Before, only spent uris where sanitized not to be contained within
  473. remaining uris. Change this so that each uri in the
  474. union(remaining,spent) get saved once at most. The order of the
  475. uris will won't be changed, with remaining uris going first followed
  476. by spent uris.
  477. Also avoid copying the uri std::strings around during dupe checking,
  478. usually resulting in better performance regarding CPU and space.
  479. * Make getOption RPC method return option for stopped downloads
  480. * SessionSerializer: Save spent URIs as well as remaining ones