summaryrefslogtreecommitdiff
path: root/node/Network.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-08-03 12:53:46 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-08-03 12:53:46 -0400
commitbf5c07f79a0f78e714fe47a5d1e09330022261ea (patch)
tree99b41a9e4f006a2ae742fb1d6eb66e0be2a19742 /node/Network.cpp
parent63fa4a684d15409e185422e7641e7c4680d19ec3 (diff)
downloadinfinitytier-bf5c07f79a0f78e714fe47a5d1e09330022261ea.tar.gz
infinitytier-bf5c07f79a0f78e714fe47a5d1e09330022261ea.zip
Scratch that... more work wiring up netconf. Got to handle OK.
Diffstat (limited to 'node/Network.cpp')
-rw-r--r--node/Network.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/node/Network.cpp b/node/Network.cpp
index a50d56dc..37761aff 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -57,7 +57,8 @@ static const std::string _DELTA_PREFIX("~");
bool Network::Certificate::qualifyMembership(const Network::Certificate &mc) const
{
// Note: optimization probably needed here, probably via some kind of
- // memoization / dynamic programming.
+ // memoization / dynamic programming. But make it work first, then make
+ // it fast.
for(const_iterator myField(begin());myField!=end();++myField) {
if (!((myField->first.length() > 1)&&(myField->first[0] == '~'))) { // ~fields are max delta range specs
@@ -104,8 +105,8 @@ Network::Network(const RuntimeEnvironment *renv,uint64_t id)
throw(std::runtime_error) :
_r(renv),
_tap(renv,renv->identity.address().toMAC(),ZT_IF_MTU,&_CBhandleTapData,this),
- _lastConfigUpdate(0),
- _id(id)
+ _id(id),
+ _lastConfigUpdate(0)
{
}
@@ -143,20 +144,23 @@ bool Network::isAllowed(const Address &peer) const
return _myCertificate.qualifyMembership(pc->second);
} catch (std::exception &exc) {
TRACE("isAllowed() check failed for peer %s: unexpected exception: %s",peer.toString().c_str(),exc.what());
- return false;
} catch ( ... ) {
TRACE("isAllowed() check failed for peer %s: unexpected exception: unknown exception",peer.toString().c_str());
- return false;
}
+ return false;
}
void Network::clean()
{
Mutex::Lock _l(_lock);
- for(std::map<Address,Certificate>::iterator i=(_membershipCertificates.begin());i!=_membershipCertificates.end();) {
- if (_myCertificate.qualifyMembership(i->second))
- ++i;
- else _membershipCertificates.erase(i++);
+ if (_configuration.isOpen())
+ _membershipCertificates.clear();
+ else {
+ for(std::map<Address,Certificate>::iterator i=(_membershipCertificates.begin());i!=_membershipCertificates.end();) {
+ if (_myCertificate.qualifyMembership(i->second))
+ ++i;
+ else _membershipCertificates.erase(i++);
+ }
}
}