summaryrefslogtreecommitdiff
path: root/node/Membership.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-08-08 16:50:00 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-08-08 16:50:00 -0700
commit8007ca56aaa2781e068ce9e3849a64b1e7bf7b8f (patch)
treeb6b77b62ad4938b9fedc8d12e0a0b050a3ffd57a /node/Membership.cpp
parent4d7f625aa10e422395f92520c645dff40ad83d3c (diff)
downloadinfinitytier-8007ca56aaa2781e068ce9e3849a64b1e7bf7b8f.tar.gz
infinitytier-8007ca56aaa2781e068ce9e3849a64b1e7bf7b8f.zip
Refactor and tie-up of capabilities and tags and packet evaluation points. Some optimization is possible here but it is minor and we will make it work first.
Diffstat (limited to 'node/Membership.cpp')
-rw-r--r--node/Membership.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/node/Membership.cpp b/node/Membership.cpp
index ec1713f0..79b1e1bc 100644
--- a/node/Membership.cpp
+++ b/node/Membership.cpp
@@ -36,10 +36,10 @@ bool Membership::sendCredentialsIfNeeded(const RuntimeEnvironment *RR,const uint
unsigned int appendedCaps = 0;
if (cap) {
capsAndTags.addSize(2);
- CState *const cs = _caps.get(cap->id());
- if ((now - cs->lastPushed) >= ZT_CREDENTIAL_PUSH_EVERY) {
+ std::map<uint32_t,CState>::iterator cs(_caps.find(cap->id()));
+ if ((cs != _caps.end())&&((now - cs->second.lastPushed) >= ZT_CREDENTIAL_PUSH_EVERY)) {
cap->serialize(capsAndTags);
- cs->lastPushed = now;
+ cs->second.lastPushed = now;
++appendedCaps;
}
capsAndTags.setAt<uint16_t>(0,(uint16_t)appendedCaps);
@@ -95,13 +95,13 @@ int Membership::addCredential(const RuntimeEnvironment *RR,const uint64_t now,co
{
if (tag.issuedTo() != RR->identity.address())
return -1;
- TState *t = _tags.get(tag.networkId());
+ TState *t = _tags.get(tag.id());
if ((t)&&(t->lastReceived != 0)&&(t->tag == tag))
return 0;
const int vr = tag.verify(RR);
if (vr == 0) {
if (!t)
- t = &(_tags[tag.networkId()]);
+ t = &(_tags[tag.id()]);
t->lastReceived = now;
t->tag = tag;
}
@@ -112,15 +112,19 @@ int Membership::addCredential(const RuntimeEnvironment *RR,const uint64_t now,co
{
if (!cap.wasIssuedTo(RR->identity.address()))
return -1;
- CState *c = _caps.get(cap.networkId());
- if ((c)&&(c->lastReceived != 0)&&(c->cap == cap))
+ std::map<uint32_t,CState>::iterator c(_caps.find(cap.id()));
+ if ((c != _caps.end())&&(c->second.lastReceived != 0)&&(c->second.cap == cap))
return 0;
const int vr = cap.verify(RR);
if (vr == 0) {
- if (!c)
- c = &(_caps[cap.networkId()]);
- c->lastReceived = now;
- c->cap = cap;
+ if (c == _caps.end()) {
+ CState &c2 = _caps[cap.id()];
+ c2.lastReceived = now;
+ c2.cap = cap;
+ } else {
+ c->second.lastReceived = now;
+ c->second.cap = cap;
+ }
}
return vr;
}