2006-03-28 Tatsuhiro Tsujikawa Added new class SendMessageQueue that includes PendingMessages and RequestSlotMan. * src/SendMessageQueue.h: New class. * src/SendMessageQueue.cc: New class. * src/PendingMessage.h: Added new member variable blockIndex and its accessors. (createRequestMessage): Updated. * src/PendingMessage.cc (createRequestMessage): Updated. * src/PeerInteractionCommand.cc (executeInternal): Updated with SendMessageQueue. (checkLongTimePeerChoking): Updated with SendMessageQueue. (receiveMessage): Updated with SendMessageQueue. (deletePendingPieceMessage): Removed. (getNewPieceAndSendInterest): Updated with SendMessageQueue. (sendInterest): Updated with SendMessageQueue. (createRequestPendingMessage): Updated with SendMessageQueue. (sendMessages): Updated with SendMessageQueue. (onAbort): Updated with SendMessageQueue. (keepAlive): Updated with SendMessageQueue. (beforeSocketCheck): Updated SendMessageQueue. * src/PeerInteractionCommand (sendMessages): Shuffle missingBLockIndexes before using it. Added its own timeout for peer connection. * src/PeerAbstractCommand.h: Added member variable timeout and its setter. * src/prefs.h: Added PREF_PEER_CONNECTION_TIMEOUT. * src/PeerInteractionCommand.cc (PeerInteractionCommand): Added setTimeout() call. (executeInternal): Added setTimeout() call. * src/PeerAbstractCommand.cc (PeerAbstractCommand): Added timeout. (isTimeoutDetected): Updated. * src/main.cc (main): Added PREF_PEER_CONNECTION_TIMEOUT entry to option. Added *simple* message flooding checker. * src/PeerInteractionCommand.cc (executeInternal): Added detectMessageFlooding() call. (detectMessageFlooding): New function. (receiveMessage): Count up CHOKE, UNCHOKE, HAVE message. (beforeSocketCheck): Added detectMessageFlooding() call. * src/PeerInteractionCommand.h: Added sendMessageQueue, chokeUnchokeCount, haveCount, detectMessageFlooding(). Removed deletePendingPieceMessage(), getRequestSlot(), deleteRequestSlot(), deleteAllRequestSlot(). * src/PeerInteractionCommand.cc (beforeSocketCheck): Added checkLongTimePeerChoking() call. * src/RequestSlotMan.h: Renamed deleteTimeoutRequestSlot(). * src/TorrentMan.cc (addPeer): Delete at most MAX_PEER_LIST_SIZE peers if duplicate == false. The parameter "uploaded" and "downloaded" in the tracker request are the size since the client sent the "started" event to the tracker. * src/TorrentMan.cc (setup): Assigned saved downloaded Size and uploaded size to preDownloadedSize, preUploadedSize respectively. * src/TorrentMan.h: Added preDownloadedSize, preUploadedSize, getSessionDownloadedSize(), getSessionUploadedSize(). * src/TrackerInitCommand.cc (execute): Use getSessionDownloadedSize(), getSessionUploadedSize() instead of getDownloadedSize(), getUploadedSize(). * src/PendingMessage.cc (processMessage): Do not send request message if the peer is choking the client. * src/TrackerUpdateCommand.cc (execute): Check wtheher minInterval is less than interval. 2006-03-27 Tatsuhiro Tsujikawa * configure.in: Added gnutls support. Added several CPP macros. * m4/openssl.m4: Added. * src/SocketCore.{h,cc}: Drop const quarifier from writeData(), readData(), peekData(). Added gnutls support. * src/HttpDownloadCommand.cc: Removed SleepCommand.h * src/TrackerWatcherCommand.{h,cc}: Added. This command creates TrackerInitCommand periodicaly(TorrentMan::minInterval). * src/TorrentMan.cc: Remove downloadedSize == 0 check from save(). Instead, added a check for whether setup method has executed successfully. * src/TorrentMan.h: Added member vaiable setupComplete. Updated DEFAULT_ANNOUNCE_INTERVAL and DEFAULT_ANNOUNCE_MIN_INTERVAL to 300. * src/Makefile.am: Updated. * src/messageDigest.h: Added. This is a macro calculating SHA1 digest using whether OpenSSL or gcrypt, depending on the result of configure script. * src/ShaVisitor.{h,cc}: Removed direct dependency on OpenSSL by using messageDigest.h. * src/TorrentAutoSaveCommand.h: Removed unused variable cuid. * src/PeerListenCommand.cc: Added log about port binded successfully. Fixed memory leak. * src/main.cc: Added gnutls support. Replaced LIB_SSL with ENABLE_BITTORRENT where they are not related to OpenSSL but BitTorrent. Removed instantiation of TrackerInitCommand. Instead, TrackerWatcherCommand is instantiated and pushed to the command queue. * src/InitiateConnectionCommandFactory.cc: Replaced HAVE_LIBSSL with ENABLE_SSL. * src/Request.cc: Replaced HAVE_LIBSSL with ENABLE_SSL. * src/RequestSlotMan.cc (deleteCompletedRequestSlot): If a piece is already acquired by another command, delete the request slots for the piece. * src/TrackerUpdateCommand.cc (execute): Changed log level of MSG_TRACKER_WARNING_MESSAGE from info to warn. Added a check whether peer list is null. Fixed the bug that causes sending completed event to the tracker several times. * src/TrackerInitCommand.cc (execute): Fixed the bug that causes sending completed event to the tracker several times. * src/AbstractDiskWriter.{h,cc}: Removed direct dependency on OpenSSL by using messageDigest.h. 2006-03-26 Tatsuhiro Tsujikawa * PeerConnection.cc: Replaced log message "keep-alive" with "keep alive". * PeerInteractionCommand.{h,cc}: Close connection if peer is choking localhost long time. * TorrentMan.cc: When adding new peer with duplicate = true, if the number of peer list is equal to or grater than MAX_PEER_LIST, delete at most 100 failure entry from the list. If with duplicate = false, MAX_PEER_LIST is not checked. * PeerListenCommand.cc: Fixed the argument order of log message. 2006-03-25 Tatsuhiro Tsujikawa * Logger.h: Moved enum LEVEL from SimpleLogger.h to here. Added warn(). * SimpleLogger.h: Moved enum LEVEL to Logger.h. Implemented warn(). Defined 2 macros(WRITE_LOG, WRITE_LOG_EX) to avoid duplicated code. 2006-03-24 Tatsuhiro Tsujikawa * Request.h: Added AFTER_COMPLETED event. * TorrentDownloadEngine.cc: Prints "Download complete" message instead of downloaded size and progress(%) after download completes. * PeerInteractionCommand.cc: After download completes, sends unchoke message to the peer if it is interested in what localhost has downloaded. * TorrentMan.cc: In single-file mode, copy temporary file to the final destination instead of just renaming it. * TorrentMan.cc: Added deleteTempFile(). * PeerAbstractCommand.cc: do not stop execution after download completes. This makes localhost a seeder. * Util.{h,cc}: Added fileCopy(). * PeerListenCommand.cc: do not stop execution after download completes. This makes localhost a seeder. * main.cc: Do not call TorrentMan::fixFilename() in torrentHandler. Added TorrentMan::deleteTempFile() to torrentHandler. Initialized the variable dir as ".". * TorrentMan.h: Changed DEFAULT_ANNOUNCE_INTERVAL to 120 seconds. Deleted renameSingleFile(). Added copySingleFile(), deleteTempFile(). * DownloadEngine.h: Added virtual function afterEachIteration(). * TorrentDownloadEngine.cc: Move a call to TorrentMan::fixFilename() in onEndOfRun() to afterEachIteration(). In onEndOfRun(), changed if condition to check whether filenameFixed is true. * Util.cc: Implemented fileCopy() using rangedFileCopy(). In rangedFileCopy(), added try-catch block to properly close file descriptors. * TorrentDownloadEngine.cc: Added a member variable filenameFixed. Added afterEachIteration(), isFilenameFixed(). * Peer.cc: Changed choking strategy. * PreAllocationDiskWriter.cc: Drop O_DIRECT flag. * TrackerInitCommand.cc: Send completed event only once. * DownloadEngine.cc: Added a call to afterEachIteration(). * TrackerUpdateCommand.cc: Do not stop execution after download completes. * TorrentMan.h: Defined MAX_PEER_UPDATE as 15. aria2 attempts to connect the peers at most MAX_PEER_UPDATE when a peer list is received from a tracker. * TrackerUpdateCommand.cc: Implemented above mentioned behavior. Decreased the number of failure peers to delete to 0(just comment out the line). * Release 0.3.1 2006-03-23 Tatsuhiro Tsujikawa * PeerInteractionCommand.cc: added a call to TorrentMan::unadvertisePiece in Destructor. * PeerInteractionCommand.cc: make have message sent immediately if the size of pending message queue is zero. * TorrentMan.cc: set the maximum size of peer list to 250. * TorrentMan.h: changed the container type of Peers and UsedPieces to deque. * Util.cc: fixed rangedFileCopy. * AbstractDiskWriter.{h,cc}: moved digest context initialization to Constructor. Also, moved digest cleanup to Destructor. * MetaFileUtil.cc: fixed memory leak * replaced std::vector with std::deque. * AbstractCommand.cc: casted timeout value to long long int. * ChunkedEncoding.cc: fixed memory leak. * PeerInteractionCommand.cc: casted timeout value to long long int. * SleepCommand.cc: casted timeout value to long long int. * Data.cc: fixed memory leak. * Data.cc: fixed toLLInt(). * BitfieldMan.cc: fixed memory leak. * TorrentMan.cc: initialized storeDir to ".". * TorrentMan.cc: fixed memory leak. * TorrentMan.cc: corrected file paths of splitted files. * PeerAbstractCommand.cc: casted timeout to long long int. * main.cc: added delete(req) and delete(te->diskWriter). * RequestSlot.cc: casted timeout value to long long int. * Request.cc: fixed memory leak. * PendingMessage.cc: make HAVE messages sent only when peer does not have the piece. * Peer.{h,cc}: added hasPiece(int index). * main.cc: corrected addCommand. 2006-03-22 Tatsuhiro Tsujikawa * BitTorrent protocol support added. * Release 0.3.0 2006-03-17 Tatsuhiro Tsujikawa * SocketCore.cc: remove the assignment of addrinfo.ai_addr. 2006-03-09 Tatsuhiro Tsujikawa * ChunkedEncoding.{h,cc}: fixed the bug that if chunk data is binary, decoding did not work properly. 2006-03-07 Tatsuhiro Tsujikawa * DownloadEngine.h: included sys/time.h * DownloadEngine.cc: remove sys/time.h * Makefile.am (SUBDIRS): Add intl. * configure.in (AC_CONFIG_FILES): Add intl/Makefile. 2006-03-05 Tatsuhiro Tsujikawa * main.cc: correct help message for --http-auth-scheme. * main.cc: changed e-mail address for bug reports. * ja.po: added japanese translation. 2006-03-04 Tatsuhiro Tsujikawa * SimpleLogger.cc: flush log file instead of stdout. 2006-03-03 Tatsuhiro Tsujikawa * main.cc: Fixed command-line option: max-tries * HttpResponseCommand.cc: Make the request re-sent only if req->seg.sp does not equal to seg.sp. * DownloadCommand.cc: If EOF is got from the server and the total size of file is not zero, then throw DlRetryEx. * main.cc: Set the minium value of min-segment-size to 1024. * HttpResponseCommand.cc: Fixed the bug that http segmented downloading fails because of a regression since 0.2.0 release. 2006-03-02 Tatsuhiro Tsujikawa * HttpConnection.cc: * common.h: defined the user agent name as macro * DownloadEngine.{h, cc}: * ConsoleDownloadEngine.{h, cc}: Console output message(size, speed) is now generated by ConsoleDownloadEngine not by DownloadEngine. * main.cc: Download complete/abort message is now generated by main. * Makefile.am (SUBDIRS): Add m4. (ACLOCAL_AMFLAGS): New variable. (EXTRA_DIST): New variable. * configure.in (AC_CONFIG_FILES): Add po/Makefile.in, * gettext: added gettext functionality 2006-03-01 Tatsuhiro Tsujikawa * AbstractCommand.cc: * DownloadCommand.{h, cc}: Aborted downloading commands now properly unregister its cuid from SegmentMan. * DownloadEngine.cc: .aria2 file was written when a downloading failed with errors. * HttpConnection.cc: Added "Proxy-Connection" header to proxy request. Added "User-Agent" header to CONNECT proxy request. Fixed "Proxy-Authorization" header. Now proxy authorization works properly. * Logger.h: * SimpleLogger.{h,cc}: Changed the type of msg to const char*. * ChunkedEncoding.cc: Added #include directive for strings.h * Release 0.2.1 2006-02-28 Tatsuhiro Tsujikawa * Util.{h,cc}: added startsWith(). * CookieBox.cc: rewrited criteriaFind() using Util::startsWith() and Util::endsWith(). * SocketCore.cc: struct addrinfo is now zero-initialized. * common.h: added #include directive of limit.h. * DownloadEngine.cc: added #include directive of sys/time.h and algorithm. * Exception.h: added #include directive of stdio.h. * AbstractCommand.h: added #include directive of sys/time.h. * DownloadCommand.h: added #include directive of sys/time.h. * *.h: added #include directive of common.h to all base classes. subclasses' one was removed. * common.h: defined LONG_LONG_MAX and LONG_LONG_MIN if a compiler does not define these macros. 2006-02-23 Tatsuhiro Tsujikawa * Release 0.2.0 * main.cc: * HttpInitiateConnectionCommand.{h,cc}: * prefs.h: * HttpConnection.{h,cc}: added --http-proxy-method option. We can now use GET command in http proxy. 2006-02-22 Tatsuhiro Tsujikawa * SplitSlowestSegmentSplitter.{h,cc}: This class provies algorithm that splits slowest segment of SegmentMan::commands vector. This is the default split algorithm of aria2. * SplitFirstSegmentSplitter.{h,cc}: This class provides algorithm that splits first segment of SegmentMan::commands vector. * SegmentSplitter.{h,cc}: Added. This class provides split algorithm. * DownloadCommand.{h,cc}: Added downloading speed calculation. * Segment.h: * SegmentMan.cc: Added speed field to Segment.h * main.cc: -s option now affects all URLs in command-line arguemtns. * HttpResponseCommand.cc: Fixed bug that segment file is not loaded. * message.h: Change file size related %d to %lld. 2006-02-21 Tatsuhiro Tsujikawa * FtpInitiateConnectionCommand.{h,cc}: * FtpNegotiationCommand.{h,cc}: * FtpDownloadCommand.{h,cc}: * FtpConnection.{h,cc}: Added FTP support * SimpleLogger.cc: Log message now includes time information. * main.cc: The value of --http-auth-scheme option is chagned from 'BASIC' to 'basic' * main.cc: Added --timeout command-line option. * main.cc: Added --min-segment-size command-line option. * main.cc: Added --max-retries command-line option. * prefs.h: option string constants are now defined in prefs.h 2006-02-19 Tatsuhiro Tsujikawa * AbstractCommand.cc: Fixed timeout bug in AbstractCommand * SegmentMan.cc: Added totalSize entry to .aria2 file. No compatibility with version 0.1.0's one. 2006-02-18 Tatsuhiro Tsujikawa * configure.in: Added --enable-ssl option to configure script. * HttpConnection.cc: Make Request-URI an absolute path. Some servers cannot permit absoluteURI as Request-URI. * HttpConnection.cc: Added Referer support. * main.cc: Added referer command-line option. * main.cc: Added rety-wait command-line option. * Exception.h: Fixed formating bug in Exception::setMsg() * SocketCore.{h,cc}: * Socket.{h, cc}: * Request.cc: * InitiateConnectionCommandFactory.cc: * HttpRequestCommand.cc: Added HTTPS support. * SocketCore.{h,cc}: Added SocketCore. Socket becomes a handle class for SocketCore. * ChunkedEncoding.cc: Fixed bug in ChunkedEncoding: expanding buffer size is wrong * DownloadCommand.cc: Fixed bug in DownloadCommand: In Chunked Encoding, it wrongly adds to Segment.ds buff length from the socket. 2006-02-17 Tatsuhiro Tsujikawa * Release 0.1.0