diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-04 09:02:35 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-04 09:02:35 -0700 |
| commit | f057bb63cdc4bebc4608f4f2ed6da4656ddbc8a9 (patch) | |
| tree | 5cc5ca0eea2ddea5e06655c31292f906f53875a8 /node/Peer.hpp | |
| parent | 7e6e56e2bce240a8d3a4f2825d3f110109a541b6 (diff) | |
| download | infinitytier-f057bb63cdc4bebc4608f4f2ed6da4656ddbc8a9.tar.gz infinitytier-f057bb63cdc4bebc4608f4f2ed6da4656ddbc8a9.zip | |
More work on tags and capabilities.
Diffstat (limited to 'node/Peer.hpp')
| -rw-r--r-- | node/Peer.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/node/Peer.hpp b/node/Peer.hpp index d8c44ebe..8b50f429 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -40,8 +40,10 @@ #include "SharedPtr.hpp" #include "AtomicCounter.hpp" #include "Hashtable.hpp" +#include "Membership.hpp" #include "Mutex.hpp" #include "NonCopyable.hpp" +#include "LockingPtr.hpp" namespace ZeroTier { @@ -385,6 +387,34 @@ public: } /** + * Get the membership record for this network, possibly creating if missing + * + * @param networkId Network ID + * @param createIfMissing If true, create a Membership record if there isn't one + * @return Single-scope locking pointer (see LockingPtr.hpp) to Membership or NULL if not found and createIfMissing is false + */ + inline LockingPtr<Membership> membership(const uint64_t networkId,bool createIfMissing) + { + _memberships_m.lock(); + try { + if (createIfMissing) { + return LockingPtr<Membership>(&(_memberships[networkId]),&_memberships_m); + } else { + Membership *m = _memberships.get(networkId); + if (m) { + return LockingPtr<Membership>(m,&_memberships_m); + } else { + _memberships_m.unlock(); + return LockingPtr<Membership>(); + } + } + } catch ( ... ) { + _memberships_m.unlock(); + throw; + } + } + + /** * Find a common set of addresses by which two peers can link, if any * * @param a Peer A @@ -430,6 +460,9 @@ private: unsigned int _latency; unsigned int _directPathPushCutoffCount; + Hashtable<uint64_t,Membership> _memberships; + Mutex _memberships_m; + AtomicCounter __refCount; }; |
