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/DHTRoutingTableSerializer.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/DHTRoutingTableSerializer.cc')
| -rw-r--r-- | src/DHTRoutingTableSerializer.cc | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/src/DHTRoutingTableSerializer.cc b/src/DHTRoutingTableSerializer.cc index 81976c50..d1bfa3f4 100644 --- a/src/DHTRoutingTableSerializer.cc +++ b/src/DHTRoutingTableSerializer.cc @@ -50,7 +50,8 @@ namespace aria2 { -DHTRoutingTableSerializer::DHTRoutingTableSerializer() {} +DHTRoutingTableSerializer::DHTRoutingTableSerializer(int family): + family_(family) {} DHTRoutingTableSerializer::~DHTRoutingTableSerializer() {} @@ -79,7 +80,7 @@ void DHTRoutingTableSerializer::serialize(std::ostream& o) header[6] = 0; header[7] = 0x03; - char zero[16]; + char zero[18]; memset(zero, 0, sizeof(zero)); o.write(header, 8); @@ -101,29 +102,26 @@ void DHTRoutingTableSerializer::serialize(std::ostream& o) // 4bytes reserved o.write(zero, 4); + const int clen = bittorrent::getCompactLength(family_); // nodes for(std::vector<SharedHandle<DHTNode> >::const_iterator i = nodes_.begin(), eoi = nodes_.end(); i != eoi; ++i) { const SharedHandle<DHTNode>& node = *i; - // Currently, only IPv4 addresses are saved. - // 6bytes: write IP address + port in Compact IP-address/port info form. + // Write IP address + port in Compact IP-address/port info form. unsigned char compactPeer[COMPACT_LEN_IPV6]; int compactlen = bittorrent::packcompact (compactPeer, node->getIPAddress(), node->getPort()); - if(compactlen != COMPACT_LEN_IPV4) { - compactlen = COMPACT_LEN_IPV4; - memset(compactPeer, 0, COMPACT_LEN_IPV4); + if(compactlen != clen) { + memset(compactPeer, 0, clen); } // 1byte compact peer format length - o << static_cast<uint8_t>(compactlen); + o << static_cast<uint8_t>(clen); // 7bytes reserved o.write(zero, 7); - // 6 bytes compact peer - o.write(reinterpret_cast<const char*>(compactPeer), compactlen); - // 2bytes reserved - o.write(zero, 2); - // 16bytes reserved - o.write(zero, 16); + // clen bytes compact peer + o.write(reinterpret_cast<const char*>(compactPeer), clen); + // 24-clen bytes reserved + o.write(zero, 24-clen); // 20bytes: node ID o.write(reinterpret_cast<const char*>(node->getID()), DHT_ID_LENGTH); // 4bytes reserved |
