From 93b673043c48ec65b8c2133cd1f0b0256719613b Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 16 May 2016 18:37:37 -0700 Subject: [PATCH] Fix new binary meta-data deserialization and add some debug code (will disable later). --- node/Network.cpp | 3 +++ node/NetworkConfig.hpp | 38 ++++++++++++++++++++++++++- node/NetworkConfigRequestMetaData.hpp | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/node/Network.cpp b/node/Network.cpp index 8e9aecbd3..c1c3414d7 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -207,6 +207,9 @@ int Network::setConfiguration(const void *confBytes,unsigned int confLen,bool sa #endif } + if (!newConfig) + return 0; + { Mutex::Lock _l(_lock); if (_config == newConfig) diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 1bbf6506e..35382a3d7 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -353,6 +353,8 @@ public: template inline void serialize(Buffer &b) const { + printf("!!! sending\n"); + b.append((uint16_t)1); // version b.append((uint64_t)networkId); @@ -471,6 +473,8 @@ public: this->com.serialize(b); b.append((uint16_t)0); // extended bytes, currently 0 since unused + + dump(); } template @@ -478,6 +482,8 @@ public: { memset(this,0,sizeof(NetworkConfig)); + printf("!!! deserializing\n"); + unsigned int p = startAt; if (b.template at(p) != 1) @@ -493,7 +499,7 @@ public: type = (ZT_VirtualNetworkType)b[p++]; unsigned int nl = (unsigned int)b[p++]; - memcpy(this->name,b.field(p,nl),std::max(nl,(unsigned int)ZT_MAX_NETWORK_SHORT_NAME_LENGTH)); + memcpy(this->name,b.field(p,nl),std::min(nl,(unsigned int)ZT_MAX_NETWORK_SHORT_NAME_LENGTH)); p += nl; // _name will always be null terminated since field size is ZT_MAX_NETWORK_SHORT_NAME_LENGTH + 1 @@ -602,6 +608,7 @@ public: p += b.template at(p) + 2; + dump(); return (p - startAt); } @@ -609,6 +616,35 @@ public: void fromDictionary(const char *ds,unsigned int dslen); #endif + inline void dump() const + { + printf("networkId==%.16llx\n",networkId); + printf("timestamp==%llu\n",timestamp); + printf("revision==%llu\n",revision); + printf("issuedTo==%.10llx\n",issuedTo.toInt()); + printf("multicastLimit==%u\n",multicastLimit); + printf("flags=%.8lx\n",(unsigned long)flags); + printf("specialistCount==%u\n",specialistCount); + for(unsigned int i=0;i(&(routes[i].target))->toString().c_str()); + printf(" routes[i].via==%s\n",reinterpret_cast(&(routes[i].via))->toString().c_str()); + } + printf("staticIpCount==%u\n",staticIpCount); + for(unsigned int i=0;itoString().c_str()); + printf(" pinned[i].phy==%s\n",pinned[i].zt->toString().c_str()); + } + printf("ruleCount==%u\n",ruleCount); + printf("name==%s\n",name); + printf("com==%s\n",com.toString().c_str()); + } + /** * Network ID that this configuration applies to */ diff --git a/node/NetworkConfigRequestMetaData.hpp b/node/NetworkConfigRequestMetaData.hpp index 20fd80f1f..2516e5e0c 100644 --- a/node/NetworkConfigRequestMetaData.hpp +++ b/node/NetworkConfigRequestMetaData.hpp @@ -115,6 +115,7 @@ public: // Seek past old style meta-data while (b[p]) ++p; + ++p; if (b.template at(p) != 1) throw std::invalid_argument("unrecognized version");