Defer NETWORK_CONFIG_REQUEST packets and allow multithreaded processing.

This commit is contained in:
Adam Ierymenko 2016-06-27 17:09:04 -07:00
parent b9e86103cf
commit 45f315e603
2 changed files with 25 additions and 13 deletions

View file

@ -61,6 +61,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,bool deferred)
SharedPtr<Peer> peer(RR->topology->getPeer(sourceAddress)); SharedPtr<Peer> peer(RR->topology->getPeer(sourceAddress));
if (peer) { if (peer) {
if (!_authenticated) {
if (!dearmor(peer->key())) { if (!dearmor(peer->key())) {
TRACE("dropped packet from %s(%s), MAC authentication failed (size: %u)",peer->address().toString().c_str(),_remoteAddress.toString().c_str(),size()); TRACE("dropped packet from %s(%s), MAC authentication failed (size: %u)",peer->address().toString().c_str(),_remoteAddress.toString().c_str(),size());
return true; return true;
@ -69,6 +70,8 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,bool deferred)
TRACE("dropped packet from %s(%s), compressed data invalid",peer->address().toString().c_str(),_remoteAddress.toString().c_str()); TRACE("dropped packet from %s(%s), compressed data invalid",peer->address().toString().c_str(),_remoteAddress.toString().c_str());
return true; return true;
} }
_authenticated = true;
}
const Packet::Verb v = verb(); const Packet::Verb v = verb();
//TRACE("<< %s from %s(%s)",Packet::verbString(v),sourceAddress.toString().c_str(),_remoteAddress.toString().c_str()); //TRACE("<< %s from %s(%s)",Packet::verbString(v),sourceAddress.toString().c_str(),_remoteAddress.toString().c_str());
@ -88,7 +91,13 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,bool deferred)
case Packet::VERB_ECHO: return _doECHO(RR,peer); case Packet::VERB_ECHO: return _doECHO(RR,peer);
case Packet::VERB_MULTICAST_LIKE: return _doMULTICAST_LIKE(RR,peer); case Packet::VERB_MULTICAST_LIKE: return _doMULTICAST_LIKE(RR,peer);
case Packet::VERB_NETWORK_MEMBERSHIP_CERTIFICATE: return _doNETWORK_MEMBERSHIP_CERTIFICATE(RR,peer); case Packet::VERB_NETWORK_MEMBERSHIP_CERTIFICATE: return _doNETWORK_MEMBERSHIP_CERTIFICATE(RR,peer);
case Packet::VERB_NETWORK_CONFIG_REQUEST: return _doNETWORK_CONFIG_REQUEST(RR,peer); case Packet::VERB_NETWORK_CONFIG_REQUEST:
if ((RR->dpEnabled > 0)&&(!deferred)) {
RR->dp->enqueue(this);
return true;
} else {
return _doNETWORK_CONFIG_REQUEST(RR,peer);
}
case Packet::VERB_NETWORK_CONFIG_REFRESH: return _doNETWORK_CONFIG_REFRESH(RR,peer); case Packet::VERB_NETWORK_CONFIG_REFRESH: return _doNETWORK_CONFIG_REFRESH(RR,peer);
case Packet::VERB_MULTICAST_GATHER: return _doMULTICAST_GATHER(RR,peer); case Packet::VERB_MULTICAST_GATHER: return _doMULTICAST_GATHER(RR,peer);
case Packet::VERB_MULTICAST_FRAME: return _doMULTICAST_FRAME(RR,peer); case Packet::VERB_MULTICAST_FRAME: return _doMULTICAST_FRAME(RR,peer);

View file

@ -58,7 +58,8 @@ public:
Packet(), Packet(),
_receiveTime(0), _receiveTime(0),
_localAddress(), _localAddress(),
_remoteAddress() _remoteAddress(),
_authenticated(false)
{ {
} }
@ -82,7 +83,8 @@ public:
Packet(data,len), Packet(data,len),
_receiveTime(now), _receiveTime(now),
_localAddress(localAddress), _localAddress(localAddress),
_remoteAddress(remoteAddress) _remoteAddress(remoteAddress),
_authenticated(false)
{ {
} }
@ -188,6 +190,7 @@ private:
uint64_t _receiveTime; uint64_t _receiveTime;
InetAddress _localAddress; InetAddress _localAddress;
InetAddress _remoteAddress; InetAddress _remoteAddress;
bool _authenticated;
}; };
} // namespace ZeroTier } // namespace ZeroTier