diff --git a/ChangeLog b/ChangeLog index abdb656b..2bbd6984 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,67 @@ (printDownloadAbortMessage): Added a message to inform users that transfer can be resumed. + * src/FeatureConfig.cc + (FEATURE_ASYNC_DNS): New definition. + (FeatureConfig): Added aysnc DNS entry. + + To replace CommandUuid with Command* in SocketEntry and + NameResolverEntry: + + * src/DownloadEngine.h + (CommandUuids): Removed. + (SocketEntry::commandUuid): Removed. + (SocketEntry::command): New variable. + (SocketEntry::SocketEntry): Updated. + (SocketEntry::operator==): Updated. + (NameResolverEntry::commandUuid): Removed. + (NameResolverEntry::command): New variable. + (NameResolverEntry::NameResolverEntry): Updated. + (NameResolverEntry::operator==): Updated. + (waitData): Changed the argument type. + (addSocketForReadCheck): Changed the argument type. + (deleteSocketForReadCheck): Changed the argument type. + (addSocketForWriteCheck): Changed the argument type. + (deleteSocketForWriteCheck): Changed the argument type. + (addNameResolverCheck): Changed the argument type. + (deleteNameResolverCheck): Changed the argument type. + * src/DownloadEngine.cc + (FindCommand): Removed. + (run): Removed activeUuid. Added activeCommands instead. + (AccumulateActiveUuid): Renamed as AccumulateActiveCommand. + (AccumulateActiveCommand): New function object. + (waitData): Use AccumulateActiveCommand. + (addSocketForReadCheck): Use Command instead of CommandUuid. + (deleteSocketForReadCheck): Use Command instead of CommandUuid. + (addSocketForWriteCheck): Use Command instead of CommandUuid. + (deleteSocketForWriteCheck): Use Command instead of CommandUuid. + (addNameResolverCheck): Use Command instead of CommandUuid. + (deleteNameResolverCheck): Use Command instead of CommandUuid. + * src/AbstractCommand.cc + (disableReadCheckSocket): Updated according to the changes in + DownloadEngine. + (setReadCheckSocket): Updated according to the changes in + DownloadEngine. + (disableWriteCheckSocket): Updated according to the changes in + DownloadEngine. + (setWriteCheckSocket): Updated according to the changes in + DownloadEngine. + (setNameResolverCheck): Updated according to the changes in + DownloadEngine. + (disableNameResolverCheck): Updated according to the changes in + DownloadEngine. + * src/AbstractCommand.cc + (disableReadCheckSocket): Updated according to the changes in + DownloadEngine. + (setReadCheckSocket): Updated according to the changes in + DownloadEngine. + (disableWriteCheckSocket): Updated according to the changes in + DownloadEngine. + (setWriteCheckSocket): Updated according to the changes in + DownloadEngine. + + * release 0.7.1 + 2006-08-12 Tatsuhiro Tsujikawa To handle the case where some BitTorrent tracker requires all letters @@ -108,6 +169,8 @@ * src/RequestSlot.h: Replaced Time.h with TimeA2.h. * src/SleepCommand.h: Replaced Time.h with TimeA2.h. * src/DownloadEngine.cc: Replaced Time.h with TimeA2.h. + + * release 0.7.0 2006-08-07 Tatsuhiro Tsujikawa diff --git a/TODO b/TODO index e88d5c55..4ecbf3d1 100644 --- a/TODO +++ b/TODO @@ -12,4 +12,5 @@ * Query resource by location * List available os, version, etc for metalink * ipv6(RFC2428 for ftp) -* default prefix in libares.m4 must be the value of --prefex, not /usr/local \ No newline at end of file +* Add some criteria to stop seeding. +* Add silent mode. \ No newline at end of file diff --git a/configure b/configure index 8c85c8c0..4d1df18b 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for aria2c 0.7.0. +# Generated by GNU Autoconf 2.59 for aria2c 0.7.1. # # Report bugs to . # @@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='aria2c' PACKAGE_TARNAME='aria2c' -PACKAGE_VERSION='0.7.0' -PACKAGE_STRING='aria2c 0.7.0' +PACKAGE_VERSION='0.7.1' +PACKAGE_STRING='aria2c 0.7.1' PACKAGE_BUGREPORT='tujikawa@rednoah.com' ac_unique_file="src/Socket.h" @@ -788,7 +788,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures aria2c 0.7.0 to adapt to many kinds of systems. +\`configure' configures aria2c 0.7.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -854,7 +854,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of aria2c 0.7.0:";; + short | recursive ) echo "Configuration of aria2c 0.7.1:";; esac cat <<\_ACEOF @@ -877,7 +877,7 @@ Optional Packages: --with-gnutls use gnutls library if installed. Default: yes --with-openssl use openssl library if installed. Default: yes --with-libxml2 use libxml2 library if installed. Default: yes - --with-ares use ares library if installed. Default: yes + --with-libares use ares library if installed. Default: yes --with-xml-prefix=PFX Prefix where libxml is installed (optional) --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional) --with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional) @@ -1002,7 +1002,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -aria2c configure 0.7.0 +aria2c configure 0.7.1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1016,7 +1016,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by aria2c $as_me 0.7.0, which was +It was created by aria2c $as_me 0.7.1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1659,7 +1659,7 @@ fi # Define the identity of the package. PACKAGE='aria2c' - VERSION='0.7.0' + VERSION='0.7.1' cat >>confdefs.h <<_ACEOF @@ -1950,9 +1950,9 @@ else with_libxml2=yes fi; -# Check whether --with-ares or --without-ares was given. -if test "${with_ares+set}" = set; then - withval="$with_ares" +# Check whether --with-libares or --without-libares was given. +if test "${with_libares+set}" = set; then + withval="$with_libares" with_libares=$withval else with_libares=yes @@ -4647,7 +4647,7 @@ else fi; if test "x$libares_prefix" = "x"; then - libares_prefix="/usr/local" + libares_prefix="/usr" fi libares_prefix_lib=$libares_prefix/lib @@ -4738,10 +4738,10 @@ _ACEOF fi - LIBS=$LIBS_save CPPFLAGS=$CPPFLAGS_save + fi # Define variables based on the result of the checks for libraries. @@ -12101,7 +12101,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by aria2c $as_me 0.7.0, which was +This file was extended by aria2c $as_me 0.7.1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12164,7 +12164,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -aria2c config.status 0.7.0 +aria2c config.status 0.7.1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.ac b/configure.ac index c6143e4f..9097bec8 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. # AC_PREREQ(2.59) -AC_INIT(aria2c, 0.7.0, tujikawa@rednoah.com) +AC_INIT(aria2c, 0.7.1, tujikawa@rednoah.com) AM_INIT_AUTOMAKE() AM_PATH_CPPUNIT(1.10.2) AC_CONFIG_SRCDIR([src/Socket.h]) @@ -16,7 +16,7 @@ AC_SUBST(localedir) AC_ARG_WITH([gnutls], [ --with-gnutls use gnutls library if installed. Default: yes], [with_gnutls=$withval], [with_gnutls=yes]) AC_ARG_WITH([openssl], [ --with-openssl use openssl library if installed. Default: yes], [with_openssl=$withval], [with_openssl=yes]) AC_ARG_WITH([libxml2], [ --with-libxml2 use libxml2 library if installed. Default: yes], [with_libxml2=$withval], [with_libxml2=yes]) -AC_ARG_WITH([ares], [ --with-ares use ares library if installed. Default: yes], [with_libares=$withval], [with_libares=yes]) +AC_ARG_WITH([libares], [ --with-libares use ares library if installed. Default: yes], [with_libares=$withval], [with_libares=yes]) AC_ARG_ENABLE([bittorrent], [ --enable-bittorrent enable BitTorrent support. Default: yes], [enable_bittorrent=$enableval], [enable_bittorrent=yes]) AC_ARG_ENABLE([metalink], [ --enable-metalink enable Metalink support. Default: yes], [enable_metalink=$enableval], [enable_metalink=yes]) diff --git a/m4/libares.m4 b/m4/libares.m4 index dadf5240..1c94bdd2 100644 --- a/m4/libares.m4 +++ b/m4/libares.m4 @@ -6,7 +6,7 @@ AC_ARG_WITH([libares-prefix], [libares_prefix=""]) if test "x$libares_prefix" = "x"; then - libares_prefix="/usr/local" + libares_prefix="/usr" fi libares_prefix_lib=$libares_prefix/lib @@ -27,7 +27,7 @@ if test "x$have_libares" = "xyes"; then AC_SUBST(LIBARES_CPPFLAGS) fi - LIBS=$LIBS_save CPPFLAGS=$CPPFLAGS_save + ]) diff --git a/po/Makefile.in b/po/Makefile.in index 50e3b790..801c639c 100644 --- a/po/Makefile.in +++ b/po/Makefile.in @@ -9,7 +9,7 @@ # General Public License and is *not* in the public domain. PACKAGE = aria2c -VERSION = 0.7.0 +VERSION = 0.7.1 SHELL = /bin/sh diff --git a/po/aria2c.pot b/po/aria2c.pot index f6b51755..d3997642 100644 --- a/po/aria2c.pot +++ b/po/aria2c.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-08-08 01:22+0900\n" +"POT-Creation-Date: 2006-08-14 23:18+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,6 +27,7 @@ msgstr "" msgid "" "\n" "The download was not complete because of errors. Check the log.\n" +"aria2 will resume download if the transfer is restarted." msgstr "" #: src/message.h:27 @@ -790,3 +791,18 @@ msgstr "" #: src/main.cc:614 msgid "daemon failed" msgstr "" + +#: src/main.cc:676 +msgid "" +"Now verifying checksum.\n" +"This may take some time depending on your PC environment and the size of " +"file." +msgstr "" + +#: src/main.cc:680 +msgid "checksum OK." +msgstr "" + +#: src/main.cc:683 +msgid "checksum ERROR." +msgstr "" diff --git a/po/de.gmo b/po/de.gmo index 6b2aaa61..1d320223 100644 Binary files a/po/de.gmo and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po index 981bbbfd..f87d9cce 100644 --- a/po/de.po +++ b/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-08-08 01:22+0900\n" +"POT-Creation-Date: 2006-08-14 23:18+0900\n" "PO-Revision-Date: 2006-05-05 19:44+0900\n" "Last-Translator: Hermann J. Beckers \n" "Language-Team: deutsch \n" @@ -26,9 +26,11 @@ msgstr "" "Abruf ist vollständig. <%s>\n" #: src/RequestInfo.h:92 +#, fuzzy msgid "" "\n" "The download was not complete because of errors. Check the log.\n" +"aria2 will resume download if the transfer is restarted." msgstr "" "\n" "Abruf wegen Fehlern nicht vollständig. Überprüfen Sie die Log-Datei.\n" @@ -926,3 +928,18 @@ msgstr "Geben Sie zumindest eine URL an" #: src/main.cc:614 msgid "daemon failed" msgstr "Daemon-Start nicht erfolgreich" + +#: src/main.cc:676 +msgid "" +"Now verifying checksum.\n" +"This may take some time depending on your PC environment and the size of " +"file." +msgstr "" + +#: src/main.cc:680 +msgid "checksum OK." +msgstr "" + +#: src/main.cc:683 +msgid "checksum ERROR." +msgstr "" diff --git a/po/ja.gmo b/po/ja.gmo index eda27925..8fb0ae4e 100644 Binary files a/po/ja.gmo and b/po/ja.gmo differ diff --git a/po/ja.po b/po/ja.po index 3bb46636..c0c86bad 100644 --- a/po/ja.po +++ b/po/ja.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: aria2c 0.2.1\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-08-08 01:22+0900\n" -"PO-Revision-Date: 2006-08-08 01:27+0900\n" +"POT-Creation-Date: 2006-08-14 23:18+0900\n" +"PO-Revision-Date: 2006-08-14 23:22+0900\n" "Last-Translator: Tatsuhiro Tsujikawa \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" @@ -29,9 +29,11 @@ msgstr "" msgid "" "\n" "The download was not complete because of errors. Check the log.\n" +"aria2 will resume download if the transfer is restarted." msgstr "" "\n" "¥À¥¦¥ó¥í¡¼¥É¤Ï¥¨¥é¡¼¤Î¤¿¤á´°Î»¤·¤Æ¤¤¤Þ¤»¤ó. ¥í¥°¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤.\n" +"¼¡²ó¤Î¥À¥¦¥ó¥í¡¼¥É¤Ï¥¨¥é¡¼¤Î»þÅÀ¤«¤éºÆ³«¤Ç¤­¤Þ¤¹." #: src/message.h:27 #, c-format @@ -957,3 +959,20 @@ msgstr " #: src/main.cc:614 msgid "daemon failed" msgstr "¥Ç¡¼¥â¥óµ¯Æ°¤Ë¼ºÇÔ" + +#: src/main.cc:676 +msgid "" +"Now verifying checksum.\n" +"This may take some time depending on your PC environment and the size of " +"file." +msgstr "" +"¥Á¥§¥Ã¥¯¥µ¥à¤ò¸¡ºº¤·¤Æ¤¤¤Þ¤¹.\n" +"¤ª»È¤¤¤Î PC ´Ä¶­¤È¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Ë¤è¤ê, ¤¢¤ëÄøÅ٤λþ´Ö¤¬¤«¤«¤ê¤Þ¤¹." + +#: src/main.cc:680 +msgid "checksum OK." +msgstr "¥Á¥§¥Ã¥¯¥µ¥à OK." + +#: src/main.cc:683 +msgid "checksum ERROR." +msgstr "¥Á¥§¥Ã¥¯¥µ¥à ¥¨¥é¡¼." diff --git a/po/ru.gmo b/po/ru.gmo index 75afca5e..478f1925 100644 Binary files a/po/ru.gmo and b/po/ru.gmo differ diff --git a/po/ru.po b/po/ru.po index 666936d9..2f9a8d5c 100644 --- a/po/ru.po +++ b/po/ru.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-08-08 01:22+0900\n" +"POT-Creation-Date: 2006-08-14 23:18+0900\n" "PO-Revision-Date: 2006-07-28 18:04+0600\n" "Last-Translator: Azamat H. Hackimov \n" "Language-Team: \n" @@ -31,9 +31,11 @@ msgstr "" "Скачивание завершено. <%s>\n" #: src/RequestInfo.h:92 +#, fuzzy msgid "" "\n" "The download was not complete because of errors. Check the log.\n" +"aria2 will resume download if the transfer is restarted." msgstr "" "\n" "Скачивание не завершено из-за ошибок. Проверьте лог-файл.\n" @@ -907,3 +909,18 @@ msgstr "укажите по крайней мере один URL" #: src/main.cc:614 msgid "daemon failed" msgstr "ошибка демона" + +#: src/main.cc:676 +msgid "" +"Now verifying checksum.\n" +"This may take some time depending on your PC environment and the size of " +"file." +msgstr "" + +#: src/main.cc:680 +msgid "checksum OK." +msgstr "" + +#: src/main.cc:683 +msgid "checksum ERROR." +msgstr "" diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index bc9f005f..28df0413 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -120,7 +120,7 @@ void AbstractCommand::onAbort(Exception* ex) { void AbstractCommand::disableReadCheckSocket() { if(checkSocketIsReadable) { - e->deleteSocketForReadCheck(readCheckTarget, getUuid()); + e->deleteSocketForReadCheck(readCheckTarget, this); checkSocketIsReadable = false; readCheckTarget = SocketHandle(); } @@ -132,12 +132,12 @@ void AbstractCommand::setReadCheckSocket(const SocketHandle& socket) { } else { if(checkSocketIsReadable) { if(readCheckTarget != socket) { - e->deleteSocketForReadCheck(readCheckTarget, getUuid()); - e->addSocketForReadCheck(socket, getUuid()); + e->deleteSocketForReadCheck(readCheckTarget, this); + e->addSocketForReadCheck(socket, this); readCheckTarget = socket; } } else { - e->addSocketForReadCheck(socket, getUuid()); + e->addSocketForReadCheck(socket, this); checkSocketIsReadable = true; readCheckTarget = socket; } @@ -146,7 +146,7 @@ void AbstractCommand::setReadCheckSocket(const SocketHandle& socket) { void AbstractCommand::disableWriteCheckSocket() { if(checkSocketIsWritable) { - e->deleteSocketForWriteCheck(writeCheckTarget, getUuid()); + e->deleteSocketForWriteCheck(writeCheckTarget, this); checkSocketIsWritable = false; writeCheckTarget = SocketHandle(); } @@ -158,12 +158,12 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) { } else { if(checkSocketIsWritable) { if(writeCheckTarget != socket) { - e->deleteSocketForWriteCheck(writeCheckTarget, getUuid()); - e->addSocketForWriteCheck(socket, getUuid()); + e->deleteSocketForWriteCheck(writeCheckTarget, this); + e->addSocketForWriteCheck(socket, this); writeCheckTarget = socket; } } else { - e->addSocketForWriteCheck(socket, getUuid()); + e->addSocketForWriteCheck(socket, this); checkSocketIsWritable = true; writeCheckTarget = socket; } @@ -172,11 +172,11 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) { #ifdef HAVE_LIBARES void AbstractCommand::setNameResolverCheck(const NameResolverHandle& resolver) { - e->addNameResolverCheck(resolver, getUuid()); + e->addNameResolverCheck(resolver, this); } void AbstractCommand::disableNameResolverCheck(const NameResolverHandle& resolver) { - e->deleteNameResolverCheck(resolver, getUuid()); + e->deleteNameResolverCheck(resolver, this); } bool AbstractCommand::resolveHostname(const string& hostname, diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index 9229acd2..abdc18a8 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -46,27 +46,11 @@ void DownloadEngine::cleanQueue() { commands.clear(); } - -class FindCommand { -private: - CommandUuid uuid; -public: - FindCommand(const CommandUuid& uuid):uuid(uuid) {} - - bool operator()(const Command* command) { - if(command->getUuid() == uuid) { - return true; - } else { - return false; - } - } -}; - void DownloadEngine::run() { initStatistics(); Time cp; cp.setTimeInSec(0); - CommandUuids activeUuids; + Commands activeCommands; while(!commands.empty()) { if(cp.elapsed(1)) { cp.reset(); @@ -79,22 +63,22 @@ void DownloadEngine::run() { } } } else { - for(CommandUuids::iterator itr = activeUuids.begin(); - itr != activeUuids.end(); itr++) { - Commands::iterator comItr = find_if(commands.begin(), commands.end(), - FindCommand(*itr)); + for(Commands::iterator itr = activeCommands.begin(); + itr != activeCommands.end(); itr++) { + Commands::iterator comItr = find(commands.begin(), commands.end(), + *itr); assert(comItr != commands.end()); - Command* com = *comItr; + Command* command = *itr; commands.erase(comItr); - if(com->execute()) { - delete com; + if(command->execute()) { + delete command; } } } afterEachIteration(); - activeUuids.clear(); + activeCommands.clear(); if(!noWait && !commands.empty()) { - waitData(activeUuids); + waitData(activeCommands); } noWait = false; calculateStatistics(); @@ -146,34 +130,34 @@ public: #endif // HAVE_LIBARES }; -class AccumulateActiveUuid { +class AccumulateActiveCommand { private: - CommandUuids* activeUuids_ptr; + Commands* activeCommands_ptr; fd_set* rfds_ptr; fd_set* wfds_ptr; public: - AccumulateActiveUuid(CommandUuids* activeUuids_ptr, + AccumulateActiveCommand(Commands* activeCommands_ptr, fd_set* rfds_ptr, fd_set* wfds_ptr): - activeUuids_ptr(activeUuids_ptr), + activeCommands_ptr(activeCommands_ptr), rfds_ptr(rfds_ptr), wfds_ptr(wfds_ptr) {} void operator()(const SocketEntry& entry) { if(FD_ISSET(entry.socket->getSockfd(), rfds_ptr) || FD_ISSET(entry.socket->getSockfd(), wfds_ptr)) { - activeUuids_ptr->push_back(entry.commandUuid); + activeCommands_ptr->push_back(entry.command); } /* switch(entry.type) { case SocketEntry::TYPE_RD: if(FD_ISSET(entry.socket->getSockfd(), rfds_ptr)) { - activeUuids_ptr->push_back(entry.commandUuid); + activeCommands_ptr->push_back(entry.command); } break; case SocketEntry::TYPE_WR: if(FD_ISSET(entry.socket->getSockfd(), wfds_ptr)) { - activeUuids_ptr->push_back(entry.commandUuid); + activeCommands_ptr->push_back(entry.command); } break; } @@ -185,7 +169,7 @@ public: switch(entry.nameResolver->getStatus()) { case NameResolver::STATUS_SUCCESS: case NameResolver::STATUS_ERROR: - activeUuids_ptr->push_back(entry.commandUuid); + activeCommands_ptr->push_back(entry.command); break; default: break; @@ -194,7 +178,7 @@ public: #endif // HAVE_LIBARES }; -void DownloadEngine::waitData(CommandUuids& activeUuids) { +void DownloadEngine::waitData(Commands& activeCommands) { fd_set rfds; fd_set wfds; int retval = 0; @@ -208,15 +192,15 @@ void DownloadEngine::waitData(CommandUuids& activeUuids) { retval = select(fdmax+1, &rfds, &wfds, NULL, &tv); if(retval > 0) { for_each(socketEntries.begin(), socketEntries.end(), - AccumulateActiveUuid(&activeUuids, &rfds, &wfds)); + AccumulateActiveCommand(&activeCommands, &rfds, &wfds)); #ifdef HAVE_LIBARES for_each(nameResolverEntries.begin(), nameResolverEntries.end(), - AccumulateActiveUuid(&activeUuids, &rfds, &wfds)); + AccumulateActiveCommand(&activeCommands, &rfds, &wfds)); #endif // HAVE_LIBARES - sort(activeUuids.begin(), activeUuids.end()); - activeUuids.erase(unique(activeUuids.begin(), - activeUuids.end()), - activeUuids.end()); + sort(activeCommands.begin(), activeCommands.end()); + activeCommands.erase(unique(activeCommands.begin(), + activeCommands.end()), + activeCommands.end()); } } @@ -257,33 +241,33 @@ bool DownloadEngine::deleteSocket(const SocketEntry& entry) { } bool DownloadEngine::addSocketForReadCheck(const SocketHandle& socket, - const CommandUuid& commandUuid) { - SocketEntry entry(socket, commandUuid, SocketEntry::TYPE_RD); + Command* command) { + SocketEntry entry(socket, command, SocketEntry::TYPE_RD); return addSocket(entry); } bool DownloadEngine::deleteSocketForReadCheck(const SocketHandle& socket, - const CommandUuid& commandUuid) { - SocketEntry entry(socket, commandUuid, SocketEntry::TYPE_RD); + Command* command) { + SocketEntry entry(socket, command, SocketEntry::TYPE_RD); return deleteSocket(entry); } bool DownloadEngine::addSocketForWriteCheck(const SocketHandle& socket, - const CommandUuid& commandUuid) { - SocketEntry entry(socket, commandUuid, SocketEntry::TYPE_WR); + Command* command) { + SocketEntry entry(socket, command, SocketEntry::TYPE_WR); return addSocket(entry); } bool DownloadEngine::deleteSocketForWriteCheck(const SocketHandle& socket, - const CommandUuid& commandUuid) { - SocketEntry entry(socket, commandUuid, SocketEntry::TYPE_WR); + Command* command) { + SocketEntry entry(socket, command, SocketEntry::TYPE_WR); return deleteSocket(entry); } #ifdef HAVE_LIBARES bool DownloadEngine::addNameResolverCheck(const NameResolverHandle& resolver, - const CommandUuid& uuid) { - NameResolverEntry entry(resolver, uuid); + Command* command) { + NameResolverEntry entry(resolver, command); NameResolverEntries::iterator itr = find(nameResolverEntries.begin(), nameResolverEntries.end(), entry); @@ -297,8 +281,8 @@ bool DownloadEngine::addNameResolverCheck(const NameResolverHandle& resolver, } bool DownloadEngine::deleteNameResolverCheck(const NameResolverHandle& resolver, - const CommandUuid& uuid) { - NameResolverEntry entry(resolver, uuid); + Command* command) { + NameResolverEntry entry(resolver, command); NameResolverEntries::iterator itr = find(nameResolverEntries.begin(), nameResolverEntries.end(), entry); diff --git a/src/DownloadEngine.h b/src/DownloadEngine.h index b412ce3b..26b7c753 100644 --- a/src/DownloadEngine.h +++ b/src/DownloadEngine.h @@ -34,7 +34,6 @@ typedef deque Sockets; typedef deque Commands; -typedef deque CommandUuids; class SocketEntry { public: @@ -44,18 +43,18 @@ public: }; SocketHandle socket; - CommandUuid commandUuid; + Command* command; TYPE type; public: SocketEntry(const SocketHandle& socket, - const CommandUuid& commandUuid, + Command* command, TYPE type): - socket(socket), commandUuid(commandUuid), type(type) {} + socket(socket), command(command), type(type) {} ~SocketEntry() {} bool operator==(const SocketEntry& entry) { return socket == entry.socket && - commandUuid == entry.commandUuid && + command == entry.command && type == entry.type; } }; @@ -66,16 +65,16 @@ typedef deque SocketEntries; class NameResolverEntry { public: NameResolverHandle nameResolver; - CommandUuid commandUuid; + Command* command; public: NameResolverEntry(const NameResolverHandle& nameResolver, - const CommandUuid& commandUuid): - nameResolver(nameResolver), commandUuid(commandUuid) {} + Command* command): + nameResolver(nameResolver), command(command) {} ~NameResolverEntry() {} bool operator==(const NameResolverEntry& entry) { return nameResolver == entry.nameResolver && - commandUuid == entry.commandUuid; + command == entry.command; } }; @@ -85,7 +84,7 @@ typedef deque NameResolverEntries; class DownloadEngine { private: - void waitData(CommandUuids& activeUuids); + void waitData(Commands& activeCommands); SocketEntries socketEntries; #ifdef HAVE_LIBARES NameResolverEntries nameResolverEntries; @@ -119,18 +118,18 @@ public: void updateFdSet(); bool addSocketForReadCheck(const SocketHandle& socket, - const CommandUuid& commandUuid); + Command* command); bool deleteSocketForReadCheck(const SocketHandle& socket, - const CommandUuid& commandUuid); + Command* command); bool addSocketForWriteCheck(const SocketHandle& socket, - const CommandUuid& commandUuid); + Command* command); bool deleteSocketForWriteCheck(const SocketHandle& socket, - const CommandUuid& command); + Command* command); #ifdef HAVE_LIBARES bool addNameResolverCheck(const NameResolverHandle& resolver, - const CommandUuid& uuid); + Command* command); bool deleteNameResolverCheck(const NameResolverHandle& resolver, - const CommandUuid& uuid); + Command* command); #endif // HAVE_LIBARES }; diff --git a/src/FeatureConfig.cc b/src/FeatureConfig.cc index 9e4ab013..79922710 100644 --- a/src/FeatureConfig.cc +++ b/src/FeatureConfig.cc @@ -29,6 +29,7 @@ FeatureConfig* FeatureConfig::featureConfig = 0; #define FEATURE_BITTORRENT "bittorrent" #define FEATURE_METALINK "metalink" #define FEATURE_MESSAGE_DIGEST "message digest" +#define FEATURE_ASYNC_DNS "async dns" FeatureConfig::FeatureConfig() { static PortMap::value_type portArray[] = { @@ -71,6 +72,13 @@ FeatureConfig::FeatureConfig() { false #endif // ENABLE_MESSAGE_DIGEST ), + FeatureMap::value_type(FEATURE_ASYNC_DNS, +#ifdef HAVE_LIBARES + true +#else + false +#endif // HAVE_LIBARES + ), }; int featureArraySize = sizeof(featureArray)/sizeof(FeatureMap::value_type); diff --git a/src/PeerAbstractCommand.cc b/src/PeerAbstractCommand.cc index eab501ad..fe663b7e 100644 --- a/src/PeerAbstractCommand.cc +++ b/src/PeerAbstractCommand.cc @@ -88,7 +88,7 @@ void PeerAbstractCommand::onAbort(Exception* ex) { void PeerAbstractCommand::disableReadCheckSocket() { if(checkSocketIsReadable) { - e->deleteSocketForReadCheck(readCheckTarget, getUuid()); + e->deleteSocketForReadCheck(readCheckTarget, this); checkSocketIsReadable = false; readCheckTarget = SocketHandle(); } @@ -100,12 +100,12 @@ void PeerAbstractCommand::setReadCheckSocket(const SocketHandle& socket) { } else { if(checkSocketIsReadable) { if(readCheckTarget != socket) { - e->deleteSocketForReadCheck(readCheckTarget, getUuid()); - e->addSocketForReadCheck(socket, getUuid()); + e->deleteSocketForReadCheck(readCheckTarget, this); + e->addSocketForReadCheck(socket, this); readCheckTarget = socket; } } else { - e->addSocketForReadCheck(socket, getUuid()); + e->addSocketForReadCheck(socket, this); checkSocketIsReadable = true; readCheckTarget = socket; } @@ -114,7 +114,7 @@ void PeerAbstractCommand::setReadCheckSocket(const SocketHandle& socket) { void PeerAbstractCommand::disableWriteCheckSocket() { if(checkSocketIsWritable) { - e->deleteSocketForWriteCheck(writeCheckTarget, getUuid()); + e->deleteSocketForWriteCheck(writeCheckTarget, this); checkSocketIsWritable = false; writeCheckTarget = SocketHandle(); } @@ -126,12 +126,12 @@ void PeerAbstractCommand::setWriteCheckSocket(const SocketHandle& socket) { } else { if(checkSocketIsWritable) { if(writeCheckTarget != socket) { - e->deleteSocketForWriteCheck(writeCheckTarget, getUuid()); - e->addSocketForWriteCheck(socket, getUuid()); + e->deleteSocketForWriteCheck(writeCheckTarget, this); + e->addSocketForWriteCheck(socket, this); writeCheckTarget = socket; } } else { - e->addSocketForWriteCheck(socket, getUuid()); + e->addSocketForWriteCheck(socket, this); checkSocketIsWritable = true; writeCheckTarget = socket; } diff --git a/test/FeatureConfigTest.cc b/test/FeatureConfigTest.cc index b336fa70..6af5f059 100644 --- a/test/FeatureConfigTest.cc +++ b/test/FeatureConfigTest.cc @@ -45,6 +45,7 @@ void FeatureConfigTest::testGetConfigurationSummary() { +"ftp: yes\n" +"bittorrent: yes\n" +"metalink: yes\n" - +"message digest: yes\n", + +"message digest: yes\n" + +"async dns: yes\n", FeatureConfig::getInstance()->getConfigurationSummary()); }