Procházet zdrojové kódy

Deserialize new style netconf.

Adam Ierymenko před 9 roky
rodič
revize
59eb09d063
2 změnil soubory, kde provedl 7 přidání a 3 odebrání
  1. 2 2
      node/Network.cpp
  2. 5 1
      node/NetworkConfig.hpp

+ 2 - 2
node/Network.cpp

@@ -186,8 +186,8 @@ int Network::setConfiguration(const void *confBytes,unsigned int confLen,bool sa
 
 		NetworkConfig newConfig;
 		if (reinterpret_cast<const uint8_t *>(confBytes)[0] == ZT_NETWORKCONFIG_V2_MARKER_BYTE) {
-			// TODO: deserialize new binary format netconf
-			return 0;
+			Buffer<8194> tmp(confBytes,confLen);
+			newConfig.deserialize(tmp,0);
 		} else {
 #ifdef ZT_SUPPORT_OLD_STYLE_NETCONF
 			newConfig.fromDictionary(reinterpret_cast<const char *>(confBytes),confLen); // throws if invalid

+ 5 - 1
node/NetworkConfig.hpp

@@ -529,6 +529,8 @@ public:
 			}
 		}
 
+		_com.serialize(b);
+
 		b.append((uint16_t)0); // extended bytes, currently 0 since unused
 	}
 
@@ -540,7 +542,7 @@ public:
 		unsigned int p = startAt;
 
 		if (b[p++] != ZT_NETWORKCONFIG_V2_MARKER_BYTE)
-			throw std::invalid_argument("use fromDictionary() for old style netconf deserialization");
+			throw std::invalid_argument("unrecognized format");
 		if (b.template at<uint16_t>(p) != 0)
 			throw std::invalid_argument("unrecognized version");
 		p += 2;
@@ -660,6 +662,8 @@ public:
 			p += rlen;
 		}
 
+		p += _com.deserialize(b,p);
+
 		p += b.template at<uint16_t>(p) + 2;
 
 		return (p - startAt);