Testnet work... getting there!

This commit is contained in:
Adam Ierymenko 2014-10-23 16:46:09 -07:00
parent 0a195e7bc0
commit 4fbb098daa
11 changed files with 398 additions and 149 deletions

View file

@ -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