summaryrefslogtreecommitdiff
path: root/node/Switch.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-11-22 14:23:13 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-11-22 14:23:13 -0800
commit84732fcb12d66708e7887fba51413cbe629d86d3 (patch)
treefc034a71d0c421ed2b5b1dbf0426700e8adeedfa /node/Switch.cpp
parentc6c578ce1db2bb6acfeb8de15c90169282eb2c49 (diff)
downloadinfinitytier-84732fcb12d66708e7887fba51413cbe629d86d3.tar.gz
infinitytier-84732fcb12d66708e7887fba51413cbe629d86d3.zip
Wire through external path lookup. Static paths should now work.
Diffstat (limited to 'node/Switch.cpp')
-rw-r--r--node/Switch.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/node/Switch.cpp b/node/Switch.cpp
index 881d7b92..7c94d438 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -710,12 +710,12 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
if (peer) {
const uint64_t now = RR->node->now();
- // First get the best path, and if it's dead (and this is not a root)
- // we attempt to re-activate that path but this packet will flow
- // upstream. If the path comes back alive, it will be used in the future.
- // For roots we don't do the alive check since roots are not required
- // to send heartbeats "down" and because we have to at least try to
- // go somewhere.
+ /* First get the best path, and if it's dead (and this is not a root)
+ * we attempt to re-activate that path but this packet will flow
+ * upstream. If the path comes back alive, it will be used in the future.
+ * For roots we don't do the alive check since roots are not required
+ * to send heartbeats "down" and because we have to at least try to
+ * go somewhere. */
SharedPtr<Path> viaPath(peer->getBestPath(now,false));
if ( (viaPath) && (!viaPath->alive(now)) && (!RR->topology->isRoot(peer->identity())) ) {
@@ -724,7 +724,8 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
viaPath.zero();
}
if (!viaPath) {
- SharedPtr<Peer> relay(RR->topology->getUpstreamPeer());
+ peer->tryMemorizedPath(now); // periodically attempt memorized or statically defined paths, if any are known
+ const SharedPtr<Peer> relay(RR->topology->getUpstreamPeer());
if ( (!relay) || (!(viaPath = relay->getBestPath(now,false))) ) {
if (!(viaPath = peer->getBestPath(now,true)))
return false;