summaryrefslogtreecommitdiff
path: root/node/Peer.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-06 15:28:48 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-06 15:28:48 -0700
commit79e9a8bcc26491a43577082ec7edb86020f7ec00 (patch)
treeb6a834f0f826185c562921260b75bdd6e6659c32 /node/Peer.cpp
parentfad9dff2db26662e1496329057884b3b928cb1c9 (diff)
downloadinfinitytier-79e9a8bcc26491a43577082ec7edb86020f7ec00.tar.gz
infinitytier-79e9a8bcc26491a43577082ec7edb86020f7ec00.zip
Almost everything for GitHub issue #180 except direct path map setup.
Diffstat (limited to 'node/Peer.cpp')
-rw-r--r--node/Peer.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/node/Peer.cpp b/node/Peer.cpp
index ec04357a..225fbdef 100644
--- a/node/Peer.cpp
+++ b/node/Peer.cpp
@@ -210,9 +210,12 @@ void Peer::doPingAndKeepalive(const RuntimeEnvironment *RR,uint64_t now)
void Peer::pushDirectPaths(const RuntimeEnvironment *RR,const std::vector<Path> &dps,uint64_t now,bool force)
{
- if (((now - _lastDirectPathPush) >= ZT_DIRECT_PATH_PUSH_INTERVAL)||(force)) {
+ if ((!dps.empty())&&(((now - _lastDirectPathPush) >= ZT_DIRECT_PATH_PUSH_INTERVAL)||(force))) {
_lastDirectPathPush = now;
+ TRACE("pushing %u direct paths to %s",(unsigned int)dps.size(),_id.address().toString().c_str());
+ printf("pushing %u direct paths to %s",(unsigned int)dps.size(),_id.address().toString().c_str());
+
std::vector<Path>::const_iterator p(dps.begin());
while (p != dps.end()) {
Packet outp(_id.address(),RR->identity.address(),Packet::VERB_PUSH_DIRECT_PATHS);
@@ -254,6 +257,7 @@ void Peer::pushDirectPaths(const RuntimeEnvironment *RR,const std::vector<Path>
outp.append((uint8_t)((p->metric() >= 0) ? ((p->metric() <= 255) ? p->metric() : 255) : 0));
outp.append((uint16_t)0);
outp.append(addressType);
+ outp.append((addressType == 4) ? 6 : 18);
outp.append(p->address().rawIpData(),((addressType == 4) ? 4 : 16));
outp.append((uint16_t)p->address().port());