summaryrefslogtreecommitdiff
path: root/node/Switch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Switch.cpp')
-rw-r--r--node/Switch.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/node/Switch.cpp b/node/Switch.cpp
index f0641e74..a46746e7 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -219,7 +219,11 @@ bool Switch::sendHELLO(const SharedPtr<Peer> &dest,Demarc::Port localPort,const
outp.append(now);
_r->identity.serialize(outp,false);
outp.armor(dest->key(),false);
- return _r->demarc->send(localPort,remoteAddr,outp.data(),outp.size(),-1);
+
+ if (_r->demarc->send(localPort,remoteAddr,outp.data(),outp.size(),-1)) {
+ dest->expectResponseTo(outp.packetId(),Packet::VERB_HELLO,localPort,now);
+ return true;
+ } else return false;
}
bool Switch::unite(const Address &p1,const Address &p2,bool force)
@@ -696,7 +700,8 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
tmp.armor(peer->key(),encrypt);
- if (via->send(_r,tmp.data(),chunkSize,now)) {
+ Demarc::Port localPort;
+ if ((localPort = via->send(_r,tmp.data(),chunkSize,now))) {
if (chunkSize < tmp.size()) {
// Too big for one bite, fragment the rest
unsigned int fragStart = chunkSize;
@@ -716,6 +721,15 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
remaining -= chunkSize;
}
}
+
+ switch(packet.verb()) {
+ case Packet::VERB_HELLO:
+ peer->expectResponseTo(packet.packetId(),Packet::VERB_HELLO,localPort,now);
+ break;
+ default:
+ break;
+ }
+
return true;
}
return false;