From 4fbb098daa349a663015426d1210f1b59d0478c4 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 23 Oct 2014 16:46:09 -0700 Subject: Testnet work... getting there! --- testnet/SimNet.cpp | 43 +++++++++++-------------------------------- 1 file changed, 11 insertions(+), 32 deletions(-) (limited to 'testnet/SimNet.cpp') diff --git a/testnet/SimNet.cpp b/testnet/SimNet.cpp index a644a9bc..3349d5c2 100644 --- a/testnet/SimNet.cpp +++ b/testnet/SimNet.cpp @@ -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 SimNet::all() -{ - std::vector 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 -- cgit v1.2.3