diff options
author | Adam Ierymenko <adam.ierymenko@zerotier.com> | 2014-08-07 19:08:41 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@zerotier.com> | 2014-08-07 19:08:41 -0700 |
commit | 77457cbff14546a6b6173a46c0486767dab60847 (patch) | |
tree | b9c5a7453d89678ed46cc51e51c2387c212e8055 /windows/ZeroTierOne | |
parent | db0d17cebba67dec344ee63c3b8ecbdc46f2814a (diff) | |
download | infinitytier-77457cbff14546a6b6173a46c0486767dab60847.tar.gz infinitytier-77457cbff14546a6b6173a46c0486767dab60847.zip |
Windows compile fixes, compiler warning fix, unfreed memory fix in main.c (though it would not have mattered since program exits immediately after).
Diffstat (limited to 'windows/ZeroTierOne')
-rw-r--r-- | windows/ZeroTierOne/ZeroTierOne.vcxproj | 1 | ||||
-rw-r--r-- | windows/ZeroTierOne/ZeroTierOne.vcxproj.filters | 3 | ||||
-rw-r--r-- | windows/ZeroTierOne/ZeroTierOneService.cpp | 36 |
3 files changed, 31 insertions, 9 deletions
diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj index b31a76cc..c84d9570 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj @@ -24,6 +24,7 @@ <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\InetAddress.cpp" /> diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters index dcba83ef..ee552627 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters @@ -126,6 +126,9 @@ <ClCompile Include="..\..\osnet\WindowsRoutingTable.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\node\Dictionary.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\ext\lz4\lz4.h"> diff --git a/windows/ZeroTierOne/ZeroTierOneService.cpp b/windows/ZeroTierOne/ZeroTierOneService.cpp index a6758d1b..f0d93280 100644 --- a/windows/ZeroTierOne/ZeroTierOneService.cpp +++ b/windows/ZeroTierOne/ZeroTierOneService.cpp @@ -26,15 +26,21 @@ */ #pragma region Includes + #include <WinSock2.h> #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include "ZeroTierOneService.h" + #include "../../node/Defaults.hpp" #include "../../node/Utils.hpp" -#pragma endregion + +#include "../../osnet/WindowsEthernetTapFactory.hpp" +#include "../../osnet/WindowsRoutingTable.hpp" + +#pragma endregion // Includes #ifdef ZT_DEBUG_SERVICE FILE *SVCDBGfile = (FILE *)0; @@ -76,27 +82,35 @@ void ZeroTierOneService::threadMain() restart_node: try { + ZeroTier::WindowsEthernetTapFactory tapFactory(ZeroTier::ZT_DEFAULTS.defaultHomePath.c_str()); + ZeroTier::WindowsRoutingTable routingTable; + { // start or restart ZeroTier::Mutex::Lock _l(_lock); delete _node; - _node = new ZeroTier::Node(ZeroTier::ZT_DEFAULTS.defaultHomePath.c_str(),ZT_DEFAULT_UDP_PORT,0,false); + _node = new ZeroTier::Node(ZeroTier::ZT_DEFAULTS.defaultHomePath.c_str(),&tapFactory,&routingTable,ZT_DEFAULT_UDP_PORT,0,false); } + switch(_node->run()) { + case ZeroTier::Node::NODE_RESTART_FOR_UPGRADE: { // Shut down node ZeroTier::Node *n; { - ZeroTier::Mutex::Lock _l(_lock); - n = _node; - _node = (ZeroTier::Node *)0; + ZeroTier::Mutex::Lock _l(_lock); + n = _node; + _node = (ZeroTier::Node *)0; } + + // Get upgrade path, which will be its reason for termination std::string msiPath; if (n) { const char *msiPathTmp = n->reasonForTermination(); if (msiPathTmp) msiPath = msiPathTmp; } + delete n; if ((!msiPath.length())||(!ZeroTier::Utils::fileExists(msiPath.c_str()))) { @@ -114,6 +128,7 @@ restart_node: // Terminate service to allow updater to update Stop(); } return; + case ZeroTier::Node::NODE_UNRECOVERABLE_ERROR: { std::string err("ZeroTier node encountered an unrecoverable error: "); const char *r = _node->reasonForTermination(); @@ -125,8 +140,10 @@ restart_node: Sleep(5000); goto restart_node; } break; + default: // includes normal termination, which will terminate thread break; + } } catch ( ... ) { // sanity check, shouldn't happen since Node::run() should catch all its own errors @@ -136,10 +153,11 @@ restart_node: goto restart_node; } - _lock.lock(); - delete _node; - _node = (ZeroTier::Node *)0; - _lock.unlock(); + { + ZeroTier::Mutex::Lock _l(_lock); + delete _node; + _node = (ZeroTier::Node *)0; + } } bool ZeroTierOneService::doStartUpgrade(const std::string &msiPath) |