summaryrefslogtreecommitdiff
path: root/node/Network.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Network.hpp')
-rw-r--r--node/Network.hpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/node/Network.hpp b/node/Network.hpp
index 527d3048..56c7fc60 100644
--- a/node/Network.hpp
+++ b/node/Network.hpp
@@ -181,11 +181,22 @@ public:
* chunks via OK(NETWORK_CONFIG_REQUEST) or NETWORK_CONFIG. It verifies
* each chunk and once assembled applies the configuration.
*
- * @param chunk Packet containing chunk
+ * @param packetId Packet ID or 0 if none (e.g. via cluster path)
+ * @param source Address of sender of chunk or NULL if none (e.g. via cluster path)
+ * @param chunk Buffer containing chunk
* @param ptr Index of chunk and related fields in packet
* @return Update ID if update was fully assembled and accepted or 0 otherwise
*/
- uint64_t handleConfigChunk(const Packet &chunk,unsigned int ptr);
+ uint64_t handleConfigChunk(const uint64_t packetId,const Address &source,const Buffer<ZT_PROTO_MAX_PACKET_LENGTH> &chunk,unsigned int ptr);
+
+ /**
+ * Set network configuration
+ *
+ * @param nconf Network configuration
+ * @param saveToDisk Save to disk? Used during loading, should usually be true otherwise.
+ * @return 0 == bad, 1 == accepted but duplicate/unchanged, 2 == accepted and new
+ */
+ int setConfiguration(const NetworkConfig &nconf,bool saveToDisk);
/**
* Set netconf failure to 'access denied' -- called in IncomingPacket when controller reports this
@@ -291,6 +302,17 @@ public:
Membership::AddCredentialResult addCredential(const Address &sentFrom,const Revocation &rev);
/**
+ * Validate a credential and learn it if it passes certificate and other checks
+ */
+ inline Membership::AddCredentialResult addCredential(const CertificateOfOwnership &coo)
+ {
+ if (coo.networkId() != _id)
+ return Membership::ADD_REJECTED;
+ Mutex::Lock _l(_lock);
+ return _membership(coo.issuedTo()).addCredential(RR,_config,coo);
+ }
+
+ /**
* Force push credentials (COM, etc.) to a peer now
*
* @param to Destination peer address
@@ -328,7 +350,6 @@ public:
inline void **userPtr() throw() { return &_uPtr; }
private:
- int _setConfiguration(const NetworkConfig &nconf,bool saveToDisk);
ZT_VirtualNetworkStatus _status() const;
void _externalConfig(ZT_VirtualNetworkConfig *ec) const; // assumes _lock is locked
bool _gate(const SharedPtr<Peer> &peer);