summaryrefslogtreecommitdiff
path: root/src/DHTRoutingTableSerializer.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/DHTRoutingTableSerializer.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/DHTRoutingTableSerializer.cc')
-rw-r--r--src/DHTRoutingTableSerializer.cc26
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