summaryrefslogtreecommitdiff
path: root/src/DHTRoutingTableSerializer.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-03 11:44:24 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-03 11:44:24 +0000
commit2bd5020f81bc8c9995590209d0bf024147c8a51a (patch)
tree3cc93c71179570c7a4889a25f64f56d3c8820c84 /src/DHTRoutingTableSerializer.cc
parent939a372727b2f27e683a23ac38928b82de550376 (diff)
2010-08-03 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added bittorrent::packcompact() which replaces bittorrent::createcompact() and supports IPv6 addresses. Rewritten bittorrent::unpackcompact() and bittorrent::extractPeer() to support IPv6 addresses. Fixed added.f flags in ut_pex. * src/BtConstants.h * src/DHTFindNodeReplyMessage.cc * src/DHTGetPeersReplyMessage.cc * src/DHTMessageFactoryImpl.cc * src/DHTRoutingTableDeserializer.cc * src/DHTRoutingTableSerializer.cc * src/DHTTokenTracker.cc * src/DefaultBtAnnounce.cc * src/UTPexExtensionMessage.cc * src/bittorrent_helper.cc * src/bittorrent_helper.h * test/BittorrentHelperTest.cc * test/DHTFindNodeReplyMessageTest.cc * test/DHTGetPeersReplyMessageTest.cc * test/DHTMessageFactoryImplTest.cc * test/DHTRoutingTableSerializerTest.cc * test/DefaultExtensionMessageFactoryTest.cc * test/UTPexExtensionMessageTest.cc
Diffstat (limited to 'src/DHTRoutingTableSerializer.cc')
-rw-r--r--src/DHTRoutingTableSerializer.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/DHTRoutingTableSerializer.cc b/src/DHTRoutingTableSerializer.cc
index 8038a739..81976c50 100644
--- a/src/DHTRoutingTableSerializer.cc
+++ b/src/DHTRoutingTableSerializer.cc
@@ -105,19 +105,21 @@ void DHTRoutingTableSerializer::serialize(std::ostream& o)
for(std::vector<SharedHandle<DHTNode> >::const_iterator i = nodes_.begin(),
eoi = nodes_.end(); i != eoi; ++i) {
const SharedHandle<DHTNode>& node = *i;
- // Currently, only IPv4 address and IPv4-mapped address are saved.
+ // Currently, only IPv4 addresses are saved.
// 6bytes: write IP address + port in Compact IP-address/port info form.
- unsigned char compactPeer[6];
- if(!bittorrent::createcompact
- (compactPeer, node->getIPAddress(), node->getPort())) {
- memset(compactPeer, 0, 6);
+ 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);
}
// 1byte compact peer format length
- o << static_cast<uint8_t>(sizeof(compactPeer));
+ o << static_cast<uint8_t>(compactlen);
// 7bytes reserved
o.write(zero, 7);
// 6 bytes compact peer
- o.write(reinterpret_cast<const char*>(compactPeer), 6);
+ o.write(reinterpret_cast<const char*>(compactPeer), compactlen);
// 2bytes reserved
o.write(zero, 2);
// 16bytes reserved