summaryrefslogtreecommitdiff
path: root/src/PeerInteractionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-07 14:15:21 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-07 14:15:21 +0000
commit26d66923767581d63fdfc303525cddebf9125bde (patch)
tree97eb6054d697b53c7296adfaeaa43fb8013de3f2 /src/PeerInteractionCommand.cc
parentbe7012272dbd029a7843df43466f4cd83e6fb9e3 (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.cc51
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);