@ -80,7 +80,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr)
if ( ! trusted ) {
if ( ! dearmor ( peer - > key ( ) ) ) {
RR - > t - > incomingPacketMessageAuthenticationFailure ( tPtr , _path , packetId ( ) , sourceAddress , hops ( ) , " invalid MAC " ) ;
_path - > recordPacket ( false ) ;
_path - > recordInvalid Packet ( ) ;
return true ;
}
}
@ -90,15 +90,15 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr)
return true ;
}
_path - > recordPacket ( true ) ;
const Packet : : Verb v = verb ( ) ;
switch ( v ) {
//case Packet::VERB_NOP:
default : // ignore unknown verbs, but if they pass auth check they are "received"
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , v , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , v , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
case Packet : : VERB_HELLO : return _doHELLO ( RR , tPtr , true ) ;
case Packet : : VERB_ACK : return _doACK ( RR , tPtr , peer ) ;
case Packet : : VERB_QOS_MEASUREMENT : return _doQOS_MEASUREMENT ( RR , tPtr , peer ) ;
case Packet : : VERB_ERROR : return _doERROR ( RR , tPtr , peer ) ;
case Packet : : VERB_OK : return _doOK ( RR , tPtr , peer ) ;
case Packet : : VERB_WHOIS : return _doWHOIS ( RR , tPtr , peer ) ;
@ -197,11 +197,55 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar
default : break ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_ERROR , inRePacketId , inReVerb , false , networkId ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_ERROR , inRePacketId , inReVerb , false , networkId ) ;
return true ;
}
bool IncomingPacket : : _doACK ( const RuntimeEnvironment * RR , void * tPtr , const SharedPtr < Peer > & peer )
{
/* Dissect incoming ACK packet. From this we can estimate current throughput of the path, establish known
* maximums and detect packet loss . */
if ( RR - > node - > getMultipathMode ( ) ! = ZT_MULTIPATH_NONE ) {
int32_t ackedBytes ;
memcpy ( & ackedBytes , payload ( ) , sizeof ( int32_t ) ) ;
_path - > receivedAck ( RR - > node - > now ( ) , Utils : : ntoh ( ackedBytes ) ) ;
}
return true ;
}
bool IncomingPacket : : _doQOS_MEASUREMENT ( const RuntimeEnvironment * RR , void * tPtr , const SharedPtr < Peer > & peer )
{
/* Dissect incoming QoS packet. From this we can compute latency values and their variance.
* The latency variance is used as a measure of " jitter " . */
if ( RR - > node - > getMultipathMode ( ) ! = ZT_MULTIPATH_NONE ) {
if ( payloadLength ( ) < ZT_PATH_MAX_QOS_PACKET_SZ & & payloadLength ( ) > ZT_PATH_MIN_QOS_PACKET_SZ ) {
const int64_t now = RR - > node - > now ( ) ;
uint64_t rx_id [ ZT_PATH_QOS_TABLE_SIZE ] ;
uint8_t rx_ts [ ZT_PATH_QOS_TABLE_SIZE ] ;
char * begin = ( char * ) payload ( ) ;
char * ptr = begin ;
int count = 0 ;
int len = payloadLength ( ) ;
// Read packet IDs and latency compensation intervals for each packet tracked by thie QoS packet
while ( ptr < ( begin + len ) ) {
memcpy ( ( void * ) & rx_id [ count ] , ptr , sizeof ( uint64_t ) ) ;
rx_id [ count ] = Utils : : ntoh ( rx_id [ count ] ) ;
ptr + = sizeof ( uint64_t ) ;
memcpy ( ( void * ) & rx_ts [ count ] , ptr , sizeof ( uint8_t ) ) ;
ptr + = sizeof ( uint8_t ) ;
count + + ;
}
_path - > receivedQoS ( now , count , rx_id , rx_ts ) ;
}
}
return true ;
}
bool IncomingPacket : : _doHELLO ( const RuntimeEnvironment * RR , void * tPtr , const bool alreadyAuthenticated )
{
const int64_t now = RR - > node - > now ( ) ;
@ -398,7 +442,7 @@ bool IncomingPacket::_doHELLO(const RuntimeEnvironment *RR,void *tPtr,const bool
_path - > send ( RR , tPtr , outp . data ( ) , outp . size ( ) , now ) ;
peer - > setRemoteVersion ( protoVersion , vMajor , vMinor , vRevision ) ; // important for this to go first so received() knows the version
peer - > received ( tPtr , _path , hops ( ) , pid , Packet : : VERB_HELLO , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , pid , payloadLength ( ) , Packet : : VERB_HELLO , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -448,8 +492,9 @@ bool IncomingPacket::_doOK(const RuntimeEnvironment *RR,void *tPtr,const SharedP
}
}
if ( ! hops ( ) )
if ( ! hops ( ) & & ( RR - > node - > getMultipathMode ( ) ! = ZT_MULTIPATH_NONE ) ) {
_path - > updateLatency ( ( unsigned int ) latency , RR - > node - > now ( ) ) ;
}
peer - > setRemoteVersion ( vProto , vMajor , vMinor , vRevision ) ;
@ -510,7 +555,7 @@ bool IncomingPacket::_doOK(const RuntimeEnvironment *RR,void *tPtr,const SharedP
default : break ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_OK , inRePacketId , inReVerb , false , networkId ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_OK , inRePacketId , inReVerb , false , networkId ) ;
return true ;
}
@ -545,7 +590,7 @@ bool IncomingPacket::_doWHOIS(const RuntimeEnvironment *RR,void *tPtr,const Shar
_path - > send ( RR , tPtr , outp . data ( ) , outp . size ( ) , RR - > node - > now ( ) ) ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_WHOIS , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_WHOIS , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -569,7 +614,7 @@ bool IncomingPacket::_doRENDEZVOUS(const RuntimeEnvironment *RR,void *tPtr,const
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_RENDEZVOUS , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_RENDEZVOUS , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -598,7 +643,7 @@ bool IncomingPacket::_doFRAME(const RuntimeEnvironment *RR,void *tPtr,const Shar
_sendErrorNeedCredentials ( RR , tPtr , peer , nwid ) ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_FRAME , 0 , Packet : : VERB_NOP , trustEstablished , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_FRAME , 0 , Packet : : VERB_NOP , trustEstablished , nwid ) ;
return true ;
}
@ -621,7 +666,7 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,void *tPtr,const
if ( ! network - > gate ( tPtr , peer ) ) {
RR - > t - > incomingNetworkAccessDenied ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_EXT_FRAME , true ) ;
_sendErrorNeedCredentials ( RR , tPtr , peer , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
return true ;
}
@ -633,7 +678,7 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,void *tPtr,const
const uint8_t * const frameData = ( const uint8_t * ) field ( comLen + ZT_PROTO_VERB_EXT_FRAME_IDX_PAYLOAD , frameLen ) ;
if ( ( ! from ) | | ( from = = network - > mac ( ) ) ) {
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
@ -644,19 +689,19 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,void *tPtr,const
network - > learnBridgeRoute ( from , peer - > address ( ) ) ;
} else {
RR - > t - > incomingNetworkFrameDropped ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_EXT_FRAME , from , to , " bridging not allowed (remote) " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
} else if ( to ! = network - > mac ( ) ) {
if ( to . isMulticast ( ) ) {
if ( network - > config ( ) . multicastLimit = = 0 ) {
RR - > t - > incomingNetworkFrameDropped ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_EXT_FRAME , from , to , " multicast disabled " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
} else if ( ! network - > config ( ) . permitsBridging ( RR - > identity . address ( ) ) ) {
RR - > t - > incomingNetworkFrameDropped ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_EXT_FRAME , from , to , " bridging not allowed (local) " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
}
@ -676,9 +721,9 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,void *tPtr,const
_path - > send ( RR , tPtr , outp . data ( ) , outp . size ( ) , RR - > node - > now ( ) ) ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ;
} else {
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
}
return true ;
@ -698,7 +743,7 @@ bool IncomingPacket::_doECHO(const RuntimeEnvironment *RR,void *tPtr,const Share
outp . armor ( peer - > key ( ) , true ) ;
_path - > send ( RR , tPtr , outp . data ( ) , outp . size ( ) , RR - > node - > now ( ) ) ;
peer - > received ( tPtr , _path , hops ( ) , pid , Packet : : VERB_ECHO , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , pid , payloadLength ( ) , Packet : : VERB_ECHO , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -743,7 +788,7 @@ bool IncomingPacket::_doMULTICAST_LIKE(const RuntimeEnvironment *RR,void *tPtr,c
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_LIKE , 0 , Packet : : VERB_NOP , trustEstablished , ( network ) ? network - > id ( ) : 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_LIKE , 0 , Packet : : VERB_NOP , trustEstablished , ( network ) ? network - > id ( ) : 0 ) ;
return true ;
}
@ -866,7 +911,7 @@ bool IncomingPacket::_doNETWORK_CREDENTIALS(const RuntimeEnvironment *RR,void *t
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_CREDENTIALS , 0 , Packet : : VERB_NOP , trustEstablished , ( network ) ? network - > id ( ) : 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_NETWORK_CREDENTIALS , 0 , Packet : : VERB_NOP , trustEstablished , ( network ) ? network - > id ( ) : 0 ) ;
return true ;
}
@ -892,7 +937,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,void
_path - > send ( RR , tPtr , outp . data ( ) , outp . size ( ) , RR - > node - > now ( ) ) ;
}
peer - > received ( tPtr , _path , hopCount , requestPacketId , Packet : : VERB_NETWORK_CONFIG_REQUEST , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hopCount , requestPacketId , payloadLength ( ) , Packet : : VERB_NETWORK_CONFIG_REQUEST , 0 , Packet : : VERB_NOP , false , nwid ) ;
return true ;
}
@ -913,7 +958,7 @@ bool IncomingPacket::_doNETWORK_CONFIG(const RuntimeEnvironment *RR,void *tPtr,c
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_CONFIG , 0 , Packet : : VERB_NOP , false , ( network ) ? network - > id ( ) : 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_NETWORK_CONFIG , 0 , Packet : : VERB_NOP , false , ( network ) ? network - > id ( ) : 0 ) ;
return true ;
}
@ -956,7 +1001,7 @@ bool IncomingPacket::_doMULTICAST_GATHER(const RuntimeEnvironment *RR,void *tPtr
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_GATHER , 0 , Packet : : VERB_NOP , trustEstablished , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_GATHER , 0 , Packet : : VERB_NOP , trustEstablished , nwid ) ;
return true ;
}
@ -982,7 +1027,7 @@ bool IncomingPacket::_doMULTICAST_FRAME(const RuntimeEnvironment *RR,void *tPtr,
if ( ! network - > gate ( tPtr , peer ) ) {
RR - > t - > incomingNetworkAccessDenied ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_MULTICAST_FRAME , true ) ;
_sendErrorNeedCredentials ( RR , tPtr , peer , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
return true ;
}
@ -1006,19 +1051,19 @@ bool IncomingPacket::_doMULTICAST_FRAME(const RuntimeEnvironment *RR,void *tPtr,
if ( network - > config ( ) . multicastLimit = = 0 ) {
RR - > t - > incomingNetworkFrameDropped ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_MULTICAST_FRAME , from , to . mac ( ) , " multicast disabled " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
return true ;
}
if ( ( frameLen > 0 ) & & ( frameLen < = ZT_MAX_MTU ) ) {
if ( ! to . mac ( ) . isMulticast ( ) ) {
RR - > t - > incomingPacketInvalid ( tPtr , _path , packetId ( ) , source ( ) , hops ( ) , Packet : : VERB_MULTICAST_FRAME , " destination not multicast " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
if ( ( ! from ) | | ( from . isMulticast ( ) ) | | ( from = = network - > mac ( ) ) ) {
RR - > t - > incomingPacketInvalid ( tPtr , _path , packetId ( ) , source ( ) , hops ( ) , Packet : : VERB_MULTICAST_FRAME , " invalid source MAC " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
@ -1032,7 +1077,7 @@ bool IncomingPacket::_doMULTICAST_FRAME(const RuntimeEnvironment *RR,void *tPtr,
network - > learnBridgeRoute ( from , peer - > address ( ) ) ;
} else {
RR - > t - > incomingNetworkFrameDropped ( tPtr , network , _path , packetId ( ) , size ( ) , peer - > address ( ) , Packet : : VERB_MULTICAST_FRAME , from , to . mac ( ) , " bridging not allowed (remote) " ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ; // trustEstablished because COM is okay
return true ;
}
}
@ -1055,10 +1100,10 @@ bool IncomingPacket::_doMULTICAST_FRAME(const RuntimeEnvironment *RR,void *tPtr,
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , true , nwid ) ;
} else {
_sendErrorNeedCredentials ( RR , tPtr , peer , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP , false , nwid ) ;
}
return true ;
@ -1070,7 +1115,7 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,void *tPt
// First, subject this to a rate limit
if ( ! peer - > rateGatePushDirectPaths ( now ) ) {
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_PUSH_DIRECT_PATHS , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_PUSH_DIRECT_PATHS , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -1094,7 +1139,7 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,void *tPt
case 4 : {
const InetAddress a ( field ( ptr , 4 ) , 4 , at < uint16_t > ( ptr + 4 ) ) ;
if (
( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_FORGET_PATH ) = = 0 ) & & // not being told to forget
( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_FORGET_PATH ) = = 0 ) & & // not being told to forget
( ! ( ( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_CLUSTER_REDIRECT ) = = 0 ) & & ( peer - > hasActivePathTo ( now , a ) ) ) ) & & // not already known
( RR - > node - > shouldUsePathForZeroTierTraffic ( tPtr , peer - > address ( ) , _path - > localSocket ( ) , a ) ) ) // should use path
{
@ -1108,7 +1153,7 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,void *tPt
case 6 : {
const InetAddress a ( field ( ptr , 16 ) , 16 , at < uint16_t > ( ptr + 16 ) ) ;
if (
( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_FORGET_PATH ) = = 0 ) & & // not being told to forget
( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_FORGET_PATH ) = = 0 ) & & // not being told to forget
( ! ( ( ( flags & ZT_PUSH_DIRECT_PATHS_FLAG_CLUSTER_REDIRECT ) = = 0 ) & & ( peer - > hasActivePathTo ( now , a ) ) ) ) & & // not already known
( RR - > node - > shouldUsePathForZeroTierTraffic ( tPtr , peer - > address ( ) , _path - > localSocket ( ) , a ) ) ) // should use path
{
@ -1123,7 +1168,7 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,void *tPt
ptr + = addrLen ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_PUSH_DIRECT_PATHS , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_PUSH_DIRECT_PATHS , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -1139,7 +1184,7 @@ bool IncomingPacket::_doUSER_MESSAGE(const RuntimeEnvironment *RR,void *tPtr,con
RR - > node - > postEvent ( tPtr , ZT_EVENT_USER_MESSAGE , reinterpret_cast < const void * > ( & um ) ) ;
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_USER_MESSAGE , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_USER_MESSAGE , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}
@ -1163,7 +1208,7 @@ bool IncomingPacket::_doREMOTE_TRACE(const RuntimeEnvironment *RR,void *tPtr,con
}
}
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , Packet : : VERB_REMOTE_TRACE , 0 , Packet : : VERB_NOP , false , 0 ) ;
peer - > received ( tPtr , _path , hops ( ) , packetId ( ) , payloadLength ( ) , Packet : : VERB_REMOTE_TRACE , 0 , Packet : : VERB_NOP , false , 0 ) ;
return true ;
}