Commit Graph

85 Commits (24ae459523e4a41c711990b04bd9ed6f1222f559)

Author SHA1 Message Date
Tatsuhiro Tsujikawa 570bc24fb9 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.
2014-06-08 17:03:34 +09:00
Tatsuhiro Tsujikawa c0e4381780 util::parseIntSegments: Return SegList<int> 2014-06-04 23:21:01 +09:00
Tatsuhiro Tsujikawa 4f3c526dcd Support PREF_DIR change for Metalink files
Reworked previous commit adeead6f03, and
now support changing PREF_DIR for Metalink downloads.
2014-06-04 21:45:12 +09:00
Tatsuhiro Tsujikawa 83f4bced07 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().
2014-06-03 23:09:28 +09:00
Nils Maier 855dfa0e2f Authorize RPC multicalls only once.
Cache the auth status afterwards and just assume the token still matches
(within the same request, of course).
2014-05-20 12:53:39 +02:00
Nils Maier 010131161e Remove ENABLE_MESSAGE_DIGEST, since we got the internal md, always 2014-04-17 18:02:42 +02:00
Nils Maier c694a05797 Fix some warnings 2014-04-13 18:51:05 +02:00
Tatsuhiro Tsujikawa a8319a8b78 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.
2014-02-19 22:02:50 +09:00
Tatsuhiro Tsujikawa 1462d6536a 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.
2014-02-15 19:10:48 +09:00
Tatsuhiro Tsujikawa ba3b823a66 Code cleanup 2013-11-10 15:36:37 +09:00
Nils Maier a76eeb2b81 Introduce PrefPtr typedef 2013-09-19 19:59:33 +02:00
Nils Maier 8526ceeb45 Convert to autos and ranged loops 2013-08-21 05:56:17 +02:00
Tatsuhiro Tsujikawa 59e63d956e Rewrite RPC method factory function 2013-07-11 21:50:47 +09:00
Tatsuhiro Tsujikawa 7c06b903f3 Use std::unique_ptr for ValueBase object hierarchy 2013-07-11 21:09:51 +09:00
Tatsuhiro Tsujikawa 162c138362 BtRegistry: Use std::unique_ptr for BtObject 2013-07-06 19:09:39 +09:00
Tatsuhiro Tsujikawa 68f2a33355 DownloadEngine: Use std::unique_ptr for RequestGroupMan 2013-07-06 15:56:08 +09:00
Tatsuhiro Tsujikawa 74d6d64271 Use std::unique_ptr for MessageDigest 2013-07-03 01:13:13 +09:00
Tatsuhiro Tsujikawa 2761301dfb Rewrite util::divide 2013-06-25 00:07:15 +09:00
Tatsuhiro Tsujikawa fa9f3fb5a3 Wrap Command object in std::unique_ptr 2013-06-23 21:55:52 +09:00
Tatsuhiro Tsujikawa bef6236da8 DownloadContext::attrs_ now holds std::unique_ptr
DownloadContext::getAttribute() returns a raw pointer.
2013-06-23 00:59:55 +09:00
Tatsuhiro Tsujikawa 07d270c87e Require -std=c++11 and use std::shared_ptr instead of SharedHandle 2013-06-22 01:10:38 +09:00
Tatsuhiro Tsujikawa d444a6cc9e Make getOption RPC method return option for stopped downloads 2013-05-28 22:55:09 +09:00
Tatsuhiro Tsujikawa 06377d77c9 Add changeGlobalOption, getGlobalOption, getGlobalOptions API 2013-05-17 22:56:21 +09:00
Tatsuhiro Tsujikawa c7c4d46672 Add changeOption and DownloadHandle::getOption API
In aria2c.rst, define section label for "Input File" section so that
it can be referenced from other document.
2013-05-16 23:09:19 +09:00
Tatsuhiro Tsujikawa cef6db17ba Add changePosition API 2013-05-15 00:50:55 +09:00
Tatsuhiro Tsujikawa 4f5d26a0c7 Use BtFileMode for TorrentAttribute::mode 2013-05-15 00:09:51 +09:00
Tatsuhiro Tsujikawa bbc8866cfb Add removeDownload, pauseDownload and unpauseDownload API function 2013-05-01 16:58:34 +09:00
Tatsuhiro Tsujikawa d4ba562710 Implement IndexedList::iterator
It is dangerous to expose internal iterator to the outside, which is
easily misused.
2013-03-03 18:00:42 +09:00
Tatsuhiro Tsujikawa 1e4f301ec1 Remove PeerStorage::getActivePeers() and add getUsedPeers() instead
PeerStorage::getUsedPeers() returns non-active peers, so caller must
call Peer::isActive() to get active peers.
2013-01-26 18:36:09 +09:00
Tatsuhiro Tsujikawa 07bb779eb0 Faster deletion of RequestGroup and DownloadResult lists 2012-12-19 23:03:48 +09:00
Tatsuhiro Tsujikawa b9da9d4ed3 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.
2012-12-16 17:29:01 +09:00
Tatsuhiro Tsujikawa 21c3903af0 Simplified TransferStat struct 2012-10-26 00:16:20 +09:00
Tatsuhiro Tsujikawa 0ecfa19925 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.
2012-10-25 23:33:45 +09:00
Tatsuhiro Tsujikawa a9c76ed35e 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.
2012-10-16 00:18:34 +09:00
Tatsuhiro Tsujikawa 8b0c701266 Removed trailing spaces 2012-10-01 23:52:22 +09:00
Tatsuhiro Tsujikawa ae2e4cb7ff Handle OptionHandlers as raw pointer 2012-09-27 22:45:31 +09:00
Tatsuhiro Tsujikawa 89f18dde85 Use nothrow version of parseInt, parseUInt and parseLLInt 2012-09-27 00:45:32 +09:00
Tatsuhiro Tsujikawa 9d294741fd Rewritten FeatureConfig into set of functions 2012-09-22 20:56:39 +09:00
Tatsuhiro Tsujikawa e2340efe27 Use std::vector instead of std::map for ContextAttribute objects
Now key for ContextAttribute object store is int instead of string.
2012-09-22 17:37:30 +09:00
Tatsuhiro Tsujikawa 2795176d79 Add GID => RequestGroup index for faster access to RequestGroup 2012-07-31 23:55:51 +09:00
Tatsuhiro Tsujikawa c1ddf34e4b Specify torrent file explicitly in createRequestGroupForBitTorrent() 2012-07-26 21:20:08 +09:00
Tatsuhiro Tsujikawa 1b874268a0 Use int64_t instead of off_t
Some classes such as DiskAdaptor, DiskWriter, FileAllocationIterator
and ChecksumValidator are left unchanged.
2012-06-25 23:35:24 +09:00
Tatsuhiro Tsujikawa 4b03634f36 Use PRId64 for int64_t format specifier 2012-06-25 22:43:33 +09:00
Tatsuhiro Tsujikawa eed804baaa Use std::set instead of std::deque if the elements are sorted and
insertions and deletions are frequent.
2012-03-23 01:34:37 +09:00
Tatsuhiro Tsujikawa f4e0eae904 Added checkRequiredInteger() to check integer param is in valid range.
Ensure that fileIndex in aria2.changeUri RPC method is greater than or
equal to 1.
2012-02-26 21:49:37 +09:00
Tatsuhiro Tsujikawa d4e9b07719 Fixed compile error without BitTorrent support 2011-12-11 03:13:33 +09:00
Tatsuhiro Tsujikawa c8191700b1 Fixed compile error without BitTorrent and Metalink support 2011-12-11 00:08:13 +09:00
Tatsuhiro Tsujikawa 9a6f88c162 Use util::itos() for signed integrals 2011-12-09 21:40:22 +09:00
Tatsuhiro Tsujikawa 9d15d732ed Use int32_t for piece length instead of size_t 2011-12-09 21:39:43 +09:00
Tatsuhiro Tsujikawa 12988e5282 Replaced uint64_t with off_t or int64_t.
Since off_t is int64_t with LFS, we cannot take advantage of extra
capacity of uint64_t.
2011-12-09 21:39:43 +09:00