diff options
Diffstat (limited to 'node/Switch.cpp')
| -rw-r--r-- | node/Switch.cpp | 18 |
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; |
