Supported poll() for socket event notification. --event-poll can
take value "poll". Fixed the bug that timeout for
SocketCore::isReadable()/isWritable() is ignored when epoll is
used.
* src/OptionHandlerFactory.cc
* src/a2io.h
* src/prefs.h
* src/SocketCore.h
* src/Makefile.am
* src/main.cc
* src/PollEventPoll.h
* src/SocketCore.cc
* src/DownloadEngineFactory.cc
* src/PollEventPoll.cc
* src/prefs.cc
* configure.ac
Implemented clock_gettime() using mach_absolute_time in Mac OS X.
* configure.ac
* src/Makefile.am
* src/a2time.h
* src/clock_gettime_osx.cc
* src/clock_gettime_osx.h
Hold reference to PieceStorage when paused in order to provide
progress information via XML-RPC.
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
Fixed the bug that hash check hangs when aria2.pause is issued
while aria2 is checking piece hashes. Fixed the bug that the
download is paused after file allocation completion even if
aria2.pause is issued during file allocation.
* src/CheckIntegrityCommand.cc
* src/FileAllocationCommand.cc
Added aria2.pause and aria2.unpause XML-RPC method. aria2.pause
pauses the download denoted by gid. gid is of type string. The
status of paused download becomes "paused" and the download is
placed on the first position of waiting queue. As long as the
status is "paused", the download is not started. To change status
to "waiting", use aria2.unpause method. This method returns GID of
paused download. aria2.unpause changes the status of the download
denoted by gid from "paused" to "waiting". This makes the download
eligible to restart. gid is of type string. This method returns
GID of unpaused download.
* doc/aria2c.1.txt
* src/DownloadContext.cc
* src/FileEntry.cc
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed the bug that FTP data connection is not established via
proxy when --ftp-proxy is defined and --ftp-pasv=true and
--proxy-method=tunnel.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/InitiateConnectionCommand.cc
Fixed the bug that web-seed URI is not percent-encoded.
* src/a2functional.h
* src/bittorrent_helper.cc
* test/BittorrentHelperTest.cc
* test/url-list-multiFile.torrent
* test/url-list-singleFileEndsWithSlash.torrent
Added aria2.shutdown and aria2.forceShutdown XML-RPC method.
These methods, as their name implies, shutdown aria2. These
methods are useful for Windows because it lacks signal mechanism.
* doc/aria2c.1.txt
* src/TimedHaltCommand.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
Don't send "Accept: default, gzip" by default. This is because
some server responds with "Content-Encoding: gzip" for files which
itself is gzipped file and aria2 inflates them. This is a problem
if user don't want to inflate the file. Apparently this is server
configuration error, but I cannot do anything about this. So turn
this off. Added --http-accept-gzip option. If true is given to
this option, aria2 sends 'Accept: deflate, gzip' request header
and inflates response if remote server responds with
'Content-Encoding: gzip' or 'Content-Encoding: deflate'. This
indicates we removed extension tgz hack in order not to inflate
files with tgz extensions.
* doc/aria2c.1.txt
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/HttpRequestTest.cc
Made aria2 not send
"application/metalink4+xml,application/metalink+xml" in Accept
header for web-seeding URIs and tracker request.
* src/Metalink2RequestGroup.cc
* src/TrackerWatcherCommand.cc
* src/download_helper.cc
* src/util.cc
* src/util.h
Fixed the bug that waiting download unintentionally starts when
URIs are added to it using aria2.changeUri XML-RPC method. This
also fixes the bug that causes segmentation fault when adding URIs
to waiting download, which is a regression introduced by the
previous change made to src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.cc
Fixed the bug that added URI using aria2.changeUri XML-RPC method
is not used immediately if there is no URIs remaining before
calling aria2.changeUri and the number of connection is less than
the value in -s(or -C for Metalink downloads).
* src/XmlRpcMethodImpl.cc
Documented --always-resume and --max-resume-failure-tries option
and exit status 8 in man page. Fixed typo.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
Added --always-resume and --max-resume-failure-tries option. If
--always-resume=false is given, when all given URIs does not
support resume or aria2 encounters N URIs which does not support
resume
(N is the value specified using --max-resume-failure-tries
option), aria2 download file from scratch. The default behavior
is --always-resume=true, which means if all URIs do not support
resume, download fails. I think this is OK because user normally
don't like to see that partially downloaded file is
overwritten(this is particularly true if file size is big). This
option is useful when aria2 is used as download backend and
graceful falling back to overwritten behavior is preferable.
Added exit status value 8, which means download failed because
server did not support resume.
* src/AbstractCommand.cc
* src/DefaultPieceStorage.cc
* src/DownloadCommand.cc
* src/DownloadResultCode.h
* src/FileEntry.h
* src/FtpNegotiationCommand.cc
* src/HttpResponse.cc
* src/HttpResponseCommand.cc
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/SegmentMan.cc
* src/SegmentMan.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DefaultPieceStorageTest.cc
* test/SegmentManTest.cc
Added --remove-control-file option. This option removes control
file(*.aria2 file) before download. Using with
--allow-overwrite=true, download always starts from scratch. This
will be useful for users behind proxy server which disables
resume. For such proxy user, -C1 is also recommended for Metalink
downloads to avoid establishing unnecessary connections.
* doc/aria2c.1.txt
* src/OptionHandlerFactory.cc
* src/RequestGroup.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
Fixed the bug that socket is added to EventPoll object twice. This
is because derived class FtpFinishDownloadCommand adds socket to
EventPoll object while base class AbstractCommand does that
already.
* src/FtpFinishDownloadCommand.cc
* src/FtpFinishDownloadCommand.h
Added v key in DHT message. aria2's DHT version is independent of
the package version and we defined it as 1 at the moment. It is
defined as DHT_VERSION in src/DHTConstants.h. aria2's DHT version
scheme is "A2"+2bytes DHT version number in network byte order.
* src/DHTAbstractMessage.cc
* src/DHTConstants.h
* src/DHTMessage.cc
* src/DHTMessage.h
* src/DHTMessageFactoryImpl.cc
* src/DHTQueryMessage.cc
* src/DHTResponseMessage.cc
* src/util.h
* test/DHTAnnouncePeerMessageTest.cc
* test/DHTAnnouncePeerReplyMessageTest.cc
* test/DHTFindNodeMessageTest.cc
* test/DHTFindNodeReplyMessageTest.cc
* test/DHTGetPeersMessageTest.cc
* test/DHTGetPeersReplyMessageTest.cc
* test/DHTPingMessageTest.cc
* test/DHTPingReplyMessageTest.cc
Fixed the bug that value of numSeeders in aria2.tellStatus XML-RPC
method response is integer, while manual says it is string. When
peer's port is not listening port, set '0' to port in
aria2.getPeers response.
* src/XmlRpcMethodImpl.cc
Lines starting "#" in -i list are treated as comments.
Example:
# this is comment
http://example.org/filehttp://example.org/file2
dir=/tmp
# another comment
out=myfile
* doc/aria2c.1.txt
* src/UriListParser.cc
* test/filelist1.txt
Accept IPv4 network address with CIDR block in --no-proxy option
and no_proxy environment variable. Current implementation does
not resolve hostname in URI to compare network address. So it is
only effecive if URI has numeric IP addresses.
* doc/aria2c.1.txt
* src/AbstractCommand.cc
* src/OptionHandlerFactory.cc
* src/bitfield.h
* src/usage_text.h
* src/util.cc
* src/util.h
* test/UtilTest.cc
* test/bitfieldTest.cc
Few adjustment for timeouts in DHT. DHT message timeout is changed
from 15 to 10. The interval of PeerLookup is first 5 seconds and
it adds another 5 seconds in each retry.
* src/DHTConstants.h
* src/DHTGetPeersCommand.cc
* src/DHTGetPeersCommand.h
Fixed the bug that FillRequestGroupCommand is not invoked when
RequestGroupMan::createInitialCommand() creates no Command object.
* src/FillRequestGroupCommand.cc
* src/RequestGroupMan.cc
Call RequestGroupMan::requestQueueCheck() when
max-concurrent-downloads option is changed or new downloads are
added/inserted into reserved list.
* src/RequestGroupMan.cc
* src/XmlRpcMethodImpl.cc
Create CreateRequestCommand to the number of -s/-C when URIs are
added by XML-RPC.
* src/RequestGroup.cc
* src/RequestGroup.h
* src/XmlRpcMethodImpl.cc
Fixed memory leak in SocketBuffer when _bufq is not empty when
SocketBuffer is deleted. Added BufEntry constructor and deleted
static factory functions.
* src/SocketBuffer.cc
* src/SocketBuffer.h
Only execute RequestGroupMan::fillRequestGroupFromReserver() when
queue maintenance is requested by RequestGroup to avoid to call
the function unnecessarily.
* src/FillRequestGroupCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
Rewritten SocketBuffer. Old implementation uses single std::string
to store data and erase sent data, which is costly. New
implementation uses deque to hold each data to avoid to mutate
string.
* src/SocketBuffer.cc
* src/SocketBuffer.h
Avoid to calculate end() iterator in each loop. std::deque is
particularly slow. Make sure that recalculate end iterator if
element is erased during loop.
Fixed the bug that grouped FileEntry objects are not used but
instead all FileEntry objects are used for each metaurl group.
* src/Metalink2RequestGroup.cc
* test/Metalink2RequestGroupTest.cc
* test/metalink4-groupbymetaurl.xml
Replaced null or control characters in file path with '_'. For
MinGW32 build, additional characters which is not allowed in
Windows kernel are also replaced. util::detectDirTraversal() now
returns true if given string contains null or control characters.
* src/DownloadContext.cc
* src/DownloadContext.h
* src/Metalink2RequestGroup.cc
* src/MetalinkParserController.cc
* src/bittorrent_helper.cc
* src/util.cc
* src/util.h
* test/UtilTest.cc
Discard metalink:file if its name attribute is empty string.
Removed FileEntry instantiation in
MetalinkParserController::setFileLengthOfEntry()
* src/MetalinkParserController.cc
* src/MetalinkParserStateV3Impl.cc
* src/MetalinkParserStateV4Impl.cc
Discard torrent file if path data in it contains directory
traversal directives. Discard metalink:file element in Metalink3
format if its name attribute contains directory traversal
directives. Ignore name attribute of metalink:signature element
in Metalink3 format if it contains directory traversal directives.
* src/MetalinkParserStateV3Impl.cc
* src/bittorrent_helper.cc
* src/message.h
* test/BittorrentHelperTest.cc
* test/Makefile.am
* test/MetalinkProcessorTest.cc
* test/metalink3-dirtraversal.xml
* test/test.xml
Store name attribute of metalink:metaurl element in MetalinkMetaurl.
* src/MetalinkMetaurl.h
* src/MetalinkParserController.cc
* src/MetalinkParserController.h
* src/MetalinkParserStateMachine.cc
* src/MetalinkParserStateMachine.h
* src/MetalinkParserStateV4Impl.cc
* test/MetalinkProcessorTest.cc
* test/metalink4-dirtraversal.xml
Added aiFlags argument to getInterfaceAddress(). Use
AI_NUMERICHOST to find interface specified using
--bt-lpd-interface option to avoid time-consuming address lookup.
* src/BtSetup.cc
* src/SocketCore.cc
* src/SocketCore.h
Return SharedHandle<LpdMessage>(new LpdMessage()) if received data
is bad in LpdMessageReceiver.
* src/LpdMessage.h
* src/LpdMessageReceiver.cc
* src/LpdMessageReceiver.h
* src/LpdReceiveMessageCommand.cc
* test/LpdMessageReceiverTest.cc
Added --bt-lpd-interface option to specify the interface to use
for Local Peer Discovery. LpdMessageDispatcher object now has its
own socket. LpdMessageReceiver's socket is binded to multicast
address to only receive multicast packets.
* src/BtSetup.cc
* src/LpdMessageDispatcher.cc
* src/LpdMessageDispatcher.h
* src/LpdMessageReceiver.cc
* src/LpdMessageReceiver.h
* src/LpdReceiveMessageCommand.cc
* src/LpdReceiveMessageCommand.h
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/LpdMessageDispatcherTest.cc
* test/LpdMessageReceiverTest.cc
Put the portion of code to get interface addresses in
SocketCore::bindAddress() into newly added getInterfaceAddress().
* src/SocketCore.cc
* src/SocketCore.h
Fixed compile error with mingw32 cross compiler. Defined
a2_sockopt_t as void* for the target systems other than mingw32.
* src/SocketCore.cc
* src/a2netcompat.h
User-defined custom request headers specified by --header option
now override builtin headers if they have same name.
* src/HttpRequest.cc
* src/HttpRequest.h
* test/HttpRequestTest.cc
Added unit tests for util::getContentDispositionFilename() from
http://greenbytes.de/tech/tc2231/ Fixed the function so that added
tests are passed.
* src/util.cc
* test/UtilTest.cc
Support RFC2231 "Parameter Value Character Set and Language
Information" in Content-Disposition header.
* src/HttpResponse.cc
* src/util.cc
* src/util.h
* test/UtilTest.cc
Removed ret == 0 checking for SSL_read(), SSL_write() and
SSL_peek() because the checks are done in the caller. In
SocketBuffer::send(), throw exception if nothing could be written
and socket error was not EWOULDBLOCK
* src/SocketBuffer.cc
* src/SocketCore.cc
Moved getFirstNMissingIndex to bitfield.h and made it return the
number of appended indexes.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/Piece.cc
* src/Piece.h
* src/bitfield.h
* test/BitfieldManTest.cc
Added BitfieldMan::getFirstNMissingUnusedIndex() to get multiple
unused block indexes at once instead of calling
getFirstMissingUnusedIndex() multiple times. Made use of it in
Piece class and DefaultBtRequestFactory class via Piece class.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/DefaultBtRequestFactory.cc
* src/Piece.cc
* src/Piece.h
* test/BitfieldManTest.cc