diff --git a/attic/make-linux.mk b/attic/make-linux.mk
index 0fe1f051..9b951cbd 100644
--- a/attic/make-linux.mk
+++ b/attic/make-linux.mk
@@ -267,8 +267,8 @@ ifeq ($(ZT_ARCHITECTURE),3)
override CXXFLAGS+=-march=armv5 -mfloat-abi=soft -msoft-float -mno-unaligned-access -marm
ZT_USE_ARM32_NEON_ASM_CRYPTO=0
else
- override CFLAGS+=-march=armv5 -mno-unaligned-access -marm
- override CXXFLAGS+=-march=armv5 -mno-unaligned-access -marm
+ override CFLAGS+=-march=armv5 -mno-unaligned-access -marm -fexceptions
+ override CXXFLAGS+=-march=armv5 -mno-unaligned-access -marm -fexceptions
ZT_USE_ARM32_NEON_ASM_CRYPTO=0
endif
endif
diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip
index 83b07c25..4064fda9 100644
--- a/ext/installfiles/windows/ZeroTier One.aip
+++ b/ext/installfiles/windows/ZeroTier One.aip
@@ -27,10 +27,10 @@
-
+
-
+
@@ -64,7 +64,7 @@
-
+
@@ -454,7 +454,7 @@
-
+
diff --git a/service/OneService.cpp b/service/OneService.cpp
index 80fff93c..9709b0f3 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -1165,8 +1165,8 @@ public:
json &allowDefault = j["allowDefault"];
if (allowDefault.is_boolean()) localSettings.allowDefault = (bool)allowDefault;
}
+ } catch (std::exception &exc) {
} catch ( ... ) {
- // discard invalid JSON
}
setNetworkSettings(nws->networks[i].nwid,localSettings);
@@ -1632,6 +1632,8 @@ public:
return;
}
+ } catch (std::exception &exc) {
+ _phy.close(sock);
} catch ( ... ) {
_phy.close(sock);
}
@@ -1740,6 +1742,8 @@ public:
#endif
_nets.erase(nwid);
return -999;
+ } catch (int exc) {
+ return -999;
} catch ( ... ) {
return -999; // tap init failed
}
diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj
index 2bcc8603..1cfe8ae0 100644
--- a/windows/ZeroTierOne/ZeroTierOne.vcxproj
+++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj
@@ -113,7 +113,20 @@
-
+
+ false
+ false
+ false
+ true
+ StreamingSIMDExtensions2
+ NoExtensions
+ false
+ false
+ false
+ false
+ StreamingSIMDExtensions2
+ NoExtensions
+
diff --git a/windows/ZeroTierOne/ZeroTierOneService.cpp b/windows/ZeroTierOne/ZeroTierOneService.cpp
index 9b274d34..7e4cbf02 100644
--- a/windows/ZeroTierOne/ZeroTierOneService.cpp
+++ b/windows/ZeroTierOne/ZeroTierOneService.cpp
@@ -76,9 +76,7 @@ restart_node:
ZeroTier::Mutex::Lock _l(_lock);
delete _service;
_service = (ZeroTier::OneService *)0; // in case newInstance() fails
- _service = ZeroTier::OneService::newInstance(
- ZeroTier::OneService::platformDefaultHomePath().c_str(),
- ZT_DEFAULT_PORT);
+ _service = ZeroTier::OneService::newInstance(_path.c_str(), ZT_DEFAULT_PORT);
}
switch(_service->run()) {
case ZeroTier::OneService::ONE_UNRECOVERABLE_ERROR: {
@@ -120,10 +118,16 @@ restart_node:
}
}
-void ZeroTierOneService::OnStart(DWORD dwArgc, LPSTR *lpszArgv)
+void ZeroTierOneService::OnStart(DWORD dwArgc, PSTR *lpszArgv)
{
ZT_SVCDBG("ZeroTierOneService::OnStart()\r\n");
+ if ((dwArgc > 1)&&(lpszArgv[1])&&(strlen(lpszArgv[1]) > 0)) {
+ this->_path = lpszArgv[1];
+ } else {
+ this->_path = ZeroTier::OneService::platformDefaultHomePath();
+ }
+
try {
_thread = ZeroTier::Thread::start(this);
} catch ( ... ) {
diff --git a/windows/ZeroTierOne/ZeroTierOneService.h b/windows/ZeroTierOne/ZeroTierOneService.h
index dbcd8c6d..c4edb820 100644
--- a/windows/ZeroTierOne/ZeroTierOneService.h
+++ b/windows/ZeroTierOne/ZeroTierOneService.h
@@ -57,11 +57,12 @@ public:
throw();
protected:
- virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
- virtual void OnStop();
+ virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
+ virtual void OnStop();
virtual void OnShutdown();
private:
+ std::string _path;
ZeroTier::OneService *volatile _service;
ZeroTier::Mutex _lock;
ZeroTier::Thread _thread;