diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-07-13 09:29:51 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-07-13 09:29:51 -0700 |
commit | 4bf3bcbd555025c5e76301ca49f74cafa526d902 (patch) | |
tree | e548a0301ea5e44ef5a033cb3383dafc0b14557e | |
parent | fe20f0d7cdbf9d38c7590bb5090467ff86b0008f (diff) | |
download | infinitytier-4bf3bcbd555025c5e76301ca49f74cafa526d902.tar.gz infinitytier-4bf3bcbd555025c5e76301ca49f74cafa526d902.zip |
Fixes to PUSH_DIRECT_PATHS.
-rw-r--r-- | node/IncomingPacket.cpp | 12 | ||||
-rw-r--r-- | node/Peer.cpp | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index 6c3a0932..deebac9b 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -906,7 +906,7 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,const Sha unsigned int count = at<uint16_t>(ZT_PACKET_IDX_PAYLOAD); unsigned int ptr = ZT_PACKET_IDX_PAYLOAD + 2; - while (count) { // if ptr overflows Buffer will throw + while (count--) { // if ptr overflows Buffer will throw // TODO: properly handle blacklisting, support other features... see Packet.hpp. unsigned int flags = (*this)[ptr++]; @@ -914,18 +914,22 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,const Sha unsigned int extLen = at<uint16_t>(ptr); ptr += 2; ptr += extLen; // unused right now unsigned int addrType = (*this)[ptr++]; - unsigned int addrLen = (*this)[ptr++]; + switch(addrType) { case 4: { InetAddress a(field(ptr,4),4,at<uint16_t>(ptr + 4)); - if ( ((flags & (0x01 | 0x02)) == 0) && (Path::isAddressValidForPath(a)) ) + if ( ((flags & (0x01 | 0x02)) == 0) && (Path::isAddressValidForPath(a)) ) { + TRACE("attempting to contact %s at pushed direct path %s",peer->address().toString().c_str(),a.toString().c_str()); peer->attemptToContactAt(RR,a,RR->node->now()); + } } break; case 6: { InetAddress a(field(ptr,16),16,at<uint16_t>(ptr + 16)); - if ( ((flags & (0x01 | 0x02)) == 0) && (Path::isAddressValidForPath(a)) ) + if ( ((flags & (0x01 | 0x02)) == 0) && (Path::isAddressValidForPath(a)) ) { + TRACE("attempting to contact %s at pushed direct path %s",peer->address().toString().c_str(),a.toString().c_str()); peer->attemptToContactAt(RR,a,RR->node->now()); + } } break; } ptr += addrLen; diff --git a/node/Peer.cpp b/node/Peer.cpp index 84aa8bef..ba765c72 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -255,7 +255,7 @@ void Peer::pushDirectPaths(const RuntimeEnvironment *RR,RemotePath *path,uint64_ outp.append(flags); outp.append((uint8_t)((p->metric() >= 0) ? ((p->metric() <= 255) ? p->metric() : 255) : 0)); - outp.append((uint16_t)0); + outp.append((uint16_t)0); // no extensions outp.append(addressType); outp.append((uint8_t)((addressType == 4) ? 6 : 18)); outp.append(p->address().rawIpData(),((addressType == 4) ? 4 : 16)); |