Adam Ierymenko 5 years ago
parent
commit
3fbfad5585

+ 0 - 3
.idea/.gitignore

@@ -1,3 +0,0 @@
-
-# Default ignored files
-/workspace.xml

+ 1 - 3
.idea/ZeroTierOne.iml

@@ -1,4 +1,2 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
-<module classpath="CMake" type="WEB_MODULE" version="4">
-  <component name="Go" enabled="true" />
-</module>
+<module classpath="CMake" type="CPP_MODULE" version="4" />

+ 0 - 5
.idea/codeStyles/codeStyleConfig.xml

@@ -1,5 +0,0 @@
-<component name="ProjectCodeStyleConfiguration">
-  <state>
-    <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
-  </state>
-</component>

+ 3 - 5
.idea/dictionaries/api.xml

@@ -1,11 +1,9 @@
 <component name="ProjectDictionaryState">
 <component name="ProjectDictionaryState">
   <dictionary name="api">
   <dictionary name="api">
     <words>
     <words>
-      <w>apisocket</w>
-      <w>nwid</w>
-      <w>secrand</w>
-      <w>sockaddr</w>
-      <w>unmarshals</w>
+      <w>accel</w>
+      <w>certificateofownership</w>
+      <w>multicast</w>
     </words>
     </words>
   </dictionary>
   </dictionary>
 </component>
 </component>

+ 0 - 10
.idea/inspectionProfiles/Project_Default.xml

@@ -1,10 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0">
-    <option name="myName" value="Project Default" />
-    <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
-      <option name="processCode" value="true" />
-      <option name="processLiterals" value="true" />
-      <option name="processComments" value="true" />
-    </inspection_tool>
-  </profile>
-</component>

+ 0 - 3
.idea/misc.xml

@@ -1,7 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
 <project version="4">
   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
-  <component name="JavaScriptSettings">
-    <option name="languageLevel" value="ES6" />
-  </component>
 </project>
 </project>

+ 0 - 29
.idea/watcherTasks.xml

@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectTasksOptions">
-    <TaskOptions isEnabled="true">
-      <option name="arguments" value="fmt $FilePath$" />
-      <option name="checkSyntaxErrors" value="true" />
-      <option name="description" />
-      <option name="exitCodeBehavior" value="ERROR" />
-      <option name="fileExtension" value="go" />
-      <option name="immediateSync" value="false" />
-      <option name="name" value="go fmt" />
-      <option name="output" value="$FilePath$" />
-      <option name="outputFilters">
-        <array />
-      </option>
-      <option name="outputFromStdout" value="false" />
-      <option name="program" value="$GoExecPath$" />
-      <option name="runOnExternalChanges" value="false" />
-      <option name="scopeName" value="Project Files" />
-      <option name="trackOnlyRoot" value="true" />
-      <option name="workingDir" value="$ProjectFileDir$" />
-      <envs>
-        <env name="GOROOT" value="$GOROOT$" />
-        <env name="GOPATH" value="$GOPATH$" />
-        <env name="PATH" value="$GoBinDirs$" />
-      </envs>
-    </TaskOptions>
-  </component>
-</project>

+ 2 - 3
node/AES.hpp

@@ -18,6 +18,8 @@
 #include "Utils.hpp"
 #include "Utils.hpp"
 #include "SHA512.hpp"
 #include "SHA512.hpp"
 
 
+#include <cstdint>
+
 #if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64))
 #if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64))
 
 
 #include <wmmintrin.h>
 #include <wmmintrin.h>
@@ -31,9 +33,6 @@ extern "C" void zt_crypt_ctr_aesni(const __m128i key[14],const uint8_t iv[16],co
 
 
 #endif // x64
 #endif // x64
 
 
-#define ZT_AES_KEY_SIZE 32
-#define ZT_AES_BLOCK_SIZE 16
-
 namespace ZeroTier {
 namespace ZeroTier {
 
 
 /**
 /**

+ 9 - 11
node/Address.hpp

@@ -14,11 +14,11 @@
 #ifndef ZT_ADDRESS_HPP
 #ifndef ZT_ADDRESS_HPP
 #define ZT_ADDRESS_HPP
 #define ZT_ADDRESS_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <math.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
+#include <cmath>
 
 
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
@@ -37,8 +37,7 @@ class Address
 {
 {
 public:
 public:
 	ZT_ALWAYS_INLINE Address() : _a(0) {}
 	ZT_ALWAYS_INLINE Address() : _a(0) {}
-	ZT_ALWAYS_INLINE Address(const Address &a) : _a(a._a) {}
-	ZT_ALWAYS_INLINE Address(uint64_t a) : _a(a & 0xffffffffffULL) {}
+	explicit ZT_ALWAYS_INLINE Address(uint64_t a) : _a(a & 0xffffffffffULL) {}
 
 
 	/**
 	/**
 	 * @param bits Raw address -- 5 bytes, big-endian byte order
 	 * @param bits Raw address -- 5 bytes, big-endian byte order
@@ -46,7 +45,6 @@ public:
 	 */
 	 */
 	ZT_ALWAYS_INLINE Address(const void *bits,unsigned int len) { setTo(bits,len); }
 	ZT_ALWAYS_INLINE Address(const void *bits,unsigned int len) { setTo(bits,len); }
 
 
-	ZT_ALWAYS_INLINE Address &operator=(const Address &a) { _a = a._a; return *this; }
 	ZT_ALWAYS_INLINE Address &operator=(const uint64_t a) { _a = (a & 0xffffffffffULL); return *this; }
 	ZT_ALWAYS_INLINE Address &operator=(const uint64_t a) { _a = (a & 0xffffffffffULL); return *this; }
 
 
 	/**
 	/**
@@ -137,9 +135,9 @@ public:
 	 */
 	 */
 	ZT_ALWAYS_INLINE uint8_t operator[](unsigned int i) const { return (uint8_t)(_a >> (32 - (i * 8))); }
 	ZT_ALWAYS_INLINE uint8_t operator[](unsigned int i) const { return (uint8_t)(_a >> (32 - (i * 8))); }
 
 
-	ZT_ALWAYS_INLINE operator unsigned int() const { return (unsigned int)_a; }
-	ZT_ALWAYS_INLINE operator unsigned long() const { return (unsigned long)_a; }
-	ZT_ALWAYS_INLINE operator unsigned long long() const { return (unsigned long long)_a; }
+	explicit ZT_ALWAYS_INLINE operator unsigned int() const { return (unsigned int)_a; }
+	explicit ZT_ALWAYS_INLINE operator unsigned long() const { return (unsigned long)_a; }
+	explicit ZT_ALWAYS_INLINE operator unsigned long long() const { return (unsigned long long)_a; }
 
 
 	ZT_ALWAYS_INLINE void zero() { _a = 0; }
 	ZT_ALWAYS_INLINE void zero() { _a = 0; }
 
 

+ 2 - 10
node/C25519.cpp

@@ -7,16 +7,11 @@ Derived from public domain code by D. J. Bernstein.
 // Modified very slightly for ZeroTier One by Adam Ierymenko
 // Modified very slightly for ZeroTier One by Adam Ierymenko
 // This code remains in the public domain.
 // This code remains in the public domain.
 
 
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdint>
+#include <cstring>
 
 
-#include "Constants.hpp"
 #include "C25519.hpp"
 #include "C25519.hpp"
 #include "SHA512.hpp"
 #include "SHA512.hpp"
-#include "Buffer.hpp"
-#include "Hashtable.hpp"
-#include "Mutex.hpp"
 
 
 #ifdef __WINDOWS__
 #ifdef __WINDOWS__
 #pragma warning(disable: 4146)
 #pragma warning(disable: 4146)
@@ -28,10 +23,7 @@ Derived from public domain code by D. J. Bernstein.
 
 
 namespace {
 namespace {
 
 
-#define crypto_int32 int32_t
 #define crypto_uint32 uint32_t
 #define crypto_uint32 uint32_t
-#define crypto_int64 int64_t
-#define crypto_uint64 uint64_t
 #define crypto_hash_sha512_BYTES 64
 #define crypto_hash_sha512_BYTES 64
 
 
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////

+ 3 - 3
node/Capability.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_CAPABILITY_HPP
 #ifndef ZT_CAPABILITY_HPP
 #define ZT_CAPABILITY_HPP
 #define ZT_CAPABILITY_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Credential.hpp"
 #include "Credential.hpp"

+ 2 - 2
node/CertificateOfMembership.hpp

@@ -14,8 +14,8 @@
 #ifndef ZT_CERTIFICATEOFMEMBERSHIP_HPP
 #ifndef ZT_CERTIFICATEOFMEMBERSHIP_HPP
 #define ZT_CERTIFICATEOFMEMBERSHIP_HPP
 #define ZT_CERTIFICATEOFMEMBERSHIP_HPP
 
 
-#include <stdint.h>
-#include <string.h>
+#include <cstdint>
+#include <cstring>
 
 
 #include <string>
 #include <string>
 #include <stdexcept>
 #include <stdexcept>

+ 4 - 4
node/CertificateOfOwnership.hpp

@@ -14,10 +14,10 @@
 #ifndef ZT_CERTIFICATEOFOWNERSHIP_HPP
 #ifndef ZT_CERTIFICATEOFOWNERSHIP_HPP
 #define ZT_CERTIFICATEOFOWNERSHIP_HPP
 #define ZT_CERTIFICATEOFOWNERSHIP_HPP
 
 
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Credential.hpp"
 #include "Credential.hpp"

+ 4 - 4
node/Credential.hpp

@@ -18,10 +18,10 @@
 #include <memory>
 #include <memory>
 #include <stdexcept>
 #include <stdexcept>
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 
 

+ 1 - 1
node/Dictionary.hpp

@@ -19,7 +19,7 @@
 #include "Buffer.hpp"
 #include "Buffer.hpp"
 #include "Address.hpp"
 #include "Address.hpp"
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
 namespace ZeroTier {
 namespace ZeroTier {
 
 

+ 3 - 4
node/ECC384.cpp

@@ -4,10 +4,9 @@
 // This code is under the BSD 2-clause license, not ZeroTier's license
 // This code is under the BSD 2-clause license, not ZeroTier's license
 //////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "ECC384.hpp"
 #include "ECC384.hpp"

+ 6 - 6
node/Endpoint.hpp

@@ -14,10 +14,10 @@
 #ifndef ZT_ENDPOINT_HPP
 #ifndef ZT_ENDPOINT_HPP
 #define ZT_ENDPOINT_HPP
 #define ZT_ENDPOINT_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "InetAddress.hpp"
 #include "InetAddress.hpp"
@@ -53,7 +53,7 @@ public:
 
 
 	ZT_ALWAYS_INLINE const InetAddress *sockaddr() const { return (_t == INETADDR) ? reinterpret_cast<const InetAddress *>(&_v.sa) : nullptr; }
 	ZT_ALWAYS_INLINE const InetAddress *sockaddr() const { return (_t == INETADDR) ? reinterpret_cast<const InetAddress *>(&_v.sa) : nullptr; }
 	ZT_ALWAYS_INLINE const char *dnsName() const { return (_t == DNSNAME) ? _v.dns.name : nullptr; }
 	ZT_ALWAYS_INLINE const char *dnsName() const { return (_t == DNSNAME) ? _v.dns.name : nullptr; }
-	ZT_ALWAYS_INLINE const int dnsPort() const { return (_t == DNSNAME) ? _v.dns.port : -1; }
+	ZT_ALWAYS_INLINE int dnsPort() const { return (_t == DNSNAME) ? _v.dns.port : -1; }
 	ZT_ALWAYS_INLINE Address ztAddress() const { return (_t == ZEROTIER) ? Address(_v.zt.a) : Address(); }
 	ZT_ALWAYS_INLINE Address ztAddress() const { return (_t == ZEROTIER) ? Address(_v.zt.a) : Address(); }
 	ZT_ALWAYS_INLINE const uint8_t *ztIdentityHash() const { return (_t == ZEROTIER) ? _v.zt.idh : nullptr; }
 	ZT_ALWAYS_INLINE const uint8_t *ztIdentityHash() const { return (_t == ZEROTIER) ? _v.zt.idh : nullptr; }
 	ZT_ALWAYS_INLINE const char *url() const { return (_t == URL) ? _v.url : nullptr; }
 	ZT_ALWAYS_INLINE const char *url() const { return (_t == URL) ? _v.url : nullptr; }
@@ -140,7 +140,7 @@ public:
 					}
 					}
 					++p;
 					++p;
 					if ((p >= (ZT_ENDPOINT_MAX_NAME_SIZE+1))||(p >= (len-2)))
 					if ((p >= (ZT_ENDPOINT_MAX_NAME_SIZE+1))||(p >= (len-2)))
-						return;
+						return -1;
 				}
 				}
 				_v.dns.port = ((int)data[p++]) << 8;
 				_v.dns.port = ((int)data[p++]) << 8;
 				_v.dns.port |= (int)data[p++];
 				_v.dns.port |= (int)data[p++];

+ 2 - 2
node/Identity.hpp

@@ -14,8 +14,8 @@
 #ifndef ZT_IDENTITY_HPP
 #ifndef ZT_IDENTITY_HPP
 #define ZT_IDENTITY_HPP
 #define ZT_IDENTITY_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Utils.hpp"
 #include "Utils.hpp"

+ 2 - 3
node/IncomingPacket.cpp

@@ -29,9 +29,8 @@
 #include "Revocation.hpp"
 #include "Revocation.hpp"
 #include "Trace.hpp"
 #include "Trace.hpp"
 
 
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
+#include <cstring>
+#include <cstdlib>
 
 
 #include <list>
 #include <list>
 
 

+ 0 - 2
node/IncomingPacket.hpp

@@ -14,8 +14,6 @@
 #ifndef ZT_INCOMINGPACKET_HPP
 #ifndef ZT_INCOMINGPACKET_HPP
 #define ZT_INCOMINGPACKET_HPP
 #define ZT_INCOMINGPACKET_HPP
 
 
-#include <stdexcept>
-
 #include "Packet.hpp"
 #include "Packet.hpp"
 #include "Path.hpp"
 #include "Path.hpp"
 #include "Utils.hpp"
 #include "Utils.hpp"

+ 3 - 3
node/InetAddress.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_INETADDRESS_HPP
 #ifndef ZT_INETADDRESS_HPP
 #define ZT_INETADDRESS_HPP
 #define ZT_INETADDRESS_HPP
 
 
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
+#include <cstdlib>
+#include <cstring>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "../include/ZeroTierOne.h"
 #include "../include/ZeroTierOne.h"

+ 3 - 3
node/MAC.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_MAC_HPP
 #ifndef ZT_MAC_HPP
 #define ZT_MAC_HPP
 #define ZT_MAC_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Utils.hpp"
 #include "Utils.hpp"

+ 3 - 7
node/Membership.hpp

@@ -14,10 +14,11 @@
 #ifndef ZT_MEMBERSHIP_HPP
 #ifndef ZT_MEMBERSHIP_HPP
 #define ZT_MEMBERSHIP_HPP
 #define ZT_MEMBERSHIP_HPP
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
-#include "Constants.hpp"
 #include "../include/ZeroTierOne.h"
 #include "../include/ZeroTierOne.h"
+
+#include "Constants.hpp"
 #include "Credential.hpp"
 #include "Credential.hpp"
 #include "Hashtable.hpp"
 #include "Hashtable.hpp"
 #include "CertificateOfMembership.hpp"
 #include "CertificateOfMembership.hpp"
@@ -97,11 +98,6 @@ public:
 		return nconf.com.agreesWith(_com); // check timestamp agreement window
 		return nconf.com.agreesWith(_com); // check timestamp agreement window
 	}
 	}
 
 
-	/**
-	 * @return True if this peer has sent us a valid certificate within ZT_PEER_ACTIVITY_TIMEOUT
-	 */
-	inline bool recentlyAssociated(const int64_t now) const { return ((_com)&&((now - _com.timestamp()) < ZT_PEER_ACTIVITY_TIMEOUT)); }
-
 	/**
 	/**
 	 * Check whether the peer represented by this Membership owns a given address
 	 * Check whether the peer represented by this Membership owns a given address
 	 *
 	 *

+ 1 - 1
node/MulticastGroup.hpp

@@ -14,7 +14,7 @@
 #ifndef ZT_MULTICASTGROUP_HPP
 #ifndef ZT_MULTICASTGROUP_HPP
 #define ZT_MULTICASTGROUP_HPP
 #define ZT_MULTICASTGROUP_HPP
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "MAC.hpp"
 #include "MAC.hpp"

+ 3 - 3
node/Mutex.hpp

@@ -16,10 +16,11 @@
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 
 
+#include <cstdint>
+#include <cstdlib>
+
 #ifdef __UNIX_LIKE__
 #ifdef __UNIX_LIKE__
 
 
-#include <stdint.h>
-#include <stdlib.h>
 #include <pthread.h>
 #include <pthread.h>
 
 
 namespace ZeroTier {
 namespace ZeroTier {
@@ -56,7 +57,6 @@ private:
 
 
 #ifdef __WINDOWS__
 #ifdef __WINDOWS__
 
 
-#include <stdlib.h>
 #include <Windows.h>
 #include <Windows.h>
 
 
 namespace ZeroTier {
 namespace ZeroTier {

+ 4 - 4
node/Network.cpp

@@ -11,10 +11,10 @@
  */
  */
 /****/
 /****/
 
 
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
+#include <cstdio>
+#include <cstring>
+#include <cstdlib>
+#include <cmath>
 
 
 #include "../include/ZeroTierDebug.h"
 #include "../include/ZeroTierDebug.h"
 
 

+ 1 - 1
node/Network.hpp

@@ -14,7 +14,7 @@
 #ifndef ZT_NETWORK_HPP
 #ifndef ZT_NETWORK_HPP
 #define ZT_NETWORK_HPP
 #define ZT_NETWORK_HPP
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
 #include "../include/ZeroTierOne.h"
 #include "../include/ZeroTierOne.h"
 
 

+ 1 - 1
node/NetworkConfig.cpp

@@ -11,7 +11,7 @@
  */
  */
 /****/
 /****/
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
 #include <algorithm>
 #include <algorithm>
 
 

+ 3 - 3
node/NetworkConfig.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_NETWORKCONFIG_HPP
 #ifndef ZT_NETWORKCONFIG_HPP
 #define ZT_NETWORKCONFIG_HPP
 #define ZT_NETWORKCONFIG_HPP
 
 
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
+#include <cstdint>
+#include <cstring>
+#include <cstdlib>
 
 
 #include <vector>
 #include <vector>
 #include <stdexcept>
 #include <stdexcept>

+ 1 - 1
node/NetworkController.hpp

@@ -14,7 +14,7 @@
 #ifndef ZT_NETWORKCONFIGMASTER_HPP
 #ifndef ZT_NETWORKCONFIGMASTER_HPP
 #define ZT_NETWORKCONFIGMASTER_HPP
 #define ZT_NETWORKCONFIGMASTER_HPP
 
 
-#include <stdint.h>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Dictionary.hpp"
 #include "Dictionary.hpp"

+ 3 - 3
node/Node.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_NODE_HPP
 #ifndef ZT_NODE_HPP
 #define ZT_NODE_HPP
 #define ZT_NODE_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 
 
 #include <map>
 #include <map>
 #include <vector>
 #include <vector>

+ 3 - 3
node/Packet.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_N_PACKET_HPP
 #ifndef ZT_N_PACKET_HPP
 #define ZT_N_PACKET_HPP
 #define ZT_N_PACKET_HPP
 
 
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
+#include <cstdint>
+#include <cstring>
+#include <cstdio>
 
 
 #include <string>
 #include <string>
 #include <iostream>
 #include <iostream>

+ 3 - 3
node/Path.hpp

@@ -14,9 +14,9 @@
 #ifndef ZT_PATH_HPP
 #ifndef ZT_PATH_HPP
 #define ZT_PATH_HPP
 #define ZT_PATH_HPP
 
 
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
+#include <cstdint>
+#include <cstring>
+#include <cstdlib>
 
 
 #include <stdexcept>
 #include <stdexcept>
 #include <algorithm>
 #include <algorithm>

+ 1 - 4
node/Poly1305.cpp

@@ -7,10 +7,7 @@ Public domain.
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Poly1305.hpp"
 #include "Poly1305.hpp"
 
 
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstring>
 
 
 #ifdef __WINDOWS__
 #ifdef __WINDOWS__
 #pragma warning(disable: 4146)
 #pragma warning(disable: 4146)

+ 4 - 4
node/Revocation.hpp

@@ -14,10 +14,10 @@
 #ifndef ZT_REVOCATION_HPP
 #ifndef ZT_REVOCATION_HPP
 #define ZT_REVOCATION_HPP
 #define ZT_REVOCATION_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cstdint>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "../include/ZeroTierOne.h"
 #include "../include/ZeroTierOne.h"

+ 2 - 3
node/RingBuffer.hpp

@@ -16,10 +16,9 @@
 
 
 #include <typeinfo>
 #include <typeinfo>
 #include <cstdint>
 #include <cstdint>
-#include <stdlib.h>
-#include <memory.h>
+#include <cstdlib>
+#include <cmath>
 #include <algorithm>
 #include <algorithm>
-#include <math.h>
 
 
 namespace ZeroTier {
 namespace ZeroTier {
 
 

+ 3 - 3
node/SHA512.cpp

@@ -1,8 +1,8 @@
 // This code is public domain, taken from a PD crypto source file on GitHub.
 // This code is public domain, taken from a PD crypto source file on GitHub.
 
 
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
 
 
 #include "SHA512.hpp"
 #include "SHA512.hpp"
 #include "Utils.hpp"
 #include "Utils.hpp"

+ 7 - 7
node/Salsa20.hpp

@@ -7,10 +7,10 @@
 #ifndef ZT_SALSA20_HPP
 #ifndef ZT_SALSA20_HPP
 #define ZT_SALSA20_HPP
 #define ZT_SALSA20_HPP
 
 
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Utils.hpp"
 #include "Utils.hpp"
@@ -30,14 +30,14 @@ namespace ZeroTier {
 class Salsa20
 class Salsa20
 {
 {
 public:
 public:
-	inline Salsa20() {}
-	inline ~Salsa20() { Utils::burn(&_state,sizeof(_state)); }
+	ZT_ALWAYS_INLINE Salsa20() {}
+	ZT_ALWAYS_INLINE ~Salsa20() { Utils::burn(&_state,sizeof(_state)); }
 
 
 	/**
 	/**
 	 * @param key 256-bit (32 byte) key
 	 * @param key 256-bit (32 byte) key
 	 * @param iv 64-bit initialization vector
 	 * @param iv 64-bit initialization vector
 	 */
 	 */
-	inline Salsa20(const void *key,const void *iv) { init(key,iv); }
+	ZT_ALWAYS_INLINE Salsa20(const void *key,const void *iv) { init(key,iv); }
 
 
 	/**
 	/**
 	 * Initialize cipher
 	 * Initialize cipher

+ 2 - 2
node/ScopedPtr.hpp

@@ -27,12 +27,12 @@ template<typename T>
 class ScopedPtr
 class ScopedPtr
 {
 {
 public:
 public:
-	ZT_ALWAYS_INLINE ScopedPtr(T *const p) : _p(p) {}
+	explicit ZT_ALWAYS_INLINE ScopedPtr(T *const p) : _p(p) {}
 	ZT_ALWAYS_INLINE ~ScopedPtr() { delete _p; }
 	ZT_ALWAYS_INLINE ~ScopedPtr() { delete _p; }
 
 
 	ZT_ALWAYS_INLINE T *operator->() const { return _p; }
 	ZT_ALWAYS_INLINE T *operator->() const { return _p; }
 	ZT_ALWAYS_INLINE T &operator*() const { return *_p; }
 	ZT_ALWAYS_INLINE T &operator*() const { return *_p; }
-	ZT_ALWAYS_INLINE operator bool() const { return (_p != (T *)0); }
+	explicit ZT_ALWAYS_INLINE operator bool() const { return (_p != (T *)0); }
 	ZT_ALWAYS_INLINE T *ptr() const { return _p; }
 	ZT_ALWAYS_INLINE T *ptr() const { return _p; }
 
 
 	ZT_ALWAYS_INLINE bool operator==(const ScopedPtr &p) const { return (_p == p._p); }
 	ZT_ALWAYS_INLINE bool operator==(const ScopedPtr &p) const { return (_p == p._p); }

+ 2 - 4
node/SelfAwareness.cpp

@@ -11,12 +11,10 @@
  */
  */
 /****/
 /****/
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdlib>
+#include <cstring>
 
 
 #include <set>
 #include <set>
-#include <vector>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "SelfAwareness.hpp"
 #include "SelfAwareness.hpp"

+ 2 - 2
node/Switch.cpp

@@ -11,8 +11,8 @@
  */
  */
 /****/
 /****/
 
 
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
 
 
 #include <algorithm>
 #include <algorithm>
 #include <utility>
 #include <utility>

+ 4 - 4
node/Tag.hpp

@@ -14,10 +14,10 @@
 #ifndef ZT_TAG_HPP
 #ifndef ZT_TAG_HPP
 #define ZT_TAG_HPP
 #define ZT_TAG_HPP
 
 
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 #include "Credential.hpp"
 #include "Credential.hpp"

+ 2 - 2
node/Topology.hpp

@@ -14,8 +14,8 @@
 #ifndef ZT_TOPOLOGY_HPP
 #ifndef ZT_TOPOLOGY_HPP
 #define ZT_TOPOLOGY_HPP
 #define ZT_TOPOLOGY_HPP
 
 
-#include <stdio.h>
-#include <string.h>
+#include <cstdio>
+#include <cstring>
 
 
 #include <vector>
 #include <vector>
 #include <algorithm>
 #include <algorithm>

+ 4 - 4
node/Trace.hpp

@@ -14,10 +14,10 @@
 #ifndef ZT_TRACE_HPP
 #ifndef ZT_TRACE_HPP
 #define ZT_TRACE_HPP
 #define ZT_TRACE_HPP
 
 
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdint>
+#include <cstring>
+#include <cstdlib>
 
 
 #include "../include/ZeroTierOne.h"
 #include "../include/ZeroTierOne.h"
 
 

+ 3 - 21
node/Utils.cpp

@@ -11,23 +11,16 @@
  */
  */
 /****/
 /****/
 
 
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <time.h>
-#include <sys/stat.h>
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
 
 
 #include "Constants.hpp"
 #include "Constants.hpp"
 
 
 #ifdef __UNIX_LIKE__
 #ifdef __UNIX_LIKE__
 #include <unistd.h>
 #include <unistd.h>
-#include <errno.h>
 #include <fcntl.h>
 #include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include <sys/uio.h>
 #include <sys/uio.h>
-#include <dirent.h>
 #endif
 #endif
 
 
 #ifdef __WINDOWS__
 #ifdef __WINDOWS__
@@ -36,7 +29,6 @@
 
 
 #include "Utils.hpp"
 #include "Utils.hpp"
 #include "Mutex.hpp"
 #include "Mutex.hpp"
-#include "Salsa20.hpp"
 #include "AES.hpp"
 #include "AES.hpp"
 #include "SHA512.hpp"
 #include "SHA512.hpp"
 
 
@@ -105,16 +97,6 @@ char *decimal(unsigned long n,char s[24])
 	return s;
 	return s;
 }
 }
 
 
-unsigned short crc16(const void *buf,unsigned int len)
-{
-	static const uint16_t crc16tab[256]= { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0 };
-	uint16_t crc = 0;
-	const uint8_t *p = (const uint8_t *)buf;
-	for(unsigned int i=0;i<len;++i)
-		crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *(p++)) & 0x00ff];
-	return crc;
-}
-
 char *hex10(uint64_t i,char s[11])
 char *hex10(uint64_t i,char s[11])
 {
 {
 	s[0] = HEXCHARS[(i >> 36) & 0xf];
 	s[0] = HEXCHARS[(i >> 36) & 0xf];

+ 6 - 11
node/Utils.hpp

@@ -14,11 +14,11 @@
 #ifndef ZT_UTILS_HPP
 #ifndef ZT_UTILS_HPP
 #define ZT_UTILS_HPP
 #define ZT_UTILS_HPP
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <time.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
+#include <ctime>
 
 
 #include <string>
 #include <string>
 #include <stdexcept>
 #include <stdexcept>
@@ -34,7 +34,7 @@ namespace Utils {
 /**
 /**
  * Hexadecimal characters 0-f
  * Hexadecimal characters 0-f
  */
  */
-const char HEXCHARS[16];
+extern const char HEXCHARS[16];
 
 
 /**
 /**
  * Perform a time-invariant binary comparison
  * Perform a time-invariant binary comparison
@@ -58,11 +58,6 @@ void burn(void *ptr,unsigned int len);
  */
  */
 char *decimal(unsigned long n,char s[24]);
 char *decimal(unsigned long n,char s[24]);
 
 
-/**
- * Compute CRC16-CCITT
- */
-uint16_t crc16(const void *buf,unsigned int len);
-
 /**
 /**
  * Convert an unsigned integer into hex
  * Convert an unsigned integer into hex
  *
  *