Commit Graph

2908 Commits (126a4bde612eb0e6c48cf2f13ebe3eac45cc71a8)

Author SHA1 Message Date
Tatsuhiro Tsujikawa 1ad815061b Rewritten SpeedCalc 2013-01-11 23:29:58 +09:00
Tatsuhiro Tsujikawa c893d82867 Removed BtMessage::isSendingProgress()
DefaultBtMessageDispatcher::isSendingInProgress() now checks the
number of buffer entry in PeerConnection.
2013-01-11 20:26:31 +09:00
Tatsuhiro Tsujikawa c04df672d1 Buffer up at most A2_IOV_MAX buffer entries for BtMessages 2013-01-11 18:46:36 +09:00
Tatsuhiro Tsujikawa e0ea88ebcf mingw32: Make NTFS sparse file on --file-allocation=trunc 2013-01-11 18:35:54 +09:00
Tatsuhiro Tsujikawa 357e4b1a77 Made SocketCore::readData() and readDataFrom() take void* 2013-01-11 17:03:59 +09:00
Tatsuhiro Tsujikawa 8ba0d58ee1 Vectorized write for SocketBuffer to avoid small packet 2013-01-11 16:50:04 +09:00
Tatsuhiro Tsujikawa 8e63bad2da 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.
2013-01-10 00:15:30 +09:00
Tatsuhiro Tsujikawa 87af7c32c6 Use request URI as referer if --referer="*" is given 2013-01-08 21:42:42 +09:00
Tatsuhiro Tsujikawa 08bed3f77f Log warn if unknown option is found in config file or -i file 2013-01-07 22:42:28 +09:00
Tatsuhiro Tsujikawa d6000024c0 Added --console-log-level option
--console-log-level option sets log level to output to console.
2013-01-05 18:48:09 +09:00
Tatsuhiro Tsujikawa f019eae5df mingw32: Use LANG_ENGLISH for error message 2012-12-27 00:53:22 +09:00
Tatsuhiro Tsujikawa 247084f9c3 Fixed bug that USR_BASENAME is not defined
In some cases, if the dirname is only "/", the basename will not be
defined (e.g., "/f"). This change fixes this bug.
2012-12-27 00:03:37 +09:00
Tatsuhiro Tsujikawa bd671403bc Fix compiler warning 2012-12-26 23:10:32 +09:00
Tatsuhiro Tsujikawa c09a5a95f4 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.
2012-12-24 23:03:19 +09:00
Tatsuhiro Tsujikawa d13aa3a0b3 Added missing IndexedList.h to SRCS 2012-12-24 21:23:52 +09:00
Tatsuhiro Tsujikawa 616cd9e75f Simplified RequestGroupMan::fillRequestGroupFromReserver 2012-12-22 23:37:44 +09:00
Tatsuhiro Tsujikawa b017e80438 Changed threshold of using upper unit for abbrevSize 2012-12-19 23:58:24 +09:00
Tatsuhiro Tsujikawa 07bb779eb0 Faster deletion of RequestGroup and DownloadResult lists 2012-12-19 23:03:48 +09:00
Tatsuhiro Tsujikawa c8565360b0 Removed unused variables 2012-12-17 00:43:13 +09:00
Tatsuhiro Tsujikawa 77a4ee4de0 Save gid option with --save-session option 2012-12-17 00:33:11 +09:00
Tatsuhiro Tsujikawa 0a4ce4fdb5 Use map to make DownloadResult lookup fast 2012-12-16 18:50:45 +09:00
Tatsuhiro Tsujikawa 0001f4cfbd 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.
2012-12-16 18:22:13 +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 04586f50b1 Fixed BitfieldMan::getOffsetCompletedLength overflow on 32-bit systems 2012-12-16 17:26:01 +09:00
Tatsuhiro Tsujikawa de1ca6d6b8 mingw32: Use HANDLE only for MinGW32 build 2012-12-15 18:28:46 +09:00
Tatsuhiro Tsujikawa 2235743de3 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.
2012-12-12 23:22:04 +09:00
Tatsuhiro Tsujikawa 4fdd5da27d 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.
2012-12-11 23:40:06 +09:00
Tatsuhiro Tsujikawa 79fce29bda Fixed segmentation fault if fp_ is NULL 2012-12-11 23:39:12 +09:00
Tatsuhiro Tsujikawa e86fd44dc5 Console color output
Log level and download result string is now colored.
2012-12-08 21:48:18 +09:00
Tatsuhiro Tsujikawa 9a5fff0de0 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]".
2012-12-08 19:13:59 +09:00
Tatsuhiro Tsujikawa 2364f809c3 Code cleanup: Merged successive string literals in readout 2012-12-08 19:09:03 +09:00
Tatsuhiro Tsujikawa bf56f3c299 Check the output file is terminal or not in ctor 2012-12-08 18:38:30 +09:00
Tatsuhiro Tsujikawa 9d7bb9d01a Release statically allocated resources for prefs and options
Not realeasing these resources does not hurt the correctness of the
program, but memory leak detection tool, such as valgrind, reports it
as potential memory leak. It is better to distinguish it from the real
ones.
2012-12-08 17:52:10 +09:00
Tatsuhiro Tsujikawa 901227db9b Updated usage of --disk-cache 2012-12-07 00:44:42 +09:00
Tatsuhiro Tsujikawa 7a02177698 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.
2012-12-07 00:32:44 +09:00
Tatsuhiro Tsujikawa 5683f2fb3e Removed unused staticSHA1Digest 2012-12-07 00:12:22 +09:00
Tatsuhiro Tsujikawa bec0f6dc11 Removed warning when --file-allocation=falloc is used in MinGW32 build
The warning was just a mistake. SetFilePointerEx + SetEndOfFile
actually allocate disk space.
2012-12-06 22:48:46 +09:00
Tatsuhiro Tsujikawa a6b18c868b Log size before flush 2012-12-06 03:04:41 +09:00
Tatsuhiro Tsujikawa df5f1fe77f Fixed bug that size_ is not updated when WrDiskCacheEntry::append is called 2012-12-06 03:04:05 +09:00
Tatsuhiro Tsujikawa 838949ab85 Append new data to the contagious cache data
If we receive small data (e.g., 1 or 2 bytes), cache entry becomes a
headache. To mitigate this problem, we allocate cache buffer at least
4KiB and append the data to the contagious cache data.
2012-12-06 02:23:32 +09:00
Tatsuhiro Tsujikawa 2c5e77f422 Flush cached data on checkout/cancel Segment
This change prevents the cached data from overlap because of BT peers.
2012-12-06 01:16:28 +09:00
Tatsuhiro Tsujikawa 56c498bcbf Clear write cache on Segment::clear and Piece::clearAllBlock 2012-12-06 00:39:14 +09:00
Tatsuhiro Tsujikawa 9ed8502e74 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.
2012-12-06 00:17:11 +09:00
Tatsuhiro Tsujikawa 911851debb mingw32: Removed FSCTL_SET_SPARSE set 2012-12-03 23:07:05 +09:00
Tatsuhiro Tsujikawa f314719618 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.
2012-12-03 01:39:10 +09:00
Tatsuhiro Tsujikawa 8ac433a8e9 Fixed compile error without SSL/TLS lib 2012-12-01 23:37:57 +09:00
Tatsuhiro Tsujikawa 2cbdd8b845 Fixed compile error without BitTorrent support 2012-12-01 21:33:25 +09:00
Tatsuhiro Tsujikawa 7e59e2dbb5 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.
2012-12-01 19:38:30 +09:00
Tatsuhiro Tsujikawa b95f15b462 Use Win32 API for file I/O in AbstractDiskWriter
Now file has been opened by aria2 is now readable by other processes.
2012-11-30 01:20:49 +09:00
Tatsuhiro Tsujikawa 74520b03f8 Set F_GLOBAL_NOCACHE for Mac OS X 2012-11-28 21:47:55 +09:00
Tatsuhiro Tsujikawa 506a9358e1 Refactored file open code 2012-11-28 21:46:44 +09:00
Tatsuhiro Tsujikawa 16e25ef4e1 Enabled TCP_NODELAY in SocketCore::establishConnection and acceptConnection 2012-11-28 00:20:43 +09:00
Tatsuhiro Tsujikawa e781e6eac1 Made socket non-blocking mode in SocketCore::beginListen() 2012-11-28 00:15:03 +09:00
Tatsuhiro Tsujikawa 438f95abae Made socket non-blocking mode in SocketCore::acceptConnection() 2012-11-28 00:10:32 +09:00
Tatsuhiro Tsujikawa e0dcb942b2 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.
2012-11-17 15:33:44 +09:00
Tatsuhiro Tsujikawa 2ee4361848 Removed unused static function util::parseParam 2012-11-17 14:38:55 +09:00
Tatsuhiro Tsujikawa 9c1fe4addd Use array_ptr to remove try block 2012-11-15 22:05:59 +09:00
Tatsuhiro Tsujikawa 6b2f5ab1f5 SocketCore::bind now accepts const char* host instead of std::string 2012-11-15 21:09:10 +09:00
Tatsuhiro Tsujikawa b2893f1e31 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.
2012-11-04 16:49:39 +09:00
Tatsuhiro Tsujikawa 31189b1222 Made return type of util::parse_content_disposition ssize_t 2012-11-01 22:54:32 +09:00
Tatsuhiro Tsujikawa 08cd68ec95 Removed Socket.h from SRCS 2012-10-31 19:07:08 +09:00
Tatsuhiro Tsujikawa bf342a2827 Fixed compile error with mingw 2012-10-31 17:10:49 +09:00
Tatsuhiro Tsujikawa d4e7b51eb9 Made --http-no-cache false by default 2012-10-31 16:44:28 +09:00
Tatsuhiro Tsujikawa 49e9f66c16 Use len formal parameter of util::parse_content_disposition 2012-10-31 01:24:10 +09:00
Tatsuhiro Tsujikawa 5dfd1a5af7 Fixed memory leak 2012-10-29 23:43:35 +09:00
Tatsuhiro Tsujikawa 00e3151110 Initialized member 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa f60b956a48 Removed always-true condition 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa 2676bbe9c6 Initialized scalar members 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa feb548e174 Removed unused members 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa 6fddbc845c Removed dead code 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa f42199b46d Fixed resource leak 2012-10-29 23:42:58 +09:00
Tatsuhiro Tsujikawa 8566d050ff Reset stream format state 2012-10-29 22:39:09 +09:00
Tatsuhiro Tsujikawa d6f73292fa gnutls: Added more status checking when verifying peer 2012-10-27 17:46:53 +09:00
Tatsuhiro Tsujikawa 118aed9c24 Content-Disposition parser conforming to RFC 6266.
RFC 2231 Continuation is not supported.
2012-10-27 14:51:07 +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 46bdaf0e8d Made HTTP/FTP download speed limiter more accurate
We have to do the same thing for BitTorrent.
2012-10-24 01:05:41 +09:00
Tatsuhiro Tsujikawa da8086cbc9 Updated doc 2012-10-16 22:55:14 +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 4a4fec2c8c Removed socket readability check from checkIfConnectionEstablished() 2012-10-15 23:27:51 +09:00
Tatsuhiro Tsujikawa 841395f332 Perform SSL/TLS handshake after checking whether connection is established 2012-10-15 23:26:51 +09:00
Tatsuhiro Tsujikawa c904aa50fe Use uri_split instead of uri::parse where appropriate 2012-10-14 18:05:34 +09:00
Tatsuhiro Tsujikawa 692f978978 Rewritten URI parser 2012-10-14 00:14:50 +09:00
Tatsuhiro Tsujikawa 5367c34de3 Fixed bug that mmap won't work if MultiDiskAdaptor is used 2012-10-08 19:13:01 +09:00
Tatsuhiro Tsujikawa 71620854c7 Moved bool members to the last to reduce structure size 2012-10-07 22:14:06 +09:00
Tatsuhiro Tsujikawa 8b0c701266 Removed trailing spaces 2012-10-01 23:52:22 +09:00
Tatsuhiro Tsujikawa 7c878d3c81 Moved implementation of SharedCount and WeakCount to cc file 2012-09-30 18:14:59 +09:00
Tatsuhiro Tsujikawa e34d0e7ffa Dont' return SharedHandle from HttpHeader::getRange() 2012-09-30 17:30:35 +09:00
Tatsuhiro Tsujikawa 90515dfa50 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.
2012-09-30 00:50:14 +09:00
Tatsuhiro Tsujikawa 4b94ede268 Return ExtensionMessage subclass create return raw pointer 2012-09-28 23:40:44 +09:00
Tatsuhiro Tsujikawa 3258614033 Removed *Handle typedef 2012-09-28 23:27:46 +09:00
Tatsuhiro Tsujikawa 1c57a3ff9f Code cleanup 2012-09-28 22:00:46 +09:00
Tatsuhiro Tsujikawa 1fdc6e0a33 Code cleanup 2012-09-28 00:26:34 +09:00
Tatsuhiro Tsujikawa c6b76f1d32 Don't instantiate SharedHandle for DHT{Query, Response}Message subclass 2012-09-28 00:13:08 +09:00
Tatsuhiro Tsujikawa 5323afa5b2 Removed instantiation of unused BtMessageValidator 2012-09-27 23:46:34 +09:00
Tatsuhiro Tsujikawa 215d1d3d0b Made static create function of BtMessage subclass return raw pointer 2012-09-27 23:40:25 +09:00
Tatsuhiro Tsujikawa ae2e4cb7ff Handle OptionHandlers as raw pointer 2012-09-27 22:45:31 +09:00
Tatsuhiro Tsujikawa 8fc5cdea02 Removed unused functions 2012-09-27 01:03:39 +09:00
Tatsuhiro Tsujikawa 89f18dde85 Use nothrow version of parseInt, parseUInt and parseLLInt 2012-09-27 00:45:32 +09:00
Tatsuhiro Tsujikawa a879d75aaa Don't use parseInt in cookie_helper 2012-09-27 00:16:22 +09:00
Tatsuhiro Tsujikawa f75402739b Rewritten ServerStatMan::load() using nothrow version of parseInt 2012-09-27 00:07:15 +09:00
Tatsuhiro Tsujikawa 8f2030da09 Removed HttpHeader::findAs{LL}Int and unused HttpResponse::{has,get}RetryAfter 2012-09-26 23:58:59 +09:00
Tatsuhiro Tsujikawa b9f972665b Rewritten LpdMessageReceiver::receiveMessage() 2012-09-26 23:45:58 +09:00
Tatsuhiro Tsujikawa 3a917ff695 Rewritten FtpConnection::receiveMdtmResponse without util::parseInt 2012-09-26 23:14:49 +09:00
Tatsuhiro Tsujikawa 10a68061f7 Code cleanup 2012-09-26 23:03:25 +09:00
Tatsuhiro Tsujikawa a20e279606 Use std::string for SocketPoolEntry::options_
Currently, we only store 1 value for FTP download. std::map is
overkill in the this situation.
2012-09-26 23:00:05 +09:00
Tatsuhiro Tsujikawa c13dc166de Rewritten ExtensionMessageRegistry 2012-09-26 22:02:48 +09:00
Tatsuhiro Tsujikawa f0000a8754 Made ExtensionMessage's NAME const char[] 2012-09-26 00:01:41 +09:00
Tatsuhiro Tsujikawa c522d79d89 Code cleanup 2012-09-25 23:48:35 +09:00
Tatsuhiro Tsujikawa f133091a9e Made BufferedFile ctor take const char* args 2012-09-25 23:44:41 +09:00
Tatsuhiro Tsujikawa c63af24c63 Made BtMessage's NAME const char[] 2012-09-25 23:28:24 +09:00
Tatsuhiro Tsujikawa 9a510ddac0 Made MetalinkMetaurl::MEDIATYPE_TORRENT const char[] 2012-09-25 23:07:23 +09:00
Tatsuhiro Tsujikawa 8788cae7e3 Removed MetalinkResource static strings 2012-09-25 23:03:19 +09:00
Tatsuhiro Tsujikawa be77d1394e Removed Request::PROTO_* 2012-09-25 22:41:03 +09:00
Tatsuhiro Tsujikawa c186e93488 Code cleanup 2012-09-25 22:02:58 +09:00
Tatsuhiro Tsujikawa c16cebbc9a Code cleanup 2012-09-25 22:00:56 +09:00
Tatsuhiro Tsujikawa 41cb774374 Made getMethodName() of RpcMethod subclass return const char* 2012-09-25 21:57:08 +09:00
Tatsuhiro Tsujikawa 260a0b8bcb Rewritten AnnounceList::getEventString() 2012-09-25 00:07:14 +09:00
Tatsuhiro Tsujikawa b640b830a2 Made STATUS_STRING const char*[] 2012-09-25 00:01:00 +09:00
Tatsuhiro Tsujikawa a8c0794640 Made DEFAULT_STRIP_CHARSET const char[] 2012-09-24 23:54:41 +09:00
Tatsuhiro Tsujikawa 656a766bb0 Rewritten ServerStatMan::load() 2012-09-24 23:35:41 +09:00
Tatsuhiro Tsujikawa d8c44fe9e8 Use const char* instead of static const std::string 2012-09-24 23:20:43 +09:00
Tatsuhiro Tsujikawa 0144397e4b Rewritten File::getPathSeparators() 2012-09-24 23:04:42 +09:00
Tatsuhiro Tsujikawa d95a179876 Removed A2STR strings other than NIL 2012-09-24 23:01:08 +09:00
Tatsuhiro Tsujikawa 4423ece43d Moved GZipDecoder to test 2012-09-24 22:38:59 +09:00
Tatsuhiro Tsujikawa dc74ebeced Removed unused code 2012-09-24 21:46:26 +09:00
Tatsuhiro Tsujikawa 8d8ba403fe Removed proxy-connection from InterestingHeader 2012-09-23 22:33:15 +09:00
Tatsuhiro Tsujikawa 8b0bdacace Don't send Proxy-Connection header field
It was deprecated long ago.
2012-09-23 21:51:53 +09:00
Tatsuhiro Tsujikawa 54665ff409 Removed static std::string constant in HttpHeader
This change also removes inspection of Proxy-Connection header field
when checking whether the remote endpoint keeps connection open.
2012-09-23 21:46:01 +09:00
Tatsuhiro Tsujikawa dd7014a612 Store only interesting HTTP headers in HttpHeader
In this change, we defined HTTP header fields we are interested in.
We only store those headers in HttpHeader object.  Accessing HTTP
headers in HttpHeader object is now done through enum values.
2012-09-23 20:59:34 +09:00
Tatsuhiro Tsujikawa 0b4dec0250 Increased shreshold of command-line option suggestion 2012-09-23 15:06:39 +09:00
Tatsuhiro Tsujikawa 295a62f538 Rewritten help tags and various internal flag handling in OptionHandler
Now help tags are defined as enum values to avoid vector of strings.
The internal flags are represented by bitmask to shrink size.
2012-09-23 14:59:05 +09:00
Tatsuhiro Tsujikawa 461a542c5e Rewritten DownloadHandlerConstants
DownloadHandlerConstants was simplified.  MIME type handling in Accept
header was also reworked.  DownloadContext's metalinkServerContacted_
is replaced with acceptMetalink_ and its boolean value is reverted.
RequestGroup and HttpRequest now do not hold vector of accepting
types.  HttpRequest has the flag acceptMetalink_ which will be set by
the same value of DownloadContext::accpetMetalink_ and if it is true,
Metalink MIME types are added to Accept header field.
2012-09-22 23:19:41 +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 0030025bb6 Don't set SNI hostname if it does not include "." for GNUTLS 2012-09-15 01:14:21 +09:00
Tatsuhiro Tsujikawa 393d0d9fbc Disable SSL/TLS compression with OpenSSL 2012-09-15 01:13:52 +09:00
Tatsuhiro Tsujikawa d0703a2f26 Code cleanup 2012-09-07 21:45:36 +09:00
Tatsuhiro Tsujikawa 763c7a0aa0 Pause download even if download is completed
This allows to pause and unpause BitTorrent seed.
2012-09-07 01:40:40 +09:00
Tatsuhiro Tsujikawa f6c7aaa1cd Use execlp() instead of execl() 2012-09-07 01:28:53 +09:00
Tatsuhiro Tsujikawa 2148cbaf1d Fixed compile error without XML library 2012-09-02 21:04:36 +09:00
Tatsuhiro Tsujikawa e2bf627b17 Ensure that num of commands is 0 before processing tracker response 2012-09-02 17:43:26 +09:00
Tatsuhiro Tsujikawa 3c39931566 Remove trailing white spaces 2012-09-02 17:40:11 +09:00
Tatsuhiro Tsujikawa 2a51949132 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.
2012-09-02 17:35:50 +09:00
Tatsuhiro Tsujikawa 9840955798 Removed trailing white spaces 2012-09-01 20:54:07 +09:00
Tatsuhiro Tsujikawa 086c5701e1 Updated doc 2012-09-01 20:53:38 +09:00
Tatsuhiro Tsujikawa ce5c016066 Cleared pre and post download handlers from BitTorrent tracker request 2012-09-01 00:53:30 +09:00
Tatsuhiro Tsujikawa b336725ca0 Don't check control file existence if isPreLocalFileCheckEnabled() == false 2012-08-31 23:40:32 +09:00
Tatsuhiro Tsujikawa 0bbda43385 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().
2012-08-31 22:31:31 +09:00
Tatsuhiro Tsujikawa d734ff7d29 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.
2012-08-12 16:52:53 +09:00
Tatsuhiro Tsujikawa e2fcd6d72c Use enum to select file allocation method 2012-08-11 23:38:58 +09:00
Tatsuhiro Tsujikawa 8f1049c15f Fixed assertion in removeRequestGroupIndex() 2012-08-03 00:27:03 +09:00
Tatsuhiro Tsujikawa 2795176d79 Add GID => RequestGroup index for faster access to RequestGroup 2012-07-31 23:55:51 +09:00
Tatsuhiro Tsujikawa 329a17b3f9 Removed tailing whitespaces 2012-07-31 21:26:59 +09:00
Tatsuhiro Tsujikawa 3465906969 Added missing sources to SRCS 2012-07-30 22:31:09 +09:00
Tatsuhiro Tsujikawa c1ddf34e4b Specify torrent file explicitly in createRequestGroupForBitTorrent() 2012-07-26 21:20:08 +09:00
Tatsuhiro Tsujikawa 01e1fdaf49 Parse torrent file on the fly if --follow-torrent=mem is given
In this changes, Bencode parser in bencode2 is removed and the request
is delegated to BencodeParser.
2012-07-26 21:07:10 +09:00
Tatsuhiro Tsujikawa 7176107414 BencodeParser: fixed parser failure due to the uninitialized variables 2012-07-26 20:42:02 +09:00
Tatsuhiro Tsujikawa 8311d6ef87 Added stream Bencode parser 2012-07-24 23:50:06 +09:00
Tatsuhiro Tsujikawa 9620bb0a6d Fix off by 1 error in JsonParser::parseUpdate() return value 2012-07-24 23:47:18 +09:00
Tatsuhiro Tsujikawa 2684db766d Fix Android build 2012-07-24 00:05:18 +09:00
Tatsuhiro Tsujikawa f6b2c3c080 Rewritten ExpatXmlParser
Put common elements in both Xml2XmlParser and ExpatXmlParser in
XmlParser.
2012-07-23 23:41:33 +09:00
Tatsuhiro Tsujikawa 4b57106a17 Check sum of file length does not exceed INT64_MAX
With BitTorrent or Metalink (metaurl), one RequestGroup can contain
multiple files. In this change, ensure that the sum of thoese files
must be equal or less than INT64_MAX.
2012-07-23 21:57:02 +09:00
Tatsuhiro Tsujikawa 860f4dd06a 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.
2012-07-23 21:42:47 +09:00
Tatsuhiro Tsujikawa f56743b083 Parse WebSocket RPC request on the fly without buffering 2012-07-15 00:24:59 +09:00
Tatsuhiro Tsujikawa 7100b1b9ca Parse HTTP RPC request on the fly without buffering 2012-07-14 18:59:56 +09:00
Tatsuhiro Tsujikawa 5352d76d4f Added reset() API to ParserStateMachine
Not unittested
2012-07-13 00:53:56 +09:00
Tatsuhiro Tsujikawa 70685bd233 Rewritten Xml2XmlParser
Now it is push parser + utility function for file parsing.
2012-07-11 23:20:48 +09:00
Tatsuhiro Tsujikawa cd67e27ca4 Check structure depth when parsing JSON 2012-07-11 23:20:20 +09:00
Tatsuhiro Tsujikawa 57b46d5123 Added streaming parser for structured data format.
Added JSON streaming parser. Note that currently JSON parser ignores
frac and exp parts of number construct.
2012-07-10 01:42:42 +09:00
Tatsuhiro Tsujikawa e3b8c92434 Added TLS SNI support 2012-07-06 23:07:10 +09:00
Tatsuhiro Tsujikawa b00ed1aa30 More http header parser tests 2012-07-06 00:57:18 +09:00
Tatsuhiro Tsujikawa f04090199f Rewritten timegm replacement function
The algorithm is based on Python 2.7 calendar.timegm.
2012-07-06 00:34:37 +09:00
Tatsuhiro Tsujikawa 4046f27ea9 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
2012-07-05 23:22:34 +09:00
Tatsuhiro Tsujikawa b25d8a9923 Code cleanup 2012-07-04 22:59:15 +09:00
Tatsuhiro Tsujikawa 995c07c184 Fixed base64::decode() return "" if input ends with garbase and no padding 2012-07-04 22:51:41 +09:00
Tatsuhiro Tsujikawa aa944f4ef6 Guarded include of stdint.h and inttypes.h 2012-07-04 00:00:24 +09:00
Tatsuhiro Tsujikawa 98e1c6c580 Code cleanup 2012-07-03 21:56:26 +09:00
Sergey Zolotarev 1c39b9474e Fixed ssize_t error on MinGW 2012-07-03 17:44:48 +06:00
Tatsuhiro Tsujikawa 5d3b6801b1 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-".
2012-06-29 23:38:12 +09:00
Tatsuhiro Tsujikawa 0c8ec9c325 Merged Android build scripts 2012-06-29 00:51:13 +09:00
Tatsuhiro Tsujikawa f1017d5def 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.
2012-06-28 23:18:50 +09:00
Tatsuhiro Tsujikawa c30ea8adeb 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.
2012-06-27 23:28:57 +09:00
Tatsuhiro Tsujikawa 68f225de0b Use stack allocation+reference instead of pointer for BufferedFile 2012-06-27 01:38:27 +09:00
Tatsuhiro Tsujikawa a6775db3ca Fixed segmentation fault when logger failed to open log file 2012-06-27 01:38:18 +09:00
Tatsuhiro Tsujikawa 16d395779a Removed static_cast<int64>()s where they are unnecessary 2012-06-25 23:44:52 +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 3620d271af Process as many messages as possible in recv buffer 2012-06-25 21:37:55 +09:00
Tatsuhiro Tsujikawa e816c5eee4 Rewritten PeerConnection::receiveMessage()
The old implementation calls at least 2 read(2) (4bytes length and
payload) to receive the message. This change will read as many bytes
as possible in one read(2) call. BtPieceMessage::data_ is now just a
const pointer to the internal buffer of PeerConnection.
2012-06-25 21:35:52 +09:00
Tatsuhiro Tsujikawa 73b75186c7 Handle the case when MINGW32 vsnprintf returns -1
MINGW32 vsnprintf returns -1 if output is truncated.  Increased buffer
for vsnprintf in WinConsoleFile and fmt.
2012-06-24 16:56:34 +09:00
Tatsuhiro Tsujikawa 96720b297d Added --enable-mmap option.
If this option is used, map files into memory using mmap(2).  This
option is experimental.
2012-06-24 16:28:04 +09:00
Tatsuhiro Tsujikawa 38426d744b Code cleanup 2012-06-23 17:50:27 +09:00
Tatsuhiro Tsujikawa 5fc1b1ad29 Rewritten HTTP header parser 2012-06-23 17:34:20 +09:00
Tatsuhiro Tsujikawa 5a0a62c5f4 Added CORS preflight request support.
This change is based on the patch from binux.
2012-06-23 16:26:17 +09:00
Tatsuhiro Tsujikawa 9ba65aea1d Rewritten ChunkedDecodingStreamFilter 2012-06-18 23:42:46 +09:00
Tatsuhiro Tsujikawa afcd95dec7 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.
2012-05-19 18:36:57 +09:00
Tatsuhiro Tsujikawa 68eb1b6737 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.
2012-05-17 22:52:39 +09:00
Tatsuhiro Tsujikawa 92c518a2ba Moved parseAsyncDNSServers() to AsyncNameResolver.cc and refactored.
The parseAsyncDNSServers() now uses net::getBinAddr() internally,
which makes the function simpler. Also added unit test.
2012-05-16 23:05:09 +09:00
Tatsuhiro Tsujikawa 36051cca5e 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.
2012-05-16 22:43:25 +09:00
Tatsuhiro Tsujikawa ca60020fa4 Removed dependency on inet_aton
Implemented inetPton as a replacement of inet_aton. inetPton is
implemented using net::getBinAddr.

This change fixes bug#3525424.
2012-05-14 01:17:50 +09:00
Tatsuhiro Tsujikawa 19798f09ae Fixed typo 2012-05-12 19:33:33 +09:00
Tatsuhiro Tsujikawa a998e32f95 Call ERR_clear_error() before OpenSSL I/O functions.
Use ERR_get_error() with ERR_error_string().
2012-05-08 01:02:18 +09:00
Tatsuhiro Tsujikawa d16071d108 Fixed the bug which prevents --bt-lpd-interface from working.
Fixes bug#3520125
2012-04-22 18:35:43 +09:00
Tatsuhiro Tsujikawa f5d3cd1bb0 Updated copyright year 2012-04-08 21:43:00 +09:00
Tatsuhiro Tsujikawa aee28c8b0d Fixed compile warning with clang 2012-04-08 19:22:23 +09:00
Tatsuhiro Tsujikawa 1e0068e4d4 WebSocket: Check keyword string in comma separeted values in HTTP
header field.
2012-04-08 19:00:07 +09:00
Tatsuhiro Tsujikawa c648ca0c5c Include common.h from a2algo.h and a2functional.h 2012-04-08 18:59:06 +09:00
Tatsuhiro Tsujikawa 52826433d9 Fixed typo 2012-04-08 17:51:01 +09:00
Tatsuhiro Tsujikawa 9e8676af2c Disable IPv6 by default only if MinGW 32bit build. 2012-04-08 17:45:33 +09:00
Tatsuhiro Tsujikawa d9bb24a2e0 Fixed gcc-4.7 warnings 2012-04-08 03:12:29 +09:00
Tatsuhiro Tsujikawa fcbdecfd1e Conditional compile for WebSocket.
WebSocket support depends on Message Digest support.
2012-04-08 00:50:25 +09:00
Tatsuhiro Tsujikawa 7bc2a14d9f Fixed compile error without BitTorrent support 2012-04-08 00:05:42 +09:00
Tatsuhiro Tsujikawa ef86d760cc Use CreateProcessW instead of CreateProcessA 2012-04-07 23:57:49 +09:00
Tatsuhiro Tsujikawa 3f7561b80c Define HAVE_GETADDRINFO only if it is not defined in MinGW build. 2012-04-07 23:56:37 +09:00
Tatsuhiro Tsujikawa fcb102b650 Fixed compile error with i686-w64-mingw32 2012-04-07 21:26:33 +09:00
Tatsuhiro Tsujikawa 840ca5adb6 Check availability of pwd.h 2012-04-07 15:49:22 +09:00
Tatsuhiro Tsujikawa c7c26e67c4 Disable IPv6 for MinGW build by default 2012-04-07 15:40:33 +09:00
Tatsuhiro Tsujikawa 65a20f5070 First check there is wildcard character or not in tls hostname check. 2012-04-01 22:07:01 +09:00
Tatsuhiro Tsujikawa b9471d7452 Compare IPAddress in commonName as string.
Added test for net::verifyHostname().
2012-04-01 16:42:38 +09:00
Tatsuhiro Tsujikawa b68e0a5527 Use net::verifyHostname() with gnutls.
We now don't use gnutls_x509_crt_check_hostname() any more.
2012-03-31 21:21:18 +09:00
Tatsuhiro Tsujikawa e6f04416d9 Don't use locale dependent toupper and tolower. 2012-03-31 00:06:55 +09:00
Tatsuhiro Tsujikawa 0a9abd89c6 Rewritten TLS hostname check based on RFC 6125. 2012-03-30 23:49:14 +09:00
Tatsuhiro Tsujikawa e4e9562c92 Get the home directory of the effective user ID using getpwuid() if
$HOME is not defined.
2012-03-30 01:43:38 +09:00
Tatsuhiro Tsujikawa 25ef6677e9 Added hostname check described in RFC 2818 with OpenSSL. 2012-03-28 23:28:22 +09:00
Tatsuhiro Tsujikawa 06b6bef860 Made WebSocket handshake more strict.
Refactored HttpServer as well.
2012-03-25 22:10:36 +09:00
Tatsuhiro Tsujikawa 8499a47d21 Added --bt-remove-unselected-file option.
Removes the unselected files when download is completed in
BitTorrent. To selecting files, use --select-file option. If it is not
used, all files are assumed to be selected. Please use this option
with care because it will actually remove files from your disk.
This option is default to false.
2012-03-25 19:25:43 +09:00
Tatsuhiro Tsujikawa 2b3469dad9 Use std::set for socketEntries_ and nameResolverEntries_ in PortEventPoll 2012-03-25 00:38:57 +09:00
Tatsuhiro Tsujikawa ae393329f7 Fixed segmentation fault in open solaris in unit test.
This is due to the fact that the maximum value of random() in open
solaris is not RAND_MAX, but (2**31)-1.
2012-03-25 00:28:11 +09:00
Tatsuhiro Tsujikawa 4d8c17d104 Fixed compile error on open solaris
Fixes bug#3497518
2012-03-25 00:27:25 +09:00
Tatsuhiro Tsujikawa d8948056b3 Use std::set for socketEntries_ and nameResolverEntries_ in KqueueEventPoll 2012-03-24 21:19:57 +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 332bda83b4 Enable TCP_NODELAY for WebSocket connection. 2012-03-21 02:08:18 +09:00
Tatsuhiro Tsujikawa 0792540bf2 Prefixed notification method name with "aria2." 2012-03-21 01:35:48 +09:00
Tatsuhiro Tsujikawa f4e2c7f060 Added JSON-RPC over WebSocket.
Wslay library must be placed under deps/wslay.
2012-03-20 21:42:09 +09:00
Tatsuhiro Tsujikawa 5bff877eae Fixed assertion failure if Chunked encoding along with Content-Length is used. 2012-03-05 12:45:05 +09:00
Tatsuhiro Tsujikawa e73c3c53ff Fixed clang warning and errors.
Test for the zero-length array with A2_ARRAY_LEN was commented out
since it is only used in unit test code and clang and old gcc 3.4.3
emit error.
2012-03-01 00:02:29 +09:00
Tatsuhiro Tsujikawa 037f1512db Added BufferedFile::getLine() to make reading one line more flexible.
Fixes bug#3495336
2012-02-29 02:50:12 +09:00
Tatsuhiro Tsujikawa c63a524a88 Added .gitignore files 2012-02-27 21:49:01 +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 ad11d746f0 Only accepts 32 bit integer values from int and i4 elements in XML-RPC.
Fixed overflow in AbstractPaginationRpcMethod::getPaginationRange().
Fixes bug#3494165
2012-02-26 19:45:25 +09:00
Tatsuhiro Tsujikawa 663cfec9f6 Fixed the bug that aria2 does not listen on address given in --interface. 2012-02-22 22:45:01 +09:00
Tatsuhiro Tsujikawa 075ea06ad7 Supported Windows UNC path. 2012-02-19 21:19:11 +09:00
Tatsuhiro Tsujikawa b7dbcea58b Check scheme part in redirected URI more strictly.
The previous implementation mistakenly sees '/abspath?uri=http://foo'
as an absolute URI because it contains '://', but actually it is not.
This change checks scheme part is constructed in the allowed character
set described in RFC 3986 Section 3.1.
2012-02-15 01:40:12 +09:00
Tatsuhiro Tsujikawa 9e302b86df Code cleanup: use empty() to check size() == 0 2012-02-12 23:21:25 +09:00
Tatsuhiro Tsujikawa 7dc2b9ff16 Allow missing params in XML-RPC request.
Now following request is legal:

<methodCall>
  <methodName>aria2.getVersion</methodName>
</methodCall>
2012-02-12 23:13:21 +09:00
Tatsuhiro Tsujikawa 9b7e4219d9 Reserve PeerConnection's buffer capacity according to number of pieces.
If the number of pieces gets bigger, the length of Bitfield message
payload exceeds the initial buffer capacity of PeerConnection, which
is MAX_PAYLOAD_LEN.  We expand buffer as necessary so that
PeerConnection can receive the Bitfield message.
2012-02-09 01:51:42 +09:00
Tatsuhiro Tsujikawa f2d55f0edc Added --deferred-input option.
If true is given to --deferred-input option, aria2 does not read all
URIs and options from file specified by -i option at startup, but it
reads one by one when it needs later. This may reduce memory usage if
input file contains a lot of URIs to download. If false is given,
aria2 reads all URIs and options at startup. This option defaults to
false.
2012-02-05 18:57:16 +09:00
Tatsuhiro Tsujikawa a6803c21b5 Support network-path reference in HTTP redirect. 2012-01-11 02:17:38 +09:00
Tatsuhiro Tsujikawa 2997fa0631 Refactored splitNsName 2012-01-11 02:04:20 +09:00