diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip
index de973bf13..a82263e20 100644
--- a/ext/installfiles/windows/ZeroTier One.aip
+++ b/ext/installfiles/windows/ZeroTier One.aip
@@ -27,10 +27,10 @@
-
+
-
+
@@ -64,7 +64,7 @@
-
+
@@ -82,7 +82,7 @@
-
+
@@ -454,10 +454,10 @@
-
+
-
+
diff --git a/node/CertificateOfOwnership.hpp b/node/CertificateOfOwnership.hpp
index bae7ef2f2..fdffec3b8 100644
--- a/node/CertificateOfOwnership.hpp
+++ b/node/CertificateOfOwnership.hpp
@@ -67,29 +67,18 @@ public:
THING_IPV6_ADDRESS = 3
};
- CertificateOfOwnership() :
- _networkId(0),
- _ts(0),
- _flags(0),
- _id(0),
- _thingCount(0)
+ CertificateOfOwnership()
{
- memset(_thingTypes,0,sizeof(_thingTypes));
- memset(_thingValues,0,sizeof(_thingValues));
- memset(_signature.data,0,sizeof(_signature.data));
+ memset(reinterpret_cast(this),0,sizeof(CertificateOfOwnership));
}
- CertificateOfOwnership(const uint64_t nwid,const int64_t ts,const Address &issuedTo,const uint32_t id) :
- _networkId(nwid),
- _ts(ts),
- _flags(0),
- _id(id),
- _thingCount(0),
- _issuedTo(issuedTo)
+ CertificateOfOwnership(const uint64_t nwid,const int64_t ts,const Address &issuedTo,const uint32_t id)
{
- memset(_thingTypes,0,sizeof(_thingTypes));
- memset(_thingValues,0,sizeof(_thingValues));
- memset(_signature.data,0,sizeof(_signature.data));
+ memset(reinterpret_cast(this),0,sizeof(CertificateOfOwnership));
+ _networkId = nwid;
+ _ts = ts;
+ _id = id;
+ _issuedTo = issuedTo;
}
inline uint64_t networkId() const { return _networkId; }
diff --git a/node/Network.cpp b/node/Network.cpp
index 92b106719..1e151b616 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -1036,7 +1036,7 @@ int Network::setConfiguration(void *tPtr,const NetworkConfig &nconf,bool saveToD
_portError = RR->node->configureVirtualNetworkPort(tPtr,_id,&_uPtr,(oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp);
if (saveToDisk) {
- Dictionary *d = new Dictionary();
+ Dictionary *const d = new Dictionary();
try {
if (nconf.toDictionary(*d,false)) {
uint64_t tmp[2];
@@ -1493,25 +1493,27 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu
void Network::_announceMulticastGroupsTo(void *tPtr,const Address &peer,const std::vector &allMulticastGroups)
{
// Assumes _lock is locked
- Packet outp(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
+ Packet *const outp = new Packet(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
for(std::vector::const_iterator mg(allMulticastGroups.begin());mg!=allMulticastGroups.end();++mg) {
- if ((outp.size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) {
- outp.compress();
- RR->sw->send(tPtr,outp,true);
- outp.reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
+ if ((outp->size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) {
+ outp->compress();
+ RR->sw->send(tPtr,*outp,true);
+ outp->reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
}
// network ID, MAC, ADI
- outp.append((uint64_t)_id);
- mg->mac().appendTo(outp);
- outp.append((uint32_t)mg->adi());
+ outp->append((uint64_t)_id);
+ mg->mac().appendTo(*outp);
+ outp->append((uint32_t)mg->adi());
}
- if (outp.size() > ZT_PROTO_MIN_PACKET_LENGTH) {
- outp.compress();
- RR->sw->send(tPtr,outp,true);
+ if (outp->size() > ZT_PROTO_MIN_PACKET_LENGTH) {
+ outp->compress();
+ RR->sw->send(tPtr,*outp,true);
}
+
+ delete outp;
}
std::vector Network::_allMulticastGroups() const
diff --git a/node/Path.hpp b/node/Path.hpp
index f0198bde5..ed3e907fc 100644
--- a/node/Path.hpp
+++ b/node/Path.hpp
@@ -442,7 +442,7 @@ public:
uint64_t id = it->first;
memcpy(qosBuffer, &id, sizeof(uint64_t));
qosBuffer+=sizeof(uint64_t);
- uint16_t holdingTime = (now - it->second);
+ uint16_t holdingTime = (uint16_t)(now - it->second);
memcpy(qosBuffer, &holdingTime, sizeof(uint16_t));
qosBuffer+=sizeof(uint16_t);
len+=sizeof(uint64_t)+sizeof(uint16_t);
@@ -594,11 +594,11 @@ public:
float throughput_cv = _throughputSamples.mean() > 0 ? _throughputSamples.stddev() / _throughputSamples.mean() : 1;
// Form an exponential cutoff and apply contribution weights
- float pdv_contrib = exp((-1)*normalized_pdv) * ZT_PATH_CONTRIB_PDV;
- float latency_contrib = exp((-1)*normalized_la) * ZT_PATH_CONTRIB_LATENCY;
+ float pdv_contrib = expf((-1.0f)*normalized_pdv) * (float)ZT_PATH_CONTRIB_PDV;
+ float latency_contrib = expf((-1.0f)*normalized_la) * (float)ZT_PATH_CONTRIB_LATENCY;
// Throughput Disturbance Coefficient
- float throughput_disturbance_contrib = exp((-1)*throughput_cv) * ZT_PATH_CONTRIB_THROUGHPUT_DISTURBANCE;
+ float throughput_disturbance_contrib = expf((-1.0f)*throughput_cv) * (float)ZT_PATH_CONTRIB_THROUGHPUT_DISTURBANCE;
_throughputDisturbanceSamples.push(throughput_cv);
_lastComputedThroughputDistCoeff = _throughputDisturbanceSamples.mean();
diff --git a/node/Peer.cpp b/node/Peer.cpp
index 029e45e71..cbd07799b 100644
--- a/node/Peer.cpp
+++ b/node/Peer.cpp
@@ -212,10 +212,10 @@ void Peer::received(
if (pathsToPush.size() > 0) {
std::vector::const_iterator p(pathsToPush.begin());
while (p != pathsToPush.end()) {
- Packet outp(_id.address(),RR->identity.address(),Packet::VERB_PUSH_DIRECT_PATHS);
- outp.addSize(2); // leave room for count
+ Packet *outp = new Packet(_id.address(),RR->identity.address(),Packet::VERB_PUSH_DIRECT_PATHS);
+ outp->addSize(2); // leave room for count
unsigned int count = 0;
- while ((p != pathsToPush.end())&&((outp.size() + 24) < 1200)) {
+ while ((p != pathsToPush.end())&&((outp->size() + 24) < 1200)) {
uint8_t addressType = 4;
switch(p->ss_family) {
case AF_INET:
@@ -228,22 +228,23 @@ void Peer::received(
continue;
}
- outp.append((uint8_t)0); // no flags
- outp.append((uint16_t)0); // no extensions
- outp.append(addressType);
- outp.append((uint8_t)((addressType == 4) ? 6 : 18));
- outp.append(p->rawIpData(),((addressType == 4) ? 4 : 16));
- outp.append((uint16_t)p->port());
+ outp->append((uint8_t)0); // no flags
+ outp->append((uint16_t)0); // no extensions
+ outp->append(addressType);
+ outp->append((uint8_t)((addressType == 4) ? 6 : 18));
+ outp->append(p->rawIpData(),((addressType == 4) ? 4 : 16));
+ outp->append((uint16_t)p->port());
++count;
++p;
}
if (count) {
- outp.setAt(ZT_PACKET_IDX_PAYLOAD,(uint16_t)count);
- outp.compress();
- outp.armor(_key,true);
- path->send(RR,tPtr,outp.data(),outp.size(),now);
+ outp->setAt(ZT_PACKET_IDX_PAYLOAD,(uint16_t)count);
+ outp->compress();
+ outp->armor(_key,true);
+ path->send(RR,tPtr,outp->data(),outp->size(),now);
}
+ delete outp;
}
}
}
@@ -300,13 +301,13 @@ void Peer::computeAggregateProportionalAllocation(int64_t now)
float age_contrib = exp((-1)*normalized_ma);
float relScope = ((float)(_paths[i].p->ipScope()+1) / (maxScope + 1));
float relQuality =
- (relStability[i] * ZT_PATH_CONTRIB_STABILITY)
- + (fmax(1, relThroughput[i]) * ZT_PATH_CONTRIB_THROUGHPUT)
- + relScope * ZT_PATH_CONTRIB_SCOPE;
+ (relStability[i] * (float)ZT_PATH_CONTRIB_STABILITY)
+ + (fmaxf(1.0f, relThroughput[i]) * (float)ZT_PATH_CONTRIB_THROUGHPUT)
+ + relScope * (float)ZT_PATH_CONTRIB_SCOPE;
relQuality *= age_contrib;
// Arbitrary cutoffs
- relQuality = relQuality > (1.00 / 100.0) ? relQuality : 0.0;
- relQuality = relQuality < (99.0 / 100.0) ? relQuality : 1.0;
+ relQuality = relQuality > (1.00f / 100.0f) ? relQuality : 0.0f;
+ relQuality = relQuality < (99.0f / 100.0f) ? relQuality : 1.0f;
totalRelativeQuality += relQuality;
_paths[i].p->updateRelativeQuality(relQuality);
}
@@ -479,8 +480,8 @@ char *Peer::interfaceListStr()
if (_paths[i].p && _paths[i].p->alive(now)) {
int ipv = _paths[i].p->address().isV4();
// If this is acting as an aggregate link, check allocations
- float targetAllocation = 1.0 / alivePathCount;
- float currentAllocation = 1.0;
+ float targetAllocation = 1.0f / (float)alivePathCount;
+ float currentAllocation = 1.0f;
if (alivePathCount > 1) {
currentAllocation = (float)_pathChoiceHist.countValue(i) / (float)_pathChoiceHist.count();
if (fabs(targetAllocation - currentAllocation) > ZT_PATH_IMBALANCE_THRESHOLD) {
diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp
index 10ffbb061..bf7aef282 100644
--- a/osdep/Binder.hpp
+++ b/osdep/Binder.hpp
@@ -389,7 +389,7 @@ public:
_bindings[_bindingCount].udpSock = udps;
_bindings[_bindingCount].tcpListenSock = tcps;
_bindings[_bindingCount].address = ii->first;
- phy.setIfName(udps, (char*)ii->second.c_str(), ii->second.length());
+ phy.setIfName(udps,(char*)ii->second.c_str(),(int)ii->second.length());
++_bindingCount;
}
} else {
diff --git a/service/OneService.cpp b/service/OneService.cpp
index b3d6739af..0043204c6 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -2449,17 +2449,22 @@ public:
return;
}
- if (len >= 0) {
+ if ((len >= 0)&&(data)) {
// Check to see if we've already written this first. This reduces
// redundant writes and I/O overhead on most platforms and has
// little effect on others.
f = fopen(p,"rb");
if (f) {
- char buf[65535];
- long l = (long)fread(buf,1,sizeof(buf),f);
- fclose(f);
- if ((l == (long)len)&&(memcmp(data,buf,l) == 0))
- return;
+ char *const buf = (char *)malloc(len*4);
+ if (buf) {
+ long l = (long)fread(buf,1,(size_t)(len*4),f);
+ fclose(f);
+ if ((l == (long)len)&&(memcmp(data,buf,l) == 0)) {
+ free(buf);
+ return;
+ }
+ free(buf);
+ }
}
f = fopen(p,"wb");
diff --git a/windows/ZeroTierOne.sln b/windows/ZeroTierOne.sln
index 1ccdf88b0..76d579a82 100644
--- a/windows/ZeroTierOne.sln
+++ b/windows/ZeroTierOne.sln
@@ -106,9 +106,9 @@ Global
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Build.0 = Release|Win32
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Deploy.0 = Release|Win32
- {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.ActiveCfg = Release|x64
- {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Build.0 = Release|x64
- {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Deploy.0 = Release|x64
+ {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.ActiveCfg = Release|Win32
+ {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Build.0 = Release|Win32
+ {B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Deploy.0 = Release|Win32
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|x64.ActiveCfg = Release|x64
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Any CPU.ActiveCfg = Release|Win32
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Mixed Platforms.ActiveCfg = Release|Win32
diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj
index 60c87d3b5..3f6397caf 100644
--- a/windows/ZeroTierOne/ZeroTierOne.vcxproj
+++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj
@@ -30,6 +30,8 @@
+
+
@@ -114,6 +116,8 @@
+
+
diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters
index f7df20343..1fcf7b693 100644
--- a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters
+++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters
@@ -258,6 +258,12 @@
Source Files\controller
+
+ Source Files\controller
+
+
+ Source Files\controller
+
@@ -494,6 +500,12 @@
Header Files\node
+
+ Header Files\controller
+
+
+ Header Files\controller
+