diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-23 13:17:48 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-23 13:17:48 +0000 |
| commit | 6e8074c0876fa97e1ba868e5053fc50cd8f487f5 (patch) | |
| tree | 9cc95e0d2df514dbb9280de586d0451b98a66229 /src/PeerInteractionCommand.cc | |
| parent | 95370fc11f82d3f351e3c4e7a5d462d360c2ac65 (diff) | |
2009-11-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added BitTorrent Magnet Link support. Base32 encoded link is not
supported yet. Fixed typo in method name in RequestGroup. In
metadataGetMode, don't show "Your share ratio was ..." message.
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
* src/DownloadHandlerFactory.cc
* src/DownloadHandlerFactory.h
* src/HandshakeExtensionMessage.cc
* src/Makefile.am
* src/Metalink2RequestGroup.cc
* src/PeerInteractionCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/UTMetadataPostDownloadHandler.cc
* src/UTMetadataPostDownloadHandler.h
* src/download_helper.cc
* test/HandshakeExtensionMessageTest.cc
* test/Makefile.am
* test/UTMetadataPostDownloadHandlerTest.cc
* test/UTMetadataRejectExtensionMessageTest.cc
Diffstat (limited to 'src/PeerInteractionCommand.cc')
| -rw-r--r-- | src/PeerInteractionCommand.cc | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 7507be30..5cbf025f 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -71,6 +71,8 @@ #include "RequestGroupMan.h" #include "ExtensionMessageRegistry.h" #include "bittorrent_helper.h" +#include "UTMetadataRequestFactory.h" +#include "UTMetadataRequestTracker.h" namespace aria2 { @@ -103,14 +105,27 @@ PeerInteractionCommand::PeerInteractionCommand SharedHandle<PeerStorage> peerStorage = btRegistry->get(torrentAttrs[bittorrent::INFO_HASH].s())._peerStorage; + bool metadataGetMode = !torrentAttrs.containsKey(bittorrent::METADATA); + SharedHandle<ExtensionMessageRegistry> exMsgRegistry (new ExtensionMessageRegistry()); + SharedHandle<UTMetadataRequestFactory> utMetadataRequestFactory; + SharedHandle<UTMetadataRequestTracker> utMetadataRequestTracker; + if(metadataGetMode) { + utMetadataRequestFactory.reset(new UTMetadataRequestFactory()); + utMetadataRequestTracker.reset(new UTMetadataRequestTracker()); + } + SharedHandle<DefaultExtensionMessageFactory> extensionMessageFactory (new DefaultExtensionMessageFactory(peer, exMsgRegistry)); extensionMessageFactory->setPeerStorage(peerStorage); extensionMessageFactory->setDownloadContext (_requestGroup->getDownloadContext()); + extensionMessageFactory->setUTMetadataRequestTracker + (utMetadataRequestTracker); + extensionMessageFactory->setBtRuntime(_btRuntime); + // PieceStorage will be set later. SharedHandle<DefaultBtMessageFactory> factory(new DefaultBtMessageFactory()); factory->setCuid(cuid); @@ -123,6 +138,9 @@ PeerInteractionCommand::PeerInteractionCommand factory->setRoutingTable(DHTRegistry::_routingTable); factory->setTaskQueue(DHTRegistry::_taskQueue); factory->setTaskFactory(DHTRegistry::_taskFactory); + if(metadataGetMode) { + factory->enableMetadataGetMode(); + } PeerConnectionHandle peerConnection; if(passedPeerConnection.isNull()) { @@ -174,7 +192,7 @@ PeerInteractionCommand::PeerInteractionCommand (getOption()->getAsInt(PREF_BT_KEEP_ALIVE_INTERVAL)); btInteractive->setRequestGroupMan(e->_requestGroupMan); btInteractive->setBtMessageFactory(factory); - if(torrentAttrs[bittorrent::PRIVATE].i() == 0) { + if(metadataGetMode || torrentAttrs[bittorrent::PRIVATE].i() == 0) { if(getOption()->getAsBool(PREF_ENABLE_PEER_EXCHANGE)) { btInteractive->setUTPexEnabled(true); } @@ -184,6 +202,12 @@ PeerInteractionCommand::PeerInteractionCommand factory->setDHTEnabled(true); } } + btInteractive->setUTMetadataRequestFactory(utMetadataRequestFactory); + btInteractive->setUTMetadataRequestTracker(utMetadataRequestTracker); + if(metadataGetMode) { + btInteractive->enableMetadataGetMode(); + } + this->btInteractive = btInteractive; // reverse depends @@ -194,6 +218,16 @@ PeerInteractionCommand::PeerInteractionCommand extensionMessageFactory->setBtMessageDispatcher(dispatcher); extensionMessageFactory->setBtMessageFactory(factory); + if(metadataGetMode) { + utMetadataRequestFactory->setDownloadContext + (_requestGroup->getDownloadContext()); + utMetadataRequestFactory->setBtMessageDispatcher(dispatcher); + utMetadataRequestFactory->setBtMessageFactory(factory); + utMetadataRequestFactory->setPeer(peer); + utMetadataRequestFactory->setUTMetadataRequestTracker + (utMetadataRequestTracker); + } + peer->allocateSessionResource (_requestGroup->getDownloadContext()->getPieceLength(), _requestGroup->getDownloadContext()->getTotalLength()); |
