From 54954f5b8886bd6ea49e043fa5a695fcd7608c68 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 24 Apr 2015 13:35:17 -0700 Subject: First pass of Windows cleanup and build fixes... --- windows/ZeroTierOne/ZeroTierOne.vcxproj | 111 +++-------- windows/ZeroTierOne/ZeroTierOne.vcxproj.filters | 239 ++++++++---------------- 2 files changed, 107 insertions(+), 243 deletions(-) (limited to 'windows') diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj index a651b5f7..6ee776b1 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj @@ -19,87 +19,40 @@ - - - - + + - - - - - - + - - - - - - - true - true - true - true - - - true - true - true - true - - - true - true - true - true - - - true - true - true - true - - - true - true - true - true - - - true - true - true - true - - - - + + + + + + - - - - + + @@ -114,55 +67,41 @@ - - - - + - - - + - - - - - - - - - - - - - - + + + + + + + + - - - @@ -240,7 +179,7 @@ Disabled true $(SolutionDir)\ext\bin\libcrypto\include - ZT_LOG_STDOUT;ZT_TRACE;%(PreprocessorDefinitions) + NOMINMAX;ZT_TRACE;%(PreprocessorDefinitions) true @@ -254,7 +193,7 @@ Disabled true $(SolutionDir)\ext\bin\libcrypto\include - ZT_LOG_STDOUT;ZT_TRACE;%(PreprocessorDefinitions) + NOMINMAX;ZT_TRACE;%(PreprocessorDefinitions) true @@ -270,7 +209,7 @@ true true $(SolutionDir)\ext\bin\libcrypto\include - ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;%(PreprocessorDefinitions) + ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;NOMINMAX;%(PreprocessorDefinitions) MultiThreaded NoExtensions true @@ -294,7 +233,7 @@ true true $(SolutionDir)\ext\bin\libcrypto\include - ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;%(PreprocessorDefinitions) + ZT_OFFICIAL_RELEASE;ZT_AUTO_UPDATE;ZT_SALSA20_SSE;NOMINMAX;%(PreprocessorDefinitions) MultiThreaded NotSet true diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters index 8771af7e..be099745 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters @@ -16,36 +16,66 @@ {67b1c0f8-b018-4169-9c14-7032ed12c786} - - {64683235-3edd-443c-828c-c8e657d3bfd7} - - - {c8a3c54f-bb49-4c3f-b406-5177bc14a447} - - - {142d7af3-1770-44d7-bd87-d509bb25be1e} - {40761a4c-e8db-4a91-9cab-7afef332f4a8} - - {066d9967-d4f3-4b41-b9a8-b18ea763aca3} - {da3b8126-840c-45db-8abe-9d7e7976f8be} - - {173e391d-1519-41b8-960b-9b8dad083827} + + {6054dfae-4ed2-4d69-8cf5-d6f27646f2d7} + + + {9944293a-4a1a-40e9-b92a-eff31fe87e2c} + + + {ca21bd6b-ff4e-4f9e-bedd-c9f603d2d0d6} + + + {e1743b3c-1d18-47f1-ab5a-f5703c19f1df} + + + {71865460-d693-4c73-84f6-dbff42f49df6} + + + {17ae9a01-d39f-4c6d-a800-8f2cd0804c96} + + + {736aad7f-8d95-4602-88df-3bb970869c6f} + + + {3636527c-bc03-4852-bd3c-20ee25e56d82} - - {6f36ddd5-a2e1-48e1-9543-1ab975f91780} + + {7784af31-5b60-4300-b07e-44cf864c54db} + + + {29164186-10fc-45f5-b253-6d03f0ddd4db} + + + {f8a1c208-15b8-4d85-a4cb-11d2b82f2d1e} + + + {da28e961-1761-41d8-9a59-65b00dfb1302} - - Source Files + + Source Files\service - + + Source Files\service + + + Source Files\osdep + + + Source Files\osdep + + + Source Files\osdep + + Source Files @@ -60,9 +90,6 @@ Source Files\node - - Source Files\node - Source Files\node @@ -72,9 +99,6 @@ Source Files\node - - Source Files\node - Source Files\node @@ -87,9 +111,6 @@ Source Files\node - - Source Files\node - Source Files\node @@ -102,21 +123,15 @@ Source Files\node - - Source Files\node - Source Files\node - + Source Files\node Source Files\node - - Source Files\node - Source Files\node @@ -126,118 +141,49 @@ Source Files\node - - Source Files\control - - - Source Files\control - - - Source Files\control - - - Source Files\control - - - Source Files\osnet - - - Source Files\osnet - - - Source Files\osnet - - - Source Files\osnet - - - Source Files\testnet - - - Source Files\testnet - - - Source Files\testnet - - - Source Files\testnet - - - Source Files\testnet - - - Source Files + + Source Files\ext\lz4 - - Source Files + + Source Files\ext\http-parser - - Source Files - - - Source Files + + Source Files\ext\json-parser Header Files - - Header Files - - - Header Files - - - Header Files - Header Files - - Header Files\testnet - - - Header Files\testnet - - - Header Files\testnet - - - Header Files\testnet - - - Header Files\testnet - - - Header Files\testnet - Header Files\include - - Header Files\control + + Header Files\osdep - - Header Files\control + + Header Files\osdep - - Header Files\control + + Header Files\osdep - - Header Files\control + + Header Files\osdep - - Header Files\osnet + + Header Files\osdep - - Header Files\osnet + + Header Files\service - - Header Files\osnet + + Header Files\service - - Header Files\osnet + + Header Files\service Header Files\node @@ -275,15 +221,6 @@ Header Files\node - - Header Files\node - - - Header Files\node - - - Header Files\node - Header Files\node @@ -293,9 +230,6 @@ Header Files\node - - Header Files\node - Header Files\node @@ -314,10 +248,10 @@ Header Files\node - + Header Files\node - + Header Files\node @@ -338,16 +272,13 @@ Header Files\node - - Header Files\node - Header Files\node Header Files\node - + Header Files\node @@ -356,21 +287,9 @@ Header Files\node - - Header Files\node - - - Header Files\node - - - Header Files\node - Header Files\node - - Header Files\node - Header Files\node @@ -378,7 +297,13 @@ Header Files\node - Header Files + Header Files\ext\lz4 + + + Header Files\ext\json-parser + + + Header Files\ext\http-parser -- cgit v1.2.3 From 0e315513497832874192a3f44fcb4404c65df275 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 24 Apr 2015 15:15:14 -0700 Subject: Take winhttp out of lib list, since we don't use it anymore. --- windows/ZeroTierOne/ZeroTierOne.vcxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'windows') diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj index 6ee776b1..2dfc4433 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj @@ -183,7 +183,7 @@ true - wsock32.lib;ws2_32.lib;newdev.lib;winhttp.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;newdev.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) false @@ -197,7 +197,7 @@ true - wsock32.lib;ws2_32.lib;newdev.lib;winhttp.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;newdev.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) false @@ -221,7 +221,7 @@ true true true - wsock32.lib;ws2_32.lib;newdev.lib;winhttp.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;newdev.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) false @@ -245,7 +245,7 @@ true true true - wsock32.lib;ws2_32.lib;newdev.lib;winhttp.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) + wsock32.lib;ws2_32.lib;newdev.lib;Iphlpapi.lib;Rpcrt4.lib;%(AdditionalDependencies) false -- cgit v1.2.3 From e2c65bf16a9b6f30daf023a9cfc270354d351387 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 24 Apr 2015 15:44:39 -0700 Subject: Bring Windows service code up to date and into sync. --- one.cpp | 11 ++-- windows/ZeroTierOne/ZeroTierOne.vcxproj | 14 ++++- windows/ZeroTierOne/ZeroTierOne.vcxproj.filters | 33 ++++++++++++ windows/ZeroTierOne/ZeroTierOneService.cpp | 71 +++++++++++++++++++------ windows/ZeroTierOne/ZeroTierOneService.h | 8 ++- 5 files changed, 109 insertions(+), 28 deletions(-) (limited to 'windows') diff --git a/one.cpp b/one.cpp index c75542e4..54145d03 100644 --- a/one.cpp +++ b/one.cpp @@ -32,6 +32,8 @@ #include #include +#include "node/Constants.hpp" + #ifdef __WINDOWS__ #include #include @@ -60,7 +62,6 @@ #include "ext/json-parser/json.h" -#include "node/Constants.hpp" #include "node/Identity.hpp" #include "node/CertificateOfMembership.hpp" #include "node/Utils.hpp" @@ -499,7 +500,7 @@ static int cli(int argc,char **argv) cliPrintHelp(argv[0],stderr); return 2; } - unsigned int scode = Http::DELETE( + unsigned int scode = Http::DEL( 1024 * 1024 * 16, 60000, (const struct sockaddr *)&addr, @@ -731,9 +732,9 @@ static BOOL WINAPI _winConsoleCtrlHandler(DWORD dwCtrlType) case CTRL_BREAK_EVENT: case CTRL_CLOSE_EVENT: case CTRL_SHUTDOWN_EVENT: - Node *n = node; - if (n) - n->terminate(Node::NODE_NORMAL_TERMINATION,"terminated by signal"); + OneService *s = zt1Service; + if (s) + s->terminate(); return TRUE; } return FALSE; diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj index 2dfc4433..796c30d9 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj @@ -43,12 +43,21 @@ + - + + true + true + true + true + + + + @@ -102,6 +111,9 @@ + + + diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters index be099745..7ed585ad 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj.filters @@ -58,6 +58,18 @@ {da28e961-1761-41d8-9a59-65b00dfb1302} + + {43f75f84-c70d-4d44-a0ef-28a7a399abd4} + + + {0da07a2f-8922-4827-ac51-29ca3f30f881} + + + {b74916eb-bb6c-4449-a2a2-fa0b17f60121} + + + {bf604491-14c4-4a74-81a6-6105d07c5c7c} + @@ -150,6 +162,18 @@ Source Files\ext\json-parser + + Source Files + + + Source Files\windows\ZeroTierOne + + + Source Files\windows\ZeroTierOne + + + Source Files\windows\ZeroTierOne + @@ -305,6 +329,15 @@ Header Files\ext\http-parser + + Header Files\windows\ZeroTierOne + + + Header Files\windows\ZeroTierOne + + + Header Files\windows\ZeroTierOne + diff --git a/windows/ZeroTierOne/ZeroTierOneService.cpp b/windows/ZeroTierOne/ZeroTierOneService.cpp index abae3aff..e5426dc2 100644 --- a/windows/ZeroTierOne/ZeroTierOneService.cpp +++ b/windows/ZeroTierOne/ZeroTierOneService.cpp @@ -34,15 +34,13 @@ #include "ZeroTierOneService.h" -#include "../../node/Defaults.hpp" -#include "../../node/Utils.hpp" - -#include "../../control/NodeControlClient.hpp" -#include "../../control/NodeControlService.hpp" +#include "../../version.h" +#include "../../include/ZeroTierOne.h" -#include "../../osdep/WindowsEthernetTapFactory.hpp" -#include "../../osdep/WindowsRoutingTable.hpp" -#include "../../osdep/NativeSocketManager.hpp" +#include "../../node/Constants.hpp" +#include "../../node/Utils.hpp" +#include "../../osdep/OSUtils.hpp" +#include "../../service/OneService.hpp" #pragma endregion // Includes @@ -53,7 +51,7 @@ ZeroTier::Mutex SVCDBGfile_m; ZeroTierOneService::ZeroTierOneService() : CServiceBase(ZT_SERVICE_NAME,TRUE,TRUE,FALSE), - _node((ZeroTier::Node *)0) + _service((ZeroTier::OneService *)0) { #ifdef ZT_DEBUG_SERVICE SVCDBGfile_m.lock(); @@ -86,6 +84,41 @@ void ZeroTierOneService::threadMain() restart_node: try { + { + ZeroTier::Mutex::Lock _l(_lock); + delete _service; + _service = (ZeroTier::OneService *)0; // in case newInstance() fails + _service = ZeroTier::OneService::newInstance( + ZeroTier::OneService::platformDefaultHomePath().c_str(), + ZT1_DEFAULT_PORT); + } + switch(_service->run()) { + case ZeroTier::OneService::ONE_UNRECOVERABLE_ERROR: { + std::string err("ZeroTier One encountered an unrecoverable error: "); + err.append(_service->fatalErrorMessage()); + err.append(" (restarting in 5 seconds)"); + WriteEventLogEntry(const_cast (err.c_str()),EVENTLOG_ERROR_TYPE); + Sleep(5000); + } goto restart_node; + + case ZeroTier::OneService::ONE_IDENTITY_COLLISION: { + std::string homeDir(ZeroTier::OneService::platformDefaultHomePath()); + delete _service; + _service = (ZeroTier::OneService *)0; + std::string oldid; + ZeroTier::OSUtils::readFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str(),oldid); + if (oldid.length()) { + ZeroTier::OSUtils::writeFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret.saved_after_collision").c_str(),oldid); + ZeroTier::OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str()); + ZeroTier::OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.public").c_str()); + } + } goto restart_node; + + default: // normal termination + break; + } + +#if 0 std::string authToken(ZeroTier::NodeControlClient::getAuthToken((ZeroTier::ZT_DEFAULTS.defaultHomePath + ZT_PATH_SEPARATOR_S + "authtoken.secret").c_str(),true)); ZeroTier::WindowsEthernetTapFactory tapFactory(ZeroTier::ZT_DEFAULTS.defaultHomePath.c_str()); @@ -154,6 +187,7 @@ restart_node: break; } +#endif } catch ( ... ) { // sanity check, shouldn't happen since Node::run() should catch all its own errors // could also happen if we're out of memory though! @@ -164,17 +198,19 @@ restart_node: { ZeroTier::Mutex::Lock _l(_lock); - delete _node; - _node = (ZeroTier::Node *)0; + delete _service; + _service = (ZeroTier::OneService *)0; } } bool ZeroTierOneService::doStartUpgrade(const std::string &msiPath) { - std::string msiLog(ZeroTier::ZT_DEFAULTS.defaultHomePath + "\\LastUpdateLog.txt"); - ZeroTier::Utils::rm(msiLog); + std::string homePath(ZeroTier::OneService::platformDefaultHomePath()); - std::string bat(ZeroTier::ZT_DEFAULTS.defaultHomePath + "\\InstallAndRestartService.bat"); + std::string msiLog(homePath + "\\LastUpdateLog.txt"); + ZeroTier::OSUtils::rm(msiLog); + + std::string bat(homePath + "\\InstallAndRestartService.bat"); FILE *batf = fopen(bat.c_str(),"wb"); if (!batf) return false; @@ -210,10 +246,11 @@ void ZeroTierOneService::OnStop() ZT_SVCDBG("ZeroTierOneService::OnStop()\r\n"); _lock.lock(); - ZeroTier::Node *n = _node; + ZeroTier::OneService *s = _service; _lock.unlock(); - if (n) { - n->terminate(ZeroTier::Node::NODE_NORMAL_TERMINATION,"Windows service stopped"); + + if (s) { + s->terminate(); ZeroTier::Thread::join(_thread); } } diff --git a/windows/ZeroTierOne/ZeroTierOneService.h b/windows/ZeroTierOne/ZeroTierOneService.h index bfc835f2..1b97fd46 100644 --- a/windows/ZeroTierOne/ZeroTierOneService.h +++ b/windows/ZeroTierOne/ZeroTierOneService.h @@ -33,11 +33,9 @@ #include -#include "../../node/Node.hpp" -#include "../../node/Defaults.hpp" -#include "../../node/Thread.hpp" #include "../../node/Mutex.hpp" -#include "../../node/Utils.hpp" +#include "../../osdep/Thread.hpp" +#include "../../service/OneService.hpp" // Uncomment to make debugging Windows services suck slightly less hard. //#define ZT_DEBUG_SERVICE "C:\\ZeroTierOneServiceDebugLog.txt" @@ -79,7 +77,7 @@ protected: virtual void OnShutdown(); private: - ZeroTier::Node *volatile _node; + ZeroTier::OneService *volatile _service; ZeroTier::Mutex _lock; ZeroTier::Thread _thread; }; -- cgit v1.2.3