diff --git a/nonfree/controller/CV2.hpp b/nonfree/controller/CV2.hpp index c5679ae3..4e305014 100644 --- a/nonfree/controller/CV2.hpp +++ b/nonfree/controller/CV2.hpp @@ -2,7 +2,7 @@ * See LICENSE.txt in nonfree/ */ -include "DB.hpp" +#include "DB.hpp" #ifdef ZT_CONTROLLER_USE_LIBPQ @@ -19,80 +19,79 @@ include "DB.hpp" #include #include - namespace ZeroTier -{ - class CV2 : public DB { - friend class MemberNotificationReceiver; - friend class NetworkNotificationReceiver; - - public: - CV2(const Identity& myId, const char* path, int listenPort); - virtual ~CV2(); - - virtual bool waitForReady(); - virtual bool isReady(); - virtual bool save(nlohmann::json& record, bool notifyListeners); - virtual void eraseNetwork(const uint64_t networkId); - virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); - virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress& physicalAddress); - virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress& physicalAddress, const char* osArch); - virtual AuthInfo getSSOAuthInfo(const nlohmann::json& member, const std::string& redirectURL); - - virtual bool ready() +namespace ZeroTier { +class CV2 : public DB { + friend class MemberNotificationReceiver; + friend class NetworkNotificationReceiver; + + public: + CV2(const Identity& myId, const char* path, int listenPort); + virtual ~CV2(); + + virtual bool waitForReady(); + virtual bool isReady(); + virtual bool save(nlohmann::json& record, bool notifyListeners); + virtual void eraseNetwork(const uint64_t networkId); + virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); + virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress& physicalAddress); + virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress& physicalAddress, const char* osArch); + virtual AuthInfo getSSOAuthInfo(const nlohmann::json& member, const std::string& redirectURL); + + virtual bool ready() + { + return _ready == 2; + } + + protected: + struct _PairHasher { + inline std::size_t operator()(const std::pair& p) const { - return _ready == 2; + return (std::size_t)(p.first ^ p.second); } + }; + virtual void _memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners); - protected: - struct _PairHasher { - inline std::size_t operator()(const std::pair& p) const - { - return (std::size_t)(p.first ^ p.second); - } - }; - virtual void _memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners); - - virtual void _networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners); + virtual void _networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners); - private: - void initializeNetworks(); - void initializeMembers(); - void heartbeat(); - void membersDbWatcher(); - void networksDbWatcher(); + private: + void initializeNetworks(); + void initializeMembers(); + void heartbeat(); + void membersDbWatcher(); + void networksDbWatcher(); - void commitThread(); - void onlineNotificationThread(); + void commitThread(); + void onlineNotificationThread(); - // void notifyNewMember(const std::string &networkID, const std::string &memberID); + // void notifyNewMember(const std::string &networkID, const std::string &memberID); - enum OverrideMode { ALLOW_PGBOUNCER_OVERRIDE = 0, NO_OVERRIDE = 1 }; + enum OverrideMode { ALLOW_PGBOUNCER_OVERRIDE = 0, NO_OVERRIDE = 1 }; - std::shared_ptr > _pool; + std::shared_ptr > _pool; - const Identity _myId; - const Address _myAddress; - std::string _myAddressStr; - std::string _connString; + const Identity _myId; + const Address _myAddress; + std::string _myAddressStr; + std::string _connString; - BlockingQueue > _commitQueue; + BlockingQueue > _commitQueue; - std::thread _heartbeatThread; - std::thread _membersDbWatcher; - std::thread _networksDbWatcher; - std::thread _commitThread[ZT_CENTRAL_CONTROLLER_COMMIT_THREADS]; - std::thread _onlineNotificationThread; + std::thread _heartbeatThread; + std::thread _membersDbWatcher; + std::thread _networksDbWatcher; + std::thread _commitThread[ZT_CENTRAL_CONTROLLER_COMMIT_THREADS]; + std::thread _onlineNotificationThread; - std::unordered_map, NodeOnlineRecord, _PairHasher> _lastOnline; + std::unordered_map, NodeOnlineRecord, _PairHasher> _lastOnline; - mutable std::mutex _lastOnline_l; - mutable std::mutex _readyLock; - std::atomic _ready, _connected, _run; - mutable volatile bool _waitNoticePrinted; + mutable std::mutex _lastOnline_l; + mutable std::mutex _readyLock; + std::atomic _ready, _connected, _run; + mutable volatile bool _waitNoticePrinted; - int _listenPort; - uint8_t _ssoPsk[48]; - }; + int _listenPort; + uint8_t _ssoPsk[48]; +}; } // namespace ZeroTier