@ -69,7 +69,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR)
switch ( verb ( ) ) {
//case Packet::VERB_NOP:
default : // ignore unknown verbs, but if they pass auth check they are "received"
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , verb ( ) , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , verb ( ) , 0 , Packet : : VERB_NOP ) ;
return true ;
case Packet : : VERB_HELLO : return _doHELLO ( RR ) ;
case Packet : : VERB_ERROR : return _doERROR ( RR , peer ) ;
@ -144,7 +144,7 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,const SharedPtr<Peer>
Packet outp ( peer - > address ( ) , RR - > identity . address ( ) , Packet : : VERB_NETWORK_MEMBERSHIP_CERTIFICATE ) ;
nconf - > com ( ) . serialize ( outp ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
}
} break ;
@ -165,7 +165,7 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,const SharedPtr<Peer>
default : break ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_ERROR , inRePacketId , inReVerb ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_ERROR , inRePacketId , inReVerb ) ;
} catch ( std : : exception & ex ) {
TRACE ( " dropped ERROR from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , ex . what ( ) ) ;
} catch ( . . . ) {
@ -231,7 +231,7 @@ bool IncomingPacket::_doHELLO(const RuntimeEnvironment *RR)
outp . append ( packetId ( ) ) ;
outp . append ( ( unsigned char ) Packet : : ERROR_IDENTITY_COLLISION ) ;
outp . armor ( key , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
} else {
RR - > node - > postEvent ( ZT1_EVENT_AUTHENTICATION_FAILURE , ( const void * ) & _remoteAddress ) ;
TRACE ( " rejected HELLO from %s(%s): packet failed authentication " , id . address ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) ) ;
@ -278,7 +278,7 @@ bool IncomingPacket::_doHELLO(const RuntimeEnvironment *RR)
// VALID -- continues here
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_HELLO , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_HELLO , 0 , Packet : : VERB_NOP ) ;
peer - > setRemoteVersion ( protoVersion , vMajor , vMinor , vRevision ) ;
bool trusted = false ;
@ -316,7 +316,7 @@ bool IncomingPacket::_doHELLO(const RuntimeEnvironment *RR)
}
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
} catch ( std : : exception & ex ) {
TRACE ( " dropped HELLO from %s(%s): %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , ex . what ( ) ) ;
} catch ( . . . ) {
@ -436,7 +436,7 @@ bool IncomingPacket::_doOK(const RuntimeEnvironment *RR,const SharedPtr<Peer> &p
default : break ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_OK , inRePacketId , inReVerb ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_OK , inRePacketId , inReVerb ) ;
} catch ( std : : exception & ex ) {
TRACE ( " dropped OK from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , ex . what ( ) ) ;
} catch ( . . . ) {
@ -456,7 +456,7 @@ bool IncomingPacket::_doWHOIS(const RuntimeEnvironment *RR,const SharedPtr<Peer>
outp . append ( packetId ( ) ) ;
queried - > identity ( ) . serialize ( outp , false ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
} else {
Packet outp ( peer - > address ( ) , RR - > identity . address ( ) , Packet : : VERB_ERROR ) ;
outp . append ( ( unsigned char ) Packet : : VERB_WHOIS ) ;
@ -464,12 +464,12 @@ bool IncomingPacket::_doWHOIS(const RuntimeEnvironment *RR,const SharedPtr<Peer>
outp . append ( ( unsigned char ) Packet : : ERROR_OBJ_NOT_FOUND ) ;
outp . append ( payload ( ) , ZT_ADDRESS_LENGTH ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
} else {
TRACE ( " dropped WHOIS from %s(%s): missing or invalid address " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) ) ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_WHOIS , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_WHOIS , 0 , Packet : : VERB_NOP ) ;
} catch ( . . . ) {
TRACE ( " dropped WHOIS from %s(%s): unexpected exception " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) ) ;
}
@ -487,8 +487,8 @@ bool IncomingPacket::_doRENDEZVOUS(const RuntimeEnvironment *RR,const SharedPtr<
if ( ( port > 0 ) & & ( ( addrlen = = 4 ) | | ( addrlen = = 16 ) ) ) {
InetAddress atAddr ( field ( ZT_PROTO_VERB_RENDEZVOUS_IDX_ADDRESS , addrlen ) , addrlen , port ) ;
TRACE ( " RENDEZVOUS from %s says %s might be at %s, starting NAT-t " , peer - > address ( ) . toString ( ) . c_str ( ) , with . toString ( ) . c_str ( ) , atAddr . toString ( ) . c_str ( ) ) ;
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_RENDEZVOUS , 0 , Packet : : VERB_NOP ) ;
RR - > sw - > rendezvous ( withPeer , atAddr ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_RENDEZVOUS , 0 , Packet : : VERB_NOP ) ;
RR - > sw - > rendezvous ( withPeer , _localInterfaceId , atAddr ) ;
} else {
TRACE ( " dropped corrupt RENDEZVOUS from %s(%s) (bad address or port) " , peer - > address ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) ) ;
}
@ -525,7 +525,7 @@ bool IncomingPacket::_doFRAME(const RuntimeEnvironment *RR,const SharedPtr<Peer>
RR - > node - > putFrame ( network - > id ( ) , MAC ( peer - > address ( ) , network - > id ( ) ) , network - > mac ( ) , etherType , 0 , field ( ZT_PROTO_VERB_FRAME_IDX_PAYLOAD , payloadLen ) , payloadLen ) ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_FRAME , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_FRAME , 0 , Packet : : VERB_NOP ) ;
} else {
TRACE ( " dropped FRAME from %s(%s): we are not connected to network %.16llx " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , at < uint64_t > ( ZT_PROTO_VERB_FRAME_IDX_NETWORK_ID ) ) ;
}
@ -602,7 +602,7 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,const SharedPtr<P
RR - > node - > putFrame ( network - > id ( ) , from , to , etherType , 0 , field ( comLen + ZT_PROTO_VERB_EXT_FRAME_IDX_PAYLOAD , payloadLen ) , payloadLen ) ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_EXT_FRAME , 0 , Packet : : VERB_NOP ) ;
} else {
TRACE ( " dropped EXT_FRAME from %s(%s): we are not connected to network %.16llx " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , at < uint64_t > ( ZT_PROTO_VERB_FRAME_IDX_NETWORK_ID ) ) ;
}
@ -623,7 +623,7 @@ bool IncomingPacket::_doMULTICAST_LIKE(const RuntimeEnvironment *RR,const Shared
for ( unsigned int ptr = ZT_PACKET_IDX_PAYLOAD ; ptr < size ( ) ; ptr + = 18 )
RR - > mc - > add ( now , at < uint64_t > ( ptr ) , MulticastGroup ( MAC ( field ( ptr + 8 , 6 ) , 6 ) , at < uint32_t > ( ptr + 14 ) ) , peer - > address ( ) ) ;
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_LIKE , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_LIKE , 0 , Packet : : VERB_NOP ) ;
} catch ( std : : exception & ex ) {
TRACE ( " dropped MULTICAST_LIKE from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , ex . what ( ) ) ;
} catch ( . . . ) {
@ -647,7 +647,7 @@ bool IncomingPacket::_doNETWORK_MEMBERSHIP_CERTIFICATE(const RuntimeEnvironment
}
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_MEMBERSHIP_CERTIFICATE , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_MEMBERSHIP_CERTIFICATE , 0 , Packet : : VERB_NOP ) ;
} catch ( std : : exception & ex ) {
TRACE ( " dropped NETWORK_MEMBERSHIP_CERTIFICATE from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , ex . what ( ) ) ;
} catch ( . . . ) {
@ -666,7 +666,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
const unsigned int h = hops ( ) ;
const uint64_t pid = packetId ( ) ;
peer - > received ( RR , _remoteAddress , h , pid , Packet : : VERB_NETWORK_CONFIG_REQUEST , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , h , pid , Packet : : VERB_NETWORK_CONFIG_REQUEST , 0 , Packet : : VERB_NOP ) ;
if ( RR - > localNetworkController ) {
Dictionary netconf ;
@ -688,7 +688,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
if ( outp . size ( ) > ZT_PROTO_MAX_PACKET_LENGTH ) {
TRACE ( " NETWORK_CONFIG_REQUEST failed: internal error: netconf size %u is too large " , ( unsigned int ) netconfStr . length ( ) ) ;
} else {
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
}
} break ;
@ -700,7 +700,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
outp . append ( ( unsigned char ) Packet : : ERROR_OBJ_NOT_FOUND ) ;
outp . append ( nwid ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
} break ;
case NetworkController : : NETCONF_QUERY_ACCESS_DENIED : {
@ -710,7 +710,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
outp . append ( ( unsigned char ) Packet : : ERROR_NETWORK_ACCESS_DENIED_ ) ;
outp . append ( nwid ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
} break ;
case NetworkController : : NETCONF_QUERY_INTERNAL_SERVER_ERROR :
@ -732,7 +732,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
outp . append ( ( unsigned char ) Packet : : ERROR_UNSUPPORTED_OPERATION ) ;
outp . append ( nwid ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
} catch ( std : : exception & exc ) {
TRACE ( " dropped NETWORK_CONFIG_REQUEST from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , exc . what ( ) ) ;
@ -753,7 +753,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REFRESH(const RuntimeEnvironment *RR,cons
nw - > requestConfiguration ( ) ;
ptr + = 8 ;
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_CONFIG_REFRESH , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_NETWORK_CONFIG_REFRESH , 0 , Packet : : VERB_NOP ) ;
} catch ( std : : exception & exc ) {
TRACE ( " dropped NETWORK_CONFIG_REFRESH from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , exc . what ( ) ) ;
} catch ( . . . ) {
@ -780,11 +780,11 @@ bool IncomingPacket::_doMULTICAST_GATHER(const RuntimeEnvironment *RR,const Shar
outp . append ( ( uint32_t ) mg . adi ( ) ) ;
if ( RR - > mc - > gather ( peer - > address ( ) , nwid , mg , outp , gatherLimit ) ) {
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
}
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_GATHER , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_GATHER , 0 , Packet : : VERB_NOP ) ;
} catch ( std : : exception & exc ) {
TRACE ( " dropped MULTICAST_GATHER from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , exc . what ( ) ) ;
} catch ( . . . ) {
@ -871,12 +871,12 @@ bool IncomingPacket::_doMULTICAST_FRAME(const RuntimeEnvironment *RR,const Share
outp . append ( ( unsigned char ) 0x02 ) ; // flag 0x02 = contains gather results
if ( RR - > mc - > gather ( peer - > address ( ) , nwid , to , outp , gatherLimit ) ) {
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
}
} // else ignore -- not a member of this network
peer - > received ( RR , _remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP ) ;
peer - > received ( RR , _localInterfaceId , _ remoteAddress , hops ( ) , packetId ( ) , Packet : : VERB_MULTICAST_FRAME , 0 , Packet : : VERB_NOP ) ;
} catch ( std : : exception & exc ) {
TRACE ( " dropped MULTICAST_FRAME from %s(%s): unexpected exception: %s " , source ( ) . toString ( ) . c_str ( ) , _remoteAddress . toString ( ) . c_str ( ) , exc . what ( ) ) ;
} catch ( . . . ) {
@ -905,14 +905,14 @@ bool IncomingPacket::_doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,const Sha
InetAddress a ( field ( ptr , 4 ) , 4 , at < uint16_t > ( ptr + 4 ) ) ;
if ( ( ( flags & ( 0x01 | 0x02 ) ) = = 0 ) & & ( Path : : isAddressValidForPath ( a ) ) ) {
TRACE ( " attempting to contact %s at pushed direct path %s " , peer - > address ( ) . toString ( ) . c_str ( ) , a . toString ( ) . c_str ( ) ) ;
peer - > attemptToContactAt ( RR , a , RR - > node - > now ( ) ) ;
peer - > attemptToContactAt ( RR , _localInterfaceId , a , RR - > node - > now ( ) ) ;
}
} break ;
case 6 : {
InetAddress a ( field ( ptr , 16 ) , 16 , at < uint16_t > ( ptr + 16 ) ) ;
if ( ( ( flags & ( 0x01 | 0x02 ) ) = = 0 ) & & ( Path : : isAddressValidForPath ( a ) ) ) {
TRACE ( " attempting to contact %s at pushed direct path %s " , peer - > address ( ) . toString ( ) . c_str ( ) , a . toString ( ) . c_str ( ) ) ;
peer - > attemptToContactAt ( RR , a , RR - > node - > now ( ) ) ;
peer - > attemptToContactAt ( RR , _localInterfaceId , a , RR - > node - > now ( ) ) ;
}
} break ;
}
@ -934,7 +934,7 @@ void IncomingPacket::_sendErrorNeedCertificate(const RuntimeEnvironment *RR,cons
outp . append ( ( unsigned char ) Packet : : ERROR_NEED_MEMBERSHIP_CERTIFICATE ) ;
outp . append ( nwid ) ;
outp . armor ( peer - > key ( ) , true ) ;
RR - > node - > putPacket ( _remoteAddress , outp . data ( ) , outp . size ( ) ) ;
RR - > node - > putPacket ( _localInterfaceId , _ remoteAddress , outp . data ( ) , outp . size ( ) ) ;
}
} // namespace ZeroTier