Browse Source

First pass of Windows cleanup and build fixes...

Adam Ierymenko 10 years ago
parent
commit
54954f5b88

+ 1 - 0
ext/json-parser/json.c

@@ -33,6 +33,7 @@
    #ifndef _CRT_SECURE_NO_WARNINGS
       #define _CRT_SECURE_NO_WARNINGS
    #endif
+   #pragma warning(disable:4996)
 #endif
 
 const struct _json_value json_value_none;

+ 4 - 1
node/BandwidthAccount.hpp

@@ -28,10 +28,13 @@
 #ifndef ZT_BWACCOUNT_HPP
 #define ZT_BWACCOUNT_HPP
 
+#include "Constants.hpp"
+
+#include <algorithm>
+
 #include <stdint.h>
 #include <math.h>
 
-#include "Constants.hpp"
 #include "Utils.hpp"
 
 #ifdef __WINDOWS__

+ 2 - 0
node/Constants.hpp

@@ -91,7 +91,9 @@
 #ifndef __WINDOWS__
 #define __WINDOWS__
 #endif
+#ifndef NOMINMAX
 #define NOMINMAX
+#endif
 #pragma warning(disable : 4290)
 #pragma warning(disable : 4996)
 #pragma warning(disable : 4101)

+ 2 - 2
node/Node.cpp

@@ -60,7 +60,7 @@ Node::Node(
 	ZT1_EventCallback eventCallback,
 	const char *overrideRootTopology) :
 	RR(new RuntimeEnvironment(this)),
-	_uptr(uptr),
+	_uPtr(uptr),
 	_dataStoreGetFunction(dataStoreGetFunction),
 	_dataStorePutFunction(dataStorePutFunction),
 	_wirePacketSendFunction(wirePacketSendFunction),
@@ -426,7 +426,7 @@ std::string Node::dataStoreGet(const char *name)
 	std::string r;
 	unsigned long olen = 0;
 	do {
-		long n = _dataStoreGetFunction(reinterpret_cast<ZT1_Node *>(this),_uptr,name,buf,sizeof(buf),r.length(),&olen);
+		long n = _dataStoreGetFunction(reinterpret_cast<ZT1_Node *>(this),_uPtr,name,buf,sizeof(buf),r.length(),&olen);
 		if (n <= 0)
 			return std::string();
 		r.append(buf,n);

+ 7 - 7
node/Node.hpp

@@ -127,7 +127,7 @@ public:
 	{
 		return (_wirePacketSendFunction(
 			reinterpret_cast<ZT1_Node *>(this),
-			_uptr,
+			_uPtr,
 			reinterpret_cast<const struct sockaddr_storage *>(&addr),
 			desperation,
 			data,
@@ -149,7 +149,7 @@ public:
 	{
 		_virtualNetworkFrameFunction(
 			reinterpret_cast<ZT1_Node *>(this),
-			_uptr,
+			_uPtr,
 			nwid,
 			source.toInt(),
 			dest.toInt(),
@@ -192,9 +192,9 @@ public:
 	 */
 	inline unsigned int coreDesperation() const throw() { return _coreDesperation; }
 
-	inline bool dataStorePut(const char *name,const void *data,unsigned int len,bool secure) { return (_dataStorePutFunction(reinterpret_cast<ZT1_Node *>(this),_uptr,name,data,len,(int)secure) == 0); }
+	inline bool dataStorePut(const char *name,const void *data,unsigned int len,bool secure) { return (_dataStorePutFunction(reinterpret_cast<ZT1_Node *>(this),_uPtr,name,data,len,(int)secure) == 0); }
 	inline bool dataStorePut(const char *name,const std::string &data,bool secure) { return dataStorePut(name,(const void *)data.data(),(unsigned int)data.length(),secure); }
-	inline void dataStoreDelete(const char *name) { _dataStorePutFunction(reinterpret_cast<ZT1_Node *>(this),_uptr,name,(const void *)0,0,0); }
+	inline void dataStoreDelete(const char *name) { _dataStorePutFunction(reinterpret_cast<ZT1_Node *>(this),_uPtr,name,(const void *)0,0,0); }
 	std::string dataStoreGet(const char *name);
 
 	/**
@@ -203,7 +203,7 @@ public:
 	 * @param ev Event type
 	 * @param md Meta-data (default: NULL/none)
 	 */
-	inline void postEvent(ZT1_Event ev,const void *md = (const void *)0) { _eventCallback(reinterpret_cast<ZT1_Node *>(this),_uptr,ev,md); }
+	inline void postEvent(ZT1_Event ev,const void *md = (const void *)0) { _eventCallback(reinterpret_cast<ZT1_Node *>(this),_uPtr,ev,md); }
 
 	/**
 	 * Update virtual network port configuration
@@ -212,7 +212,7 @@ public:
 	 * @param op Configuration operation
 	 * @param nc Network configuration
 	 */
-	inline int configureVirtualNetworkPort(uint64_t nwid,ZT1_VirtualNetworkConfigOperation op,const ZT1_VirtualNetworkConfig *nc) { return _virtualNetworkConfigFunction(reinterpret_cast<ZT1_Node *>(this),_uptr,nwid,op,nc); }
+	inline int configureVirtualNetworkPort(uint64_t nwid,ZT1_VirtualNetworkConfigOperation op,const ZT1_VirtualNetworkConfig *nc) { return _virtualNetworkConfigFunction(reinterpret_cast<ZT1_Node *>(this),_uPtr,nwid,op,nc); }
 
 	/**
 	 * @return True if we appear to be online
@@ -231,7 +231,7 @@ public:
 private:
 	RuntimeEnvironment *RR;
 
-	void *_uptr;
+	void *_uPtr; // _uptr (lower case) is reserved in Visual Studio :P
 
 	ZT1_DataStoreGetFunction _dataStoreGetFunction;
 	ZT1_DataStorePutFunction _dataStorePutFunction;

+ 2 - 1
node/Peer.hpp

@@ -30,6 +30,8 @@
 
 #include <stdint.h>
 
+#include "Constants.hpp"
+
 #include <algorithm>
 #include <utility>
 #include <vector>
@@ -37,7 +39,6 @@
 
 #include "../include/ZeroTierOne.h"
 
-#include "Constants.hpp"
 #include "RuntimeEnvironment.hpp"
 #include "Path.hpp"
 #include "Address.hpp"

+ 25 - 86
windows/ZeroTierOne/ZeroTierOne.vcxproj

@@ -19,87 +19,40 @@
     </ProjectConfiguration>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\control\IpcConnection.cpp" />
-    <ClCompile Include="..\..\control\IpcListener.cpp" />
-    <ClCompile Include="..\..\control\NodeControlClient.cpp" />
-    <ClCompile Include="..\..\control\NodeControlService.cpp" />
+    <ClCompile Include="..\..\ext\http-parser\http_parser.c" />
+    <ClCompile Include="..\..\ext\json-parser\json.c" />
     <ClCompile Include="..\..\ext\lz4\lz4.c" />
-    <ClCompile Include="..\..\main.cpp" />
     <ClCompile Include="..\..\node\C25519.cpp" />
     <ClCompile Include="..\..\node\CertificateOfMembership.cpp" />
     <ClCompile Include="..\..\node\Defaults.cpp" />
     <ClCompile Include="..\..\node\Dictionary.cpp" />
-    <ClCompile Include="..\..\node\HttpClient.cpp" />
     <ClCompile Include="..\..\node\Identity.cpp" />
     <ClCompile Include="..\..\node\IncomingPacket.cpp" />
     <ClCompile Include="..\..\node\InetAddress.cpp" />
-    <ClCompile Include="..\..\node\Logger.cpp" />
     <ClCompile Include="..\..\node\Multicaster.cpp" />
     <ClCompile Include="..\..\node\Network.cpp" />
     <ClCompile Include="..\..\node\NetworkConfig.cpp" />
     <ClCompile Include="..\..\node\Node.cpp" />
-    <ClCompile Include="..\..\node\NodeConfig.cpp" />
     <ClCompile Include="..\..\node\OutboundMulticast.cpp" />
     <ClCompile Include="..\..\node\Packet.cpp" />
     <ClCompile Include="..\..\node\Peer.cpp" />
     <ClCompile Include="..\..\node\Poly1305.cpp" />
-    <ClCompile Include="..\..\node\RoutingTable.cpp" />
     <ClCompile Include="..\..\node\Salsa20.cpp" />
-    <ClCompile Include="..\..\node\Service.cpp" />
+    <ClCompile Include="..\..\node\SelfAwareness.cpp" />
     <ClCompile Include="..\..\node\SHA512.cpp" />
-    <ClCompile Include="..\..\node\SoftwareUpdater.cpp" />
     <ClCompile Include="..\..\node\Switch.cpp" />
     <ClCompile Include="..\..\node\Topology.cpp" />
     <ClCompile Include="..\..\node\Utils.cpp" />
-    <ClCompile Include="..\..\osnet\NativeSocketManager.cpp" />
-    <ClCompile Include="..\..\osnet\WindowsEthernetTap.cpp" />
-    <ClCompile Include="..\..\osnet\WindowsEthernetTapFactory.cpp" />
-    <ClCompile Include="..\..\osnet\WindowsRoutingTable.cpp" />
-    <ClCompile Include="..\..\testnet.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\SimNet.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\SimNetSocketManager.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestEthernetTap.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestEthernetTapFactory.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestRoutingTable.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="ServiceBase.cpp" />
-    <ClCompile Include="ServiceInstaller.cpp" />
-    <ClCompile Include="ZeroTierOneService.cpp" />
+    <ClCompile Include="..\..\osdep\Http.cpp" />
+    <ClCompile Include="..\..\osdep\OSUtils.cpp" />
+    <ClCompile Include="..\..\osdep\WindowsEthernetTap.cpp" />
+    <ClCompile Include="..\..\selftest.cpp" />
+    <ClCompile Include="..\..\service\ControlPlane.cpp" />
+    <ClCompile Include="..\..\service\OneService.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\..\control\IpcConnection.hpp" />
-    <ClInclude Include="..\..\control\IpcListener.hpp" />
-    <ClInclude Include="..\..\control\NodeControlClient.hpp" />
-    <ClInclude Include="..\..\control\NodeControlService.hpp" />
+    <ClInclude Include="..\..\ext\http-parser\http_parser.h" />
+    <ClInclude Include="..\..\ext\json-parser\json.h" />
     <ClInclude Include="..\..\ext\lz4\lz4.h" />
     <ClInclude Include="..\..\include\ZeroTierOne.h" />
     <ClInclude Include="..\..\node\Address.hpp" />
@@ -114,55 +67,41 @@
     <ClInclude Include="..\..\node\Constants.hpp" />
     <ClInclude Include="..\..\node\Defaults.hpp" />
     <ClInclude Include="..\..\node\Dictionary.hpp" />
-    <ClInclude Include="..\..\node\EthernetTap.hpp" />
-    <ClInclude Include="..\..\node\EthernetTapFactory.hpp" />
-    <ClInclude Include="..\..\node\HttpClient.hpp" />
     <ClInclude Include="..\..\node\Identity.hpp" />
     <ClInclude Include="..\..\node\IncomingPacket.hpp" />
     <ClInclude Include="..\..\node\InetAddress.hpp" />
-    <ClInclude Include="..\..\node\Logger.hpp" />
     <ClInclude Include="..\..\node\MAC.hpp" />
     <ClInclude Include="..\..\node\Multicaster.hpp" />
     <ClInclude Include="..\..\node\MulticastGroup.hpp" />
     <ClInclude Include="..\..\node\Mutex.hpp" />
     <ClInclude Include="..\..\node\Network.hpp" />
     <ClInclude Include="..\..\node\NetworkConfig.hpp" />
+    <ClInclude Include="..\..\node\NetworkController.hpp" />
     <ClInclude Include="..\..\node\Node.hpp" />
-    <ClInclude Include="..\..\node\NodeConfig.hpp" />
     <ClInclude Include="..\..\node\NonCopyable.hpp" />
     <ClInclude Include="..\..\node\OutboundMulticast.hpp" />
     <ClInclude Include="..\..\node\Packet.hpp" />
     <ClInclude Include="..\..\node\Path.hpp" />
     <ClInclude Include="..\..\node\Peer.hpp" />
     <ClInclude Include="..\..\node\Poly1305.hpp" />
-    <ClInclude Include="..\..\node\RoutingTable.hpp" />
     <ClInclude Include="..\..\node\RuntimeEnvironment.hpp" />
     <ClInclude Include="..\..\node\Salsa20.hpp" />
-    <ClInclude Include="..\..\node\Service.hpp" />
+    <ClInclude Include="..\..\node\SelfAwareness.hpp" />
     <ClInclude Include="..\..\node\SHA512.hpp" />
     <ClInclude Include="..\..\node\SharedPtr.hpp" />
-    <ClInclude Include="..\..\node\Socket.hpp" />
-    <ClInclude Include="..\..\node\SocketManager.hpp" />
-    <ClInclude Include="..\..\node\SoftwareUpdater.hpp" />
     <ClInclude Include="..\..\node\Switch.hpp" />
-    <ClInclude Include="..\..\node\Thread.hpp" />
     <ClInclude Include="..\..\node\Topology.hpp" />
     <ClInclude Include="..\..\node\Utils.hpp" />
-    <ClInclude Include="..\..\osnet\NativeSocketManager.hpp" />
-    <ClInclude Include="..\..\osnet\WindowsEthernetTap.hpp" />
-    <ClInclude Include="..\..\osnet\WindowsEthernetTapFactory.hpp" />
-    <ClInclude Include="..\..\osnet\WindowsRoutingTable.hpp" />
-    <ClInclude Include="..\..\testnet\MTQ.hpp" />
-    <ClInclude Include="..\..\testnet\SimNet.hpp" />
-    <ClInclude Include="..\..\testnet\SimNetSocketManager.hpp" />
-    <ClInclude Include="..\..\testnet\TestEthernetTap.hpp" />
-    <ClInclude Include="..\..\testnet\TestEthernetTapFactory.hpp" />
-    <ClInclude Include="..\..\testnet\TestRoutingTable.hpp" />
+    <ClInclude Include="..\..\osdep\Http.hpp" />
+    <ClInclude Include="..\..\osdep\OSUtils.hpp" />
+    <ClInclude Include="..\..\osdep\Phy.hpp" />
+    <ClInclude Include="..\..\osdep\Thread.hpp" />
+    <ClInclude Include="..\..\osdep\WindowsEthernetTap.hpp" />
+    <ClInclude Include="..\..\service\ControlPlane.hpp" />
+    <ClInclude Include="..\..\service\ControlPlaneSubsystem.hpp" />
+    <ClInclude Include="..\..\service\OneService.hpp" />
     <ClInclude Include="..\..\version.h" />
     <ClInclude Include="resource.h" />
-    <ClInclude Include="ServiceBase.h" />
-    <ClInclude Include="ServiceInstaller.h" />
-    <ClInclude Include="ZeroTierOneService.h" />
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="ZeroTierOne.rc" />
@@ -240,7 +179,7 @@
       <Optimization>Disabled</Optimization>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)\ext\bin\libcrypto\include</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>ZT_LOG_STDOUT;ZT_TRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NOMINMAX;ZT_TRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
@@ -254,7 +193,7 @@
       <Optimization>Disabled</Optimization>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)\ext\bin\libcrypto\include</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>ZT_LOG_STDOUT;ZT_TRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NOMINMAX;ZT_TRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
@@ -270,7 +209,7 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)\ext\bin\libcrypto\include</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
       <StringPooling>true</StringPooling>
@@ -294,7 +233,7 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)\ext\bin\libcrypto\include</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
       <StringPooling>true</StringPooling>

+ 82 - 157
windows/ZeroTierOne/ZeroTierOne.vcxproj.filters

@@ -16,36 +16,66 @@
     <Filter Include="Source Files\node">
       <UniqueIdentifier>{67b1c0f8-b018-4169-9c14-7032ed12c786}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Source Files\control">
-      <UniqueIdentifier>{64683235-3edd-443c-828c-c8e657d3bfd7}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\osnet">
-      <UniqueIdentifier>{c8a3c54f-bb49-4c3f-b406-5177bc14a447}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\testnet">
-      <UniqueIdentifier>{142d7af3-1770-44d7-bd87-d509bb25be1e}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Header Files\include">
       <UniqueIdentifier>{40761a4c-e8db-4a91-9cab-7afef332f4a8}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\control">
-      <UniqueIdentifier>{066d9967-d4f3-4b41-b9a8-b18ea763aca3}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Header Files\node">
       <UniqueIdentifier>{da3b8126-840c-45db-8abe-9d7e7976f8be}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\osnet">
-      <UniqueIdentifier>{173e391d-1519-41b8-960b-9b8dad083827}</UniqueIdentifier>
+    <Filter Include="Source Files\osdep">
+      <UniqueIdentifier>{6054dfae-4ed2-4d69-8cf5-d6f27646f2d7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\service">
+      <UniqueIdentifier>{9944293a-4a1a-40e9-b92a-eff31fe87e2c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\osdep">
+      <UniqueIdentifier>{ca21bd6b-ff4e-4f9e-bedd-c9f603d2d0d6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\service">
+      <UniqueIdentifier>{e1743b3c-1d18-47f1-ab5a-f5703c19f1df}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\ext">
+      <UniqueIdentifier>{71865460-d693-4c73-84f6-dbff42f49df6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\ext\http-parser">
+      <UniqueIdentifier>{17ae9a01-d39f-4c6d-a800-8f2cd0804c96}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\ext\json-parser">
+      <UniqueIdentifier>{736aad7f-8d95-4602-88df-3bb970869c6f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\ext\lz4">
+      <UniqueIdentifier>{3636527c-bc03-4852-bd3c-20ee25e56d82}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\testnet">
-      <UniqueIdentifier>{6f36ddd5-a2e1-48e1-9543-1ab975f91780}</UniqueIdentifier>
+    <Filter Include="Source Files\ext">
+      <UniqueIdentifier>{7784af31-5b60-4300-b07e-44cf864c54db}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\ext\lz4">
+      <UniqueIdentifier>{29164186-10fc-45f5-b253-6d03f0ddd4db}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\ext\http-parser">
+      <UniqueIdentifier>{f8a1c208-15b8-4d85-a4cb-11d2b82f2d1e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\ext\json-parser">
+      <UniqueIdentifier>{da28e961-1761-41d8-9a59-65b00dfb1302}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\ext\lz4\lz4.c">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="..\..\service\ControlPlane.cpp">
+      <Filter>Source Files\service</Filter>
     </ClCompile>
-    <ClCompile Include="ZeroTierOneService.cpp">
+    <ClCompile Include="..\..\service\OneService.cpp">
+      <Filter>Source Files\service</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\osdep\WindowsEthernetTap.cpp">
+      <Filter>Source Files\osdep</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\osdep\Http.cpp">
+      <Filter>Source Files\osdep</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\osdep\OSUtils.cpp">
+      <Filter>Source Files\osdep</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\selftest.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="..\..\node\C25519.cpp">
@@ -60,9 +90,6 @@
     <ClCompile Include="..\..\node\Dictionary.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\HttpClient.cpp">
-      <Filter>Source Files\node</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\node\Identity.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
@@ -72,9 +99,6 @@
     <ClCompile Include="..\..\node\InetAddress.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\Logger.cpp">
-      <Filter>Source Files\node</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\node\Multicaster.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
@@ -87,9 +111,6 @@
     <ClCompile Include="..\..\node\Node.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\NodeConfig.cpp">
-      <Filter>Source Files\node</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\node\OutboundMulticast.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
@@ -102,21 +123,15 @@
     <ClCompile Include="..\..\node\Poly1305.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\RoutingTable.cpp">
-      <Filter>Source Files\node</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\node\Salsa20.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\Service.cpp">
+    <ClCompile Include="..\..\node\SelfAwareness.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
     <ClCompile Include="..\..\node\SHA512.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\node\SoftwareUpdater.cpp">
-      <Filter>Source Files\node</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\node\Switch.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
@@ -126,118 +141,49 @@
     <ClCompile Include="..\..\node\Utils.cpp">
       <Filter>Source Files\node</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\control\IpcConnection.cpp">
-      <Filter>Source Files\control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\control\IpcListener.cpp">
-      <Filter>Source Files\control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\control\NodeControlClient.cpp">
-      <Filter>Source Files\control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\control\NodeControlService.cpp">
-      <Filter>Source Files\control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\osnet\NativeSocketManager.cpp">
-      <Filter>Source Files\osnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\osnet\WindowsEthernetTap.cpp">
-      <Filter>Source Files\osnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\osnet\WindowsEthernetTapFactory.cpp">
-      <Filter>Source Files\osnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\osnet\WindowsRoutingTable.cpp">
-      <Filter>Source Files\osnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\SimNet.cpp">
-      <Filter>Source Files\testnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\SimNetSocketManager.cpp">
-      <Filter>Source Files\testnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestEthernetTap.cpp">
-      <Filter>Source Files\testnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestEthernetTapFactory.cpp">
-      <Filter>Source Files\testnet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\testnet\TestRoutingTable.cpp">
-      <Filter>Source Files\testnet</Filter>
-    </ClCompile>
-    <ClCompile Include="ServiceBase.cpp">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="..\..\ext\lz4\lz4.c">
+      <Filter>Source Files\ext\lz4</Filter>
     </ClCompile>
-    <ClCompile Include="ServiceInstaller.cpp">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="..\..\ext\http-parser\http_parser.c">
+      <Filter>Source Files\ext\http-parser</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\testnet.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\main.cpp">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="..\..\ext\json-parser\json.c">
+      <Filter>Source Files\ext\json-parser</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="resource.h">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="ServiceBase.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ServiceInstaller.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ZeroTierOneService.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\version.h">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\testnet\MTQ.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\testnet\SimNet.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\testnet\SimNetSocketManager.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\testnet\TestEthernetTap.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\testnet\TestEthernetTapFactory.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\testnet\TestRoutingTable.hpp">
-      <Filter>Header Files\testnet</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\include\ZeroTierOne.h">
       <Filter>Header Files\include</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\control\IpcConnection.hpp">
-      <Filter>Header Files\control</Filter>
+    <ClInclude Include="..\..\osdep\Http.hpp">
+      <Filter>Header Files\osdep</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\control\IpcListener.hpp">
-      <Filter>Header Files\control</Filter>
+    <ClInclude Include="..\..\osdep\OSUtils.hpp">
+      <Filter>Header Files\osdep</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\control\NodeControlClient.hpp">
-      <Filter>Header Files\control</Filter>
+    <ClInclude Include="..\..\osdep\Phy.hpp">
+      <Filter>Header Files\osdep</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\control\NodeControlService.hpp">
-      <Filter>Header Files\control</Filter>
+    <ClInclude Include="..\..\osdep\Thread.hpp">
+      <Filter>Header Files\osdep</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\osnet\NativeSocketManager.hpp">
-      <Filter>Header Files\osnet</Filter>
+    <ClInclude Include="..\..\osdep\WindowsEthernetTap.hpp">
+      <Filter>Header Files\osdep</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\osnet\WindowsEthernetTap.hpp">
-      <Filter>Header Files\osnet</Filter>
+    <ClInclude Include="..\..\service\ControlPlane.hpp">
+      <Filter>Header Files\service</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\osnet\WindowsEthernetTapFactory.hpp">
-      <Filter>Header Files\osnet</Filter>
+    <ClInclude Include="..\..\service\ControlPlaneSubsystem.hpp">
+      <Filter>Header Files\service</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\osnet\WindowsRoutingTable.hpp">
-      <Filter>Header Files\osnet</Filter>
+    <ClInclude Include="..\..\service\OneService.hpp">
+      <Filter>Header Files\service</Filter>
     </ClInclude>
     <ClInclude Include="..\..\node\Address.hpp">
       <Filter>Header Files\node</Filter>
@@ -275,15 +221,6 @@
     <ClInclude Include="..\..\node\Dictionary.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\EthernetTap.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\node\EthernetTapFactory.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\node\HttpClient.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\node\Identity.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
@@ -293,9 +230,6 @@
     <ClInclude Include="..\..\node\InetAddress.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\Logger.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\node\MAC.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
@@ -314,10 +248,10 @@
     <ClInclude Include="..\..\node\NetworkConfig.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\Node.hpp">
+    <ClInclude Include="..\..\node\NetworkController.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\NodeConfig.hpp">
+    <ClInclude Include="..\..\node\Node.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
     <ClInclude Include="..\..\node\NonCopyable.hpp">
@@ -338,16 +272,13 @@
     <ClInclude Include="..\..\node\Poly1305.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\RoutingTable.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\node\RuntimeEnvironment.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
     <ClInclude Include="..\..\node\Salsa20.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\Service.hpp">
+    <ClInclude Include="..\..\node\SelfAwareness.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
     <ClInclude Include="..\..\node\SHA512.hpp">
@@ -356,21 +287,9 @@
     <ClInclude Include="..\..\node\SharedPtr.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\Socket.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\node\SocketManager.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\node\SoftwareUpdater.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\node\Switch.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\node\Thread.hpp">
-      <Filter>Header Files\node</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\node\Topology.hpp">
       <Filter>Header Files\node</Filter>
     </ClInclude>
@@ -378,7 +297,13 @@
       <Filter>Header Files\node</Filter>
     </ClInclude>
     <ClInclude Include="..\..\ext\lz4\lz4.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\ext\lz4</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\json-parser\json.h">
+      <Filter>Header Files\ext\json-parser</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\http-parser\http_parser.h">
+      <Filter>Header Files\ext\http-parser</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>