|
|
|
|
@ -283,6 +283,24 @@ public:
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check whether we should do potentially expensive identity verification (rate limit) |
|
|
|
|
* |
|
|
|
|
* @param now Current time |
|
|
|
|
* @param from Source address of packet |
|
|
|
|
* @return True if within rate limits |
|
|
|
|
*/ |
|
|
|
|
inline bool rateGateIdentityVerification(const uint64_t now,const InetAddress &from) |
|
|
|
|
{ |
|
|
|
|
unsigned long iph = from.rateGateHash(); |
|
|
|
|
printf("%s %.4lx\n",from.toString().c_str(),iph); |
|
|
|
|
if ((now - _lastIdentityVerification[iph]) >= ZT_IDENTITY_VALIDATION_SOURCE_RATE_LIMIT) { |
|
|
|
|
_lastIdentityVerification[iph] = now; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
virtual void ncSendConfig(uint64_t nwid,uint64_t requestPacketId,const Address &destination,const NetworkConfig &nc,bool sendLegacyFormatConfig); |
|
|
|
|
virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode); |
|
|
|
|
|
|
|
|
|
@ -302,9 +320,13 @@ private:
|
|
|
|
|
|
|
|
|
|
void *_uPtr; // _uptr (lower case) is reserved in Visual Studio :P
|
|
|
|
|
|
|
|
|
|
// For tracking packet IDs to filter out OK/ERROR replies to packets we did not send
|
|
|
|
|
uint8_t _expectingRepliesToBucketPtr[ZT_EXPECTING_REPLIES_BUCKET_MASK1 + 1]; |
|
|
|
|
uint64_t _expectingRepliesTo[ZT_EXPECTING_REPLIES_BUCKET_MASK1 + 1][ZT_EXPECTING_REPLIES_BUCKET_MASK2 + 1]; |
|
|
|
|
|
|
|
|
|
// Time of last identity verification indexed by InetAddress.rateGateHash()
|
|
|
|
|
uint64_t _lastIdentityVerification[16384]; |
|
|
|
|
|
|
|
|
|
ZT_DataStoreGetFunction _dataStoreGetFunction; |
|
|
|
|
ZT_DataStorePutFunction _dataStorePutFunction; |
|
|
|
|
ZT_WirePacketSendFunction _wirePacketSendFunction; |
|
|
|
|
|