mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-07-16 10:03:14 -07:00
Testnet work... getting there!
This commit is contained in:
parent
0a195e7bc0
commit
4fbb098daa
11 changed files with 398 additions and 149 deletions
|
@ -40,50 +40,29 @@ SimNet::~SimNet()
|
|||
{
|
||||
}
|
||||
|
||||
SimNetSocketManager *newEndpoint()
|
||||
SimNetSocketManager *SimNet::newEndpoint(const InetAddress &addr)
|
||||
{
|
||||
Mutex::Lock _l(_lock);
|
||||
|
||||
if (_endpoints.size() >= ZT_SIMNET_MAX_TESTNET_SIZE)
|
||||
return (SimNetSocketManager *)0;
|
||||
if (_endpoints.find(addr) != _endpoints.end())
|
||||
return (SimNetSocketManager *)0;
|
||||
|
||||
InetAddress fake;
|
||||
uint32_t ip = _prng.next32();
|
||||
for(;;) {
|
||||
++ip;
|
||||
ip &= 0x00ffffff;
|
||||
ip |= 0x0a000000; // 10.x.x.x
|
||||
if (((ip >> 16) & 0xff) == 0xff) ip ^= 0x00010000;
|
||||
if (((ip >> 8) & 0xff) == 0xff) ip ^= 0x00000100;
|
||||
if ((ip & 0xff) == 0xff) --ip;
|
||||
if ((ip & 0xff) == 0x00) ++ip;
|
||||
uint32_t ipn = Utils::hton(ip);
|
||||
fake.set(&ipn,4,8); // 10.x.x.x/8
|
||||
if (_endpoints.find(fake) == _endpoints.end()) {
|
||||
SimNetSocketManager *sm = &(_endpoints[fake]);
|
||||
sm->_sn = this;
|
||||
sm->_address = fake;
|
||||
return sm;
|
||||
}
|
||||
}
|
||||
SimNetSocketManager *sm = new SimNetSocketManager();
|
||||
sm->_sn = this;
|
||||
sm->_address = addr;
|
||||
_endpoints[addr] = sm;
|
||||
return sm;
|
||||
}
|
||||
|
||||
SimNetSocketManager *get(const InetAddress &addr)
|
||||
SimNetSocketManager *SimNet::get(const InetAddress &addr)
|
||||
{
|
||||
Mutex::Lock _l(_lock);
|
||||
std::map< InetAddress,SimNetSocketManager >::iterator ep(_endpoints.find(addr));
|
||||
std::map< InetAddress,SimNetSocketManager * >::iterator ep(_endpoints.find(addr));
|
||||
if (ep == _endpoints.end())
|
||||
return (SimNetSocketManager *)0;
|
||||
return &(ep->second);
|
||||
}
|
||||
|
||||
std::vector<SimNetSocketManager *> SimNet::all()
|
||||
{
|
||||
std::vector<SimNetSocketManager *> a;
|
||||
Mutex::Lock _l(_lock);
|
||||
for (std::map< InetAddress,SimNetSocketManager >::iterator ep(_endpoints.begin());ep!=_endpoints.end();++ep)
|
||||
a.push_back(&(ep->second));
|
||||
return a;
|
||||
return ep->second;
|
||||
}
|
||||
|
||||
} // namespace ZeroTier
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue