diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-20 14:23:25 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-20 14:23:25 +0000 |
| commit | 9281f1126471fa90e2d6fe094c4c6eba00073ea6 (patch) | |
| tree | db2dc360e785cf78fd67f565d061cc24dc68f388 /src/BtSetup.cc | |
| parent | aee471e52c6f7ac06817600e2c21b400ef375ecb (diff) | |
2010-02-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added Local Peer Discovery. It is disabled by default. Use
--bt-enable-lpd to enable the function.
* src/BtConstants.h
* src/BtSetup.cc
* src/LpdDispatchMessageCommand.cc
* src/LpdDispatchMessageCommand.h
* src/LpdMessage.h
* src/LpdMessageDispatcher.cc
* src/LpdMessageDispatcher.h
* src/LpdMessageReceiver.cc
* src/LpdMessageReceiver.h
* src/LpdReceiveMessageCommand.cc
* src/LpdReceiveMessageCommand.h
* src/Makefile.am
* src/OptionHandlerFactory.cc
* src/Peer.cc
* src/Peer.h
* src/PeerInteractionCommand.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* src/util.cc
* src/util.h
* test/LpdMessageDispatcherTest.cc
* test/LpdMessageReceiverTest.cc
* test/Makefile.am
Diffstat (limited to 'src/BtSetup.cc')
| -rw-r--r-- | src/BtSetup.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/BtSetup.cc b/src/BtSetup.cc index df59fbcf..756f745c 100644 --- a/src/BtSetup.cc +++ b/src/BtSetup.cc @@ -60,6 +60,12 @@ #include "BtRuntime.h" #include "bittorrent_helper.h" #include "BtStopDownloadCommand.h" +#include "LpdReceiveMessageCommand.h" +#include "LpdDispatchMessageCommand.h" +#include "LpdMessageReceiver.h" +#include "LpdMessageDispatcher.h" +#include "message.h" +#include "SocketCore.h" namespace aria2 { @@ -164,6 +170,39 @@ void BtSetup::setup(std::deque<Command*>& commands, PeerListenCommand* listenCommand = PeerListenCommand::getInstance(e); btRuntime->setListenPort(listenCommand->getPort()); } + if(option->getAsBool(PREF_BT_ENABLE_LPD) && + (metadataGetMode || torrentAttrs[bittorrent::PRIVATE].i() == 0)) { + if(LpdReceiveMessageCommand::getNumInstance() == 0) { + SharedHandle<LpdMessageReceiver> receiver + (new LpdMessageReceiver(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT)); + try { + receiver->init(); + receiver->getSocket()->setMulticastTtl(1); + } catch(RecoverableException& e) { + _logger->info(EX_EXCEPTION_CAUGHT, e); + receiver.reset(); + } + if(!receiver.isNull()) { + LpdReceiveMessageCommand* cmd = + LpdReceiveMessageCommand::getInstance(e, receiver); + e->commands.push_back(cmd); + } + } + if(LpdReceiveMessageCommand::getNumInstance()) { + const unsigned char* infoHash = + bittorrent::getInfoHash(requestGroup->getDownloadContext()); + SharedHandle<LpdMessageDispatcher> dispatcher + (new LpdMessageDispatcher + (std::string(&infoHash[0], &infoHash[INFO_HASH_LENGTH]), + btRuntime->getListenPort(), + LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT, + LpdReceiveMessageCommand::getInstance()->getReceiverSocket())); + LpdDispatchMessageCommand* cmd = + new LpdDispatchMessageCommand(e->newCUID(), dispatcher, e); + cmd->setBtRuntime(btRuntime); + e->commands.push_back(cmd); + } + } time_t btStopTimeout = option->getAsInt(PREF_BT_STOP_TIMEOUT); if(btStopTimeout > 0) { BtStopDownloadCommand* stopDownloadCommand = |
