diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-07 14:15:21 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-07 14:15:21 +0000 |
| commit | 26d66923767581d63fdfc303525cddebf9125bde (patch) | |
| tree | 97eb6054d697b53c7296adfaeaa43fb8013de3f2 /src/PeerInteractionCommand.cc | |
| parent | be7012272dbd029a7843df43466f4cd83e6fb9e3 (diff) | |
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added IPv6 DHT. Added --dht-entry-porint6, --dht-file-path6,
--dht-listen-addr6 and --enable-dht6 option. IPv6 DHT is disabled
by default. To use IPv6 DHT, you need to use --enable-dht6 and
specify a global unicast address to --dht-listen-addr6. IPv6 DHT
is highly experimental.
* src/BtSetup.cc
* src/DHTAutoSaveCommand.cc
* src/DHTAutoSaveCommand.h
* src/DHTConnectionImpl.cc
* src/DHTConnectionImpl.h
* src/DHTEntryPointNameResolveCommand.cc
* src/DHTFindNodeReplyMessage.cc
* src/DHTFindNodeReplyMessage.h
* src/DHTGetPeersMessage.cc
* src/DHTGetPeersReplyMessage.cc
* src/DHTGetPeersReplyMessage.h
* src/DHTMessageFactory.h
* src/DHTMessageFactoryImpl.cc
* src/DHTMessageFactoryImpl.h
* src/DHTMessageTracker.cc
* src/DHTRegistry.cc
* src/DHTRegistry.h
* src/DHTRoutingTableDeserializer.cc
* src/DHTRoutingTableDeserializer.h
* src/DHTRoutingTableSerializer.cc
* src/DHTRoutingTableSerializer.h
* src/DHTSetup.cc
* src/DHTSetup.h
* src/FtpConnection.cc
* src/LpdMessageReceiver.cc
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/PeerInteractionCommand.cc
* src/RequestGroup.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* test/DHTConnectionImplTest.cc
* test/DHTFindNodeReplyMessageTest.cc
* test/DHTGetPeersMessageTest.cc
* test/DHTGetPeersReplyMessageTest.cc
* test/DHTMessageFactoryImplTest.cc
* test/DHTRoutingTableDeserializerTest.cc
* test/DHTRoutingTableSerializerTest.cc
* test/LpdMessageDispatcherTest.cc
* test/MockDHTMessageFactory.h
Diffstat (limited to 'src/PeerInteractionCommand.cc')
| -rw-r--r-- | src/PeerInteractionCommand.cc | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 87d4b1c9..31c8f57a 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -60,8 +60,13 @@ #include "DHTTaskQueue.h" #include "DHTTaskFactory.h" #include "DHTNode.h" -#include "DHTSetup.h" #include "DHTRegistry.h" +#include "DHTPeerAnnounceStorage.h" +#include "DHTTokenTracker.h" +#include "DHTMessageDispatcher.h" +#include "DHTMessageReceiver.h" +#include "DHTMessageFactory.h" +#include "DHTMessageCallback.h" #include "PieceStorage.h" #include "RequestGroup.h" #include "BtAnnounce.h" @@ -102,6 +107,17 @@ PeerInteractionCommand::PeerInteractionCommand setWriteCheckSocket(getSocket()); setTimeout(getOption()->getAsInt(PREF_PEER_CONNECTION_TIMEOUT)); } + + int family; + unsigned char compact[COMPACT_LEN_IPV6]; + int compactlen = bittorrent::packcompact + (compact, getPeer()->getIPAddress(), getPeer()->getPort()); + if(compactlen == COMPACT_LEN_IPV6) { + family = AF_INET6; + } else { + family = AF_INET; + } + SharedHandle<TorrentAttribute> torrentAttrs = bittorrent::getTorrentAttrs(requestGroup_->getDownloadContext()); bool metadataGetMode = torrentAttrs->metadata.empty(); @@ -131,11 +147,18 @@ PeerInteractionCommand::PeerInteractionCommand factory->setPieceStorage(pieceStorage); factory->setPeerStorage(peerStorage); factory->setExtensionMessageFactory(extensionMessageFactory); - factory->setPeer(getPeer()); - factory->setLocalNode(DHTRegistry::getData().localNode); - factory->setRoutingTable(DHTRegistry::getData().routingTable); - factory->setTaskQueue(DHTRegistry::getData().taskQueue); - factory->setTaskFactory(DHTRegistry::getData().taskFactory); + factory->setPeer(getPeer()); + if(family == AF_INET) { + factory->setLocalNode(DHTRegistry::getData().localNode); + factory->setRoutingTable(DHTRegistry::getData().routingTable); + factory->setTaskQueue(DHTRegistry::getData().taskQueue); + factory->setTaskFactory(DHTRegistry::getData().taskFactory); + } else { + factory->setLocalNode(DHTRegistry::getData6().localNode); + factory->setRoutingTable(DHTRegistry::getData6().routingTable); + factory->setTaskQueue(DHTRegistry::getData6().taskQueue); + factory->setTaskFactory(DHTRegistry::getData6().taskFactory); + } if(metadataGetMode) { factory->enableMetadataGetMode(); } @@ -192,10 +215,18 @@ PeerInteractionCommand::PeerInteractionCommand if(getOption()->getAsBool(PREF_ENABLE_PEER_EXCHANGE)) { btInteractive->setUTPexEnabled(true); } - if(DHTSetup::initialized()) { - btInteractive->setDHTEnabled(true); - btInteractive->setLocalNode(DHTRegistry::getData().localNode); - factory->setDHTEnabled(true); + if(family == AF_INET) { + if(DHTRegistry::isInitialized()) { + btInteractive->setDHTEnabled(true); + factory->setDHTEnabled(true); + btInteractive->setLocalNode(DHTRegistry::getData().localNode); + } + } else { + if(DHTRegistry::isInitialized6()) { + btInteractive->setDHTEnabled(true); + factory->setDHTEnabled(true); + btInteractive->setLocalNode(DHTRegistry::getData6().localNode); + } } } btInteractive->setUTMetadataRequestFactory(utMetadataRequestFactory); |
