summaryrefslogtreecommitdiff
path: root/testnet/SimNet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'testnet/SimNet.cpp')
-rw-r--r--testnet/SimNet.cpp43
1 files changed, 11 insertions, 32 deletions
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<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