mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-01 06:50:51 +00:00
Merge branch 'dev' into temporal
This commit is contained in:
commit
69c590ff81
42
.github/workflows/validate-linux.sh
vendored
42
.github/workflows/validate-linux.sh
vendored
@ -20,6 +20,9 @@ mkdir $TEST_DIR_PREFIX
|
|||||||
# How long we will wait for ZT to come online before considering it a failure
|
# How long we will wait for ZT to come online before considering it a failure
|
||||||
MAX_WAIT_SECS=30
|
MAX_WAIT_SECS=30
|
||||||
|
|
||||||
|
ZT_PORT_NODE_1=9996
|
||||||
|
ZT_PORT_NODE_2=9997
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Multi-node connectivity and performance test #
|
# Multi-node connectivity and performance test #
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -99,14 +102,19 @@ test() {
|
|||||||
--xml=yes \
|
--xml=yes \
|
||||||
--xml-file=$FILENAME_MEMORY_LOG \
|
--xml-file=$FILENAME_MEMORY_LOG \
|
||||||
--leak-check=full \
|
--leak-check=full \
|
||||||
./zerotier-one node1 -p9996 -U >>node_1.log 2>&1 &
|
./zerotier-one node1 -p$ZT_PORT_NODE_1 -U >>node_1.log 2>&1 &
|
||||||
|
|
||||||
# Second instance, not run in memory profiler
|
# Second instance, not run in memory profiler
|
||||||
# Don't set up internet access until _after_ zerotier is running
|
# Don't set up internet access until _after_ zerotier is running
|
||||||
# This has been a source of stuckness in the past.
|
# This has been a source of stuckness in the past.
|
||||||
$NS2 ip addr del 192.168.1.2/24 dev veth3
|
$NS2 ip addr del 192.168.1.2/24 dev veth3
|
||||||
$NS2 sudo ./zerotier-one node2 -U -p9997 >>node_2.log 2>&1 &
|
$NS2 sudo ./zerotier-one node2 -U -p$ZT_PORT_NODE_2 >>node_2.log 2>&1 &
|
||||||
sleep 1;
|
|
||||||
|
sleep 10; # New HTTP control plane is a bit sluggish, so we delay here
|
||||||
|
|
||||||
|
check_bind_to_correct_ports $ZT_PORT_NODE_1
|
||||||
|
check_bind_to_correct_ports $ZT_PORT_NODE_2
|
||||||
|
|
||||||
$NS2 ip addr add 192.168.1.2/24 dev veth3
|
$NS2 ip addr add 192.168.1.2/24 dev veth3
|
||||||
$NS2 ip route add default via 192.168.1.1
|
$NS2 ip route add default via 192.168.1.1
|
||||||
|
|
||||||
@ -458,4 +466,32 @@ check_exit_on_invalid_identity() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Check that we're binding to the primary port for TCP/TCP6/UDP #
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
check_bind_to_correct_ports() {
|
||||||
|
PORT_NUMBER=$1
|
||||||
|
echo "Checking bound ports:"
|
||||||
|
sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier"
|
||||||
|
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "tcp") ]];
|
||||||
|
then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to tcp/$1"
|
||||||
|
fi
|
||||||
|
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "tcp6") ]];
|
||||||
|
then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to tcp6/$1"
|
||||||
|
fi
|
||||||
|
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "udp") ]];
|
||||||
|
then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to udp/$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
test "$@"
|
test "$@"
|
||||||
|
@ -120,7 +120,7 @@ Access control is via the ZeroTier control interface itself and `metricstoken.se
|
|||||||
curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics
|
curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics
|
||||||
|
|
||||||
// macOS
|
// macOS
|
||||||
curl -H "X-XT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics
|
curl -H "X-ZT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics
|
||||||
|
|
||||||
// Windows PowerShell (Admin)
|
// Windows PowerShell (Admin)
|
||||||
Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics
|
Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics
|
||||||
|
@ -1,6 +1,22 @@
|
|||||||
ZeroTier Release Notes
|
ZeroTier Release Notes
|
||||||
======
|
======
|
||||||
|
|
||||||
|
# 2023-08-25 -- Version 1.12.1
|
||||||
|
|
||||||
|
* Minor release to fix a port binding issue in Linux.
|
||||||
|
* Update Debian dependencies.
|
||||||
|
* No changes for other platforms.
|
||||||
|
|
||||||
|
# 2023-08-23 -- Version 1.12.0
|
||||||
|
|
||||||
|
* Experimental Windows ARM64 support
|
||||||
|
* Fix numerous sleep/wake issues on macOS and other platforms
|
||||||
|
* Faster recovery after changes to physical network settings
|
||||||
|
* Prometheus compatible metrics support!
|
||||||
|
* Fix full tunnel mode on recent macOS versions
|
||||||
|
* Numerous macOS DNS fixes
|
||||||
|
* 10-30% speed improvement on Linux
|
||||||
|
|
||||||
# 2023-03-23 -- Version 1.10.6
|
# 2023-03-23 -- Version 1.10.6
|
||||||
|
|
||||||
* Prevent binding temporary ipv6 addresses on macos (#1910)
|
* Prevent binding temporary ipv6 addresses on macos (#1910)
|
||||||
|
@ -863,9 +863,17 @@ std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networ
|
|||||||
|
|
||||||
void EmbeddedNetworkController::configureHTTPControlPlane(
|
void EmbeddedNetworkController::configureHTTPControlPlane(
|
||||||
httplib::Server &s,
|
httplib::Server &s,
|
||||||
|
httplib::Server &sv6,
|
||||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
|
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
|
||||||
{
|
{
|
||||||
s.Get("/controller/network", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
// Control plane Endpoints
|
||||||
|
std::string networkListPath = "/controller/network";
|
||||||
|
std::string networkPath = "/controller/network/([0-9a-fA-F]{16})";
|
||||||
|
std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______";
|
||||||
|
std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member";
|
||||||
|
std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})";
|
||||||
|
|
||||||
|
auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
std::set<uint64_t> networkIds;
|
std::set<uint64_t> networkIds;
|
||||||
_db.networks(networkIds);
|
_db.networks(networkIds);
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
@ -877,9 +885,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
}
|
}
|
||||||
|
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
s.Get(networkListPath, networkListGet);
|
||||||
|
sv6.Get(networkListPath, networkListGet);
|
||||||
|
|
||||||
s.Get("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1];
|
auto networkID = req.matches[1];
|
||||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||||
json network;
|
json network;
|
||||||
@ -889,7 +899,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
}
|
}
|
||||||
|
|
||||||
setContent(req, res, network.dump());
|
setContent(req, res, network.dump());
|
||||||
});
|
};
|
||||||
|
s.Get(networkPath, networkGet);
|
||||||
|
sv6.Get(networkPath, networkGet);
|
||||||
|
|
||||||
auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
fprintf(stderr, "creating new network (new style)\n");
|
fprintf(stderr, "creating new network (new style)\n");
|
||||||
@ -912,8 +924,10 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
|
|
||||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||||
};
|
};
|
||||||
s.Put("/controller/network", createNewNetwork);
|
s.Put(networkListPath, createNewNetwork);
|
||||||
s.Post("/controller/network", createNewNetwork);
|
s.Post(networkListPath, createNewNetwork);
|
||||||
|
sv6.Put(networkListPath, createNewNetwork);
|
||||||
|
sv6.Post(networkListPath, createNewNetwork);
|
||||||
|
|
||||||
auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto inID = req.matches[1].str();
|
auto inID = req.matches[1].str();
|
||||||
@ -941,10 +955,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
}
|
}
|
||||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||||
};
|
};
|
||||||
s.Put("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
|
s.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||||
s.Post("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
|
s.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||||
|
sv6.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||||
|
sv6.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||||
|
|
||||||
s.Delete("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
|
auto networkID = req.matches[1].str();
|
||||||
|
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
|
||||||
|
|
||||||
|
res.status = 200;
|
||||||
|
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||||
|
};
|
||||||
|
s.Put(networkPath, networkPost);
|
||||||
|
s.Post(networkPath, networkPost);
|
||||||
|
sv6.Put(networkPath, networkPost);
|
||||||
|
sv6.Post(networkPath, networkPost);
|
||||||
|
|
||||||
|
auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1].str();
|
auto networkID = req.matches[1].str();
|
||||||
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
|
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
|
||||||
|
|
||||||
@ -956,9 +984,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
|
|
||||||
_db.eraseNetwork(nwid);
|
_db.eraseNetwork(nwid);
|
||||||
setContent(req, res, network.dump());
|
setContent(req, res, network.dump());
|
||||||
});
|
};
|
||||||
|
s.Delete(networkPath, networkDelete);
|
||||||
|
sv6.Delete(networkPath, networkDelete);
|
||||||
|
|
||||||
s.Get("/controller/network/([0-9a-fA-F]{16})/member", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto memberListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1];
|
auto networkID = req.matches[1];
|
||||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||||
json network;
|
json network;
|
||||||
@ -967,24 +997,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
json out = json::array();
|
json out = json::object();
|
||||||
std::vector<json> memTmp;
|
std::vector<json> memTmp;
|
||||||
if (_db.get(nwid, network, memTmp)) {
|
if (_db.get(nwid, network, memTmp)) {
|
||||||
for (auto m = memTmp.begin(); m != memTmp.end(); ++m) {
|
for (auto m = memTmp.begin(); m != memTmp.end(); ++m) {
|
||||||
int revision = OSUtils::jsonInt((*m)["revision"], 0);
|
int revision = OSUtils::jsonInt((*m)["revision"], 0);
|
||||||
std::string id = OSUtils::jsonString((*m)["id"], "");
|
std::string id = OSUtils::jsonString((*m)["id"], "");
|
||||||
if (id.length() == 10) {
|
if (id.length() == 10) {
|
||||||
json tmp = json::object();
|
out[id] = revision;
|
||||||
tmp[id] = revision;
|
|
||||||
out.push_back(tmp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
s.Get(memberListPath, memberListGet);
|
||||||
|
sv6.Get(memberListPath, memberListGet);
|
||||||
|
|
||||||
s.Get("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto memberGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1];
|
auto networkID = req.matches[1];
|
||||||
auto memberID = req.matches[2];
|
auto memberID = req.matches[2];
|
||||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||||
@ -997,7 +1027,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
}
|
}
|
||||||
|
|
||||||
setContent(req, res, member.dump());
|
setContent(req, res, member.dump());
|
||||||
});
|
};
|
||||||
|
s.Get(memberPath, memberGet);
|
||||||
|
sv6.Get(memberPath, memberGet);
|
||||||
|
|
||||||
auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1].str();
|
auto networkID = req.matches[1].str();
|
||||||
@ -1102,10 +1134,12 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
|
|
||||||
setContent(req, res, member.dump());
|
setContent(req, res, member.dump());
|
||||||
};
|
};
|
||||||
s.Put("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
|
s.Put(memberPath, memberPost);
|
||||||
s.Post("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
|
s.Post(memberPath, memberPost);
|
||||||
|
sv6.Put(memberPath, memberPost);
|
||||||
|
sv6.Post(memberPath, memberPost);
|
||||||
|
|
||||||
s.Delete("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto memberDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto networkID = req.matches[1].str();
|
auto networkID = req.matches[1].str();
|
||||||
auto memberID = req.matches[2].str();
|
auto memberID = req.matches[2].str();
|
||||||
|
|
||||||
@ -1126,7 +1160,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||||||
_db.eraseMember(nwid, address);
|
_db.eraseMember(nwid, address);
|
||||||
|
|
||||||
setContent(req, res, member.dump());
|
setContent(req, res, member.dump());
|
||||||
});
|
};
|
||||||
|
s.Delete(memberPath, memberDelete);
|
||||||
|
sv6.Delete(memberPath, memberDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
|
void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
|
||||||
|
@ -70,6 +70,7 @@ public:
|
|||||||
|
|
||||||
void configureHTTPControlPlane(
|
void configureHTTPControlPlane(
|
||||||
httplib::Server &s,
|
httplib::Server &s,
|
||||||
|
httplib::Server &sV6,
|
||||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)>);
|
const std::function<void(const httplib::Request&, httplib::Response&, std::string)>);
|
||||||
|
|
||||||
void handleRemoteTrace(const ZT_RemoteTrace &rt);
|
void handleRemoteTrace(const ZT_RemoteTrace &rt);
|
||||||
|
12
debian/changelog
vendored
12
debian/changelog
vendored
@ -1,3 +1,15 @@
|
|||||||
|
zerotier-one (1.12.1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* See RELEASE-NOTES.md for release notes.
|
||||||
|
|
||||||
|
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 25 Aug 2023 01:00:00 -0700
|
||||||
|
|
||||||
|
zerotier-one (1.12.0) unstable; urgency=medium
|
||||||
|
|
||||||
|
* See RELEASE-NOTES.md for release notes.
|
||||||
|
|
||||||
|
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Thu, 17 Aug 2023 01:00:00 -0700
|
||||||
|
|
||||||
zerotier-one (1.10.6) unstable; urgency=medium
|
zerotier-one (1.10.6) unstable; urgency=medium
|
||||||
|
|
||||||
* See RELEASE-NOTES.md for release notes.
|
* See RELEASE-NOTES.md for release notes.
|
||||||
|
4
debian/control
vendored
4
debian/control
vendored
@ -3,14 +3,14 @@ Maintainer: Adam Ierymenko <adam.ierymenko@zerotier.com>
|
|||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Standards-Version: 3.9.6
|
Standards-Version: 3.9.6
|
||||||
Build-Depends: debhelper (>= 9)
|
Build-Depends: debhelper
|
||||||
Vcs-Git: git://github.com/zerotier/ZeroTierOne
|
Vcs-Git: git://github.com/zerotier/ZeroTierOne
|
||||||
Vcs-Browser: https://github.com/zerotier/ZeroTierOne
|
Vcs-Browser: https://github.com/zerotier/ZeroTierOne
|
||||||
Homepage: https://www.zerotier.com/
|
Homepage: https://www.zerotier.com/
|
||||||
|
|
||||||
Package: zerotier-one
|
Package: zerotier-one
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: iproute2, adduser, libstdc++6 (>= 5), openssl
|
Depends: adduser, libstdc++6 (>= 5), openssl
|
||||||
Homepage: https://www.zerotier.com/
|
Homepage: https://www.zerotier.com/
|
||||||
Description: ZeroTier network virtualization service
|
Description: ZeroTier network virtualization service
|
||||||
ZeroTier One lets you join ZeroTier virtual networks and
|
ZeroTier One lets you join ZeroTier virtual networks and
|
||||||
|
2
debian/control.wheezy
vendored
2
debian/control.wheezy
vendored
@ -10,7 +10,7 @@ Homepage: https://www.zerotier.com/
|
|||||||
|
|
||||||
Package: zerotier-one
|
Package: zerotier-one
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, iproute, libstdc++6
|
Depends: ${shlibs:Depends}, ${misc:Depends}, libstdc++6
|
||||||
Homepage: https://www.zerotier.com/
|
Homepage: https://www.zerotier.com/
|
||||||
Description: ZeroTier network virtualization service
|
Description: ZeroTier network virtualization service
|
||||||
ZeroTier One lets you join ZeroTier virtual networks and
|
ZeroTier One lets you join ZeroTier virtual networks and
|
||||||
|
0
debian/rules
vendored
Executable file → Normal file
0
debian/rules
vendored
Executable file → Normal file
0
debian/rules.wheezy
vendored
Executable file → Normal file
0
debian/rules.wheezy
vendored
Executable file → Normal file
@ -1,36 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>English</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>tap</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>com.zerotier.tap</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>tap</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>KEXT</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>20150118</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>OSBundleLibraries</key>
|
|
||||||
<dict>
|
|
||||||
<key>com.apple.kpi.mach</key>
|
|
||||||
<string>8.0</string>
|
|
||||||
<key>com.apple.kpi.bsd</key>
|
|
||||||
<string>8.0</string>
|
|
||||||
<key>com.apple.kpi.libkern</key>
|
|
||||||
<string>8.0</string>
|
|
||||||
<key>com.apple.kpi.unsupported</key>
|
|
||||||
<string>8.0</string>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
|
|
Binary file not shown.
@ -1,105 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>files</key>
|
|
||||||
<dict/>
|
|
||||||
<key>files2</key>
|
|
||||||
<dict/>
|
|
||||||
<key>rules</key>
|
|
||||||
<dict>
|
|
||||||
<key>^Resources/</key>
|
|
||||||
<true/>
|
|
||||||
<key>^Resources/.*\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1100</real>
|
|
||||||
</dict>
|
|
||||||
<key>^version.plist$</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>rules2</key>
|
|
||||||
<dict>
|
|
||||||
<key>.*\.dSYM($|/)</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>11</real>
|
|
||||||
</dict>
|
|
||||||
<key>^(.*/)?\.DS_Store$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>2000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
|
||||||
<dict>
|
|
||||||
<key>nested</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>10</real>
|
|
||||||
</dict>
|
|
||||||
<key>^.*</key>
|
|
||||||
<true/>
|
|
||||||
<key>^Info\.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^PkgInfo$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1100</real>
|
|
||||||
</dict>
|
|
||||||
<key>^[^/]+$</key>
|
|
||||||
<dict>
|
|
||||||
<key>nested</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>10</real>
|
|
||||||
</dict>
|
|
||||||
<key>^embedded\.provisionprofile$</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^version\.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
BIN
ext/bin/tap-windows-ndis6/arm64/zttap300.cat
Normal file
BIN
ext/bin/tap-windows-ndis6/arm64/zttap300.cat
Normal file
Binary file not shown.
@ -1,10 +1,15 @@
|
|||||||
|
;
|
||||||
|
; ****************************************************************************
|
||||||
|
; * Copyright (C) 2002-2014 OpenVPN Technologies, Inc. *
|
||||||
|
; * This program is free software; you can redistribute it and/or modify *
|
||||||
|
; * it under the terms of the GNU General Public License version 2 *
|
||||||
|
; * as published by the Free Software Foundation. *
|
||||||
|
; ****************************************************************************
|
||||||
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
; ZeroTier One Virtual Network Port NDIS6 Driver
|
; ZeroTier One Virtual Network Port NDIS6 Driver
|
||||||
;
|
;
|
||||||
; Based on the OpenVPN tap-windows6 driver version 9.21.1 git
|
|
||||||
; commit 48f027cfca52b16b5fd23d82e6016ed8a91fc4d3.
|
|
||||||
; See: https://github.com/OpenVPN/tap-windows6
|
|
||||||
;
|
|
||||||
; Modified by ZeroTier, Inc. - https://www.zerotier.com/
|
; Modified by ZeroTier, Inc. - https://www.zerotier.com/
|
||||||
;
|
;
|
||||||
; (1) Comment out 'tun' functionality and related features such as DHCP
|
; (1) Comment out 'tun' functionality and related features such as DHCP
|
||||||
@ -15,14 +20,6 @@
|
|||||||
; (5) Rename/rebrand driver as ZeroTier network port driver.
|
; (5) Rename/rebrand driver as ZeroTier network port driver.
|
||||||
;
|
;
|
||||||
; Original copyright below. Modifications released under GPLv2 as well.
|
; Original copyright below. Modifications released under GPLv2 as well.
|
||||||
;
|
|
||||||
; ****************************************************************************
|
|
||||||
; * Copyright (C) 2002-2014 OpenVPN Technologies, Inc. *
|
|
||||||
; * This program is free software; you can redistribute it and/or modify *
|
|
||||||
; * it under the terms of the GNU General Public License version 2 *
|
|
||||||
; * as published by the Free Software Foundation. *
|
|
||||||
; ****************************************************************************
|
|
||||||
;
|
|
||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
Signature = "$Windows NT$"
|
Signature = "$Windows NT$"
|
||||||
@ -30,17 +27,18 @@ CatalogFile = zttap300.cat
|
|||||||
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
|
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
|
||||||
Provider = %Provider%
|
Provider = %Provider%
|
||||||
Class = Net
|
Class = Net
|
||||||
DriverVer=08/13/2015,6.2.9200.20557
|
DriverVer=11/24/2020,3.00.00.1
|
||||||
|
|
||||||
[Strings]
|
[Strings]
|
||||||
DeviceDescription = "ZeroTier One Virtual Port"
|
DeviceDescription = "ZeroTier Virtual Port"
|
||||||
Provider = "ZeroTier Networks LLC" ; We're ZeroTier, Inc. now but kernel mode certs are $300+ so fuqdat.
|
Provider = "ZeroTier"
|
||||||
|
|
||||||
; To build for x86, take NTamd64 off this and off the named section manually, build, then put it back!
|
|
||||||
[Manufacturer]
|
[Manufacturer]
|
||||||
|
%Provider%=zttap300,NTx86
|
||||||
%Provider%=zttap300,NTamd64
|
%Provider%=zttap300,NTamd64
|
||||||
|
%Provider%=zttap300,NTarm64
|
||||||
|
|
||||||
[zttap300]
|
[zttap300.NTx86]
|
||||||
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
||||||
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
||||||
|
|
||||||
@ -48,6 +46,10 @@ Provider = "ZeroTier Networks LLC" ; We're ZeroTier, Inc. now but kernel mode ce
|
|||||||
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
||||||
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
||||||
|
|
||||||
|
[zttap300.NTarm64]
|
||||||
|
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
||||||
|
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
||||||
|
|
||||||
;----------------- Characteristics ------------
|
;----------------- Characteristics ------------
|
||||||
; NCF_PHYSICAL = 0x04
|
; NCF_PHYSICAL = 0x04
|
||||||
; NCF_VIRTUAL = 0x01
|
; NCF_VIRTUAL = 0x01
|
BIN
ext/bin/tap-windows-ndis6/arm64/zttap300.sys
Normal file
BIN
ext/bin/tap-windows-ndis6/arm64/zttap300.sys
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,143 +0,0 @@
|
|||||||
;
|
|
||||||
; ZeroTier One Virtual Network Port NDIS6 Driver
|
|
||||||
;
|
|
||||||
; Based on the OpenVPN tap-windows6 driver version 9.21.1 git
|
|
||||||
; commit 48f027cfca52b16b5fd23d82e6016ed8a91fc4d3.
|
|
||||||
; See: https://github.com/OpenVPN/tap-windows6
|
|
||||||
;
|
|
||||||
; Modified by ZeroTier, Inc. - https://www.zerotier.com/
|
|
||||||
;
|
|
||||||
; (1) Comment out 'tun' functionality and related features such as DHCP
|
|
||||||
; emulation, since we don't use any of that. Just want straight 'tap'.
|
|
||||||
; (2) Added custom IOCTL to enumerate L2 multicast memberships.
|
|
||||||
; (3) Increase maximum number of multicast memberships to 128.
|
|
||||||
; (4) Set default and max device MTU to 2800.
|
|
||||||
; (5) Rename/rebrand driver as ZeroTier network port driver.
|
|
||||||
;
|
|
||||||
; Original copyright below. Modifications released under GPLv2 as well.
|
|
||||||
;
|
|
||||||
; ****************************************************************************
|
|
||||||
; * Copyright (C) 2002-2014 OpenVPN Technologies, Inc. *
|
|
||||||
; * This program is free software; you can redistribute it and/or modify *
|
|
||||||
; * it under the terms of the GNU General Public License version 2 *
|
|
||||||
; * as published by the Free Software Foundation. *
|
|
||||||
; ****************************************************************************
|
|
||||||
;
|
|
||||||
|
|
||||||
[Version]
|
|
||||||
Signature = "$Windows NT$"
|
|
||||||
CatalogFile = zttap300.cat
|
|
||||||
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
|
|
||||||
Provider = %Provider%
|
|
||||||
Class = Net
|
|
||||||
DriverVer=08/13/2015,6.2.9200.20557
|
|
||||||
|
|
||||||
[Strings]
|
|
||||||
DeviceDescription = "ZeroTier One Virtual Port"
|
|
||||||
Provider = "ZeroTier Networks LLC" ; We're ZeroTier, Inc. now but kernel mode certs are $300+ so fuqdat.
|
|
||||||
|
|
||||||
; To build for x86, take NTamd64 off this and off the named section manually, build, then put it back!
|
|
||||||
[Manufacturer]
|
|
||||||
%Provider%=zttap300,NTamd64
|
|
||||||
|
|
||||||
[zttap300]
|
|
||||||
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
|
||||||
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
|
||||||
|
|
||||||
[zttap300.NTamd64]
|
|
||||||
%DeviceDescription% = zttap300.ndi, root\zttap300 ; Root enumerated
|
|
||||||
%DeviceDescription% = zttap300.ndi, zttap300 ; Legacy
|
|
||||||
|
|
||||||
;----------------- Characteristics ------------
|
|
||||||
; NCF_PHYSICAL = 0x04
|
|
||||||
; NCF_VIRTUAL = 0x01
|
|
||||||
; NCF_SOFTWARE_ENUMERATED = 0x02
|
|
||||||
; NCF_HIDDEN = 0x08
|
|
||||||
; NCF_NO_SERVICE = 0x10
|
|
||||||
; NCF_HAS_UI = 0x80
|
|
||||||
;----------------- Characteristics ------------
|
|
||||||
[zttap300.ndi]
|
|
||||||
CopyFiles = zttap300.driver, zttap300.files
|
|
||||||
AddReg = zttap300.reg
|
|
||||||
AddReg = zttap300.params.reg
|
|
||||||
Characteristics = 0x81
|
|
||||||
*IfType = 0x6 ; IF_TYPE_ETHERNET_CSMACD
|
|
||||||
*MediaType = 0x0 ; NdisMedium802_3
|
|
||||||
*PhysicalMediaType = 14 ; NdisPhysicalMedium802_3
|
|
||||||
|
|
||||||
[zttap300.ndi.Services]
|
|
||||||
AddService = zttap300, 2, zttap300.service
|
|
||||||
|
|
||||||
[zttap300.reg]
|
|
||||||
HKR, Ndi, Service, 0, "zttap300"
|
|
||||||
HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; yes, 'ndis5' is correct... yup, Windows.
|
|
||||||
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
|
|
||||||
HKR, , Manufacturer, 0, "%Provider%"
|
|
||||||
HKR, , ProductName, 0, "%DeviceDescription%"
|
|
||||||
|
|
||||||
[zttap300.params.reg]
|
|
||||||
HKR, Ndi\params\MTU, ParamDesc, 0, "MTU"
|
|
||||||
HKR, Ndi\params\MTU, Type, 0, "int"
|
|
||||||
HKR, Ndi\params\MTU, Default, 0, "2800"
|
|
||||||
HKR, Ndi\params\MTU, Optional, 0, "0"
|
|
||||||
HKR, Ndi\params\MTU, Min, 0, "100"
|
|
||||||
HKR, Ndi\params\MTU, Max, 0, "2800"
|
|
||||||
HKR, Ndi\params\MTU, Step, 0, "1"
|
|
||||||
HKR, Ndi\params\MediaStatus, ParamDesc, 0, "Media Status"
|
|
||||||
HKR, Ndi\params\MediaStatus, Type, 0, "enum"
|
|
||||||
HKR, Ndi\params\MediaStatus, Default, 0, "0"
|
|
||||||
HKR, Ndi\params\MediaStatus, Optional, 0, "0"
|
|
||||||
HKR, Ndi\params\MediaStatus\enum, "0", 0, "Application Controlled"
|
|
||||||
HKR, Ndi\params\MediaStatus\enum, "1", 0, "Always Connected"
|
|
||||||
HKR, Ndi\params\MAC, ParamDesc, 0, "MAC Address"
|
|
||||||
HKR, Ndi\params\MAC, Type, 0, "edit"
|
|
||||||
HKR, Ndi\params\MAC, Optional, 0, "1"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin, ParamDesc, 0, "Non-Admin Access"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin, Type, 0, "enum"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin, Default, 0, "0"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin, Optional, 0, "0"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin\enum, "0", 0, "Not Allowed"
|
|
||||||
HKR, Ndi\params\AllowNonAdmin\enum, "1", 0, "Allowed"
|
|
||||||
|
|
||||||
;---------- Service Type -------------
|
|
||||||
; SERVICE_KERNEL_DRIVER = 0x01
|
|
||||||
; SERVICE_WIN32_OWN_PROCESS = 0x10
|
|
||||||
;---------- Service Type -------------
|
|
||||||
|
|
||||||
;---------- Start Mode ---------------
|
|
||||||
; SERVICE_BOOT_START = 0x0
|
|
||||||
; SERVICE_SYSTEM_START = 0x1
|
|
||||||
; SERVICE_AUTO_START = 0x2
|
|
||||||
; SERVICE_DEMAND_START = 0x3
|
|
||||||
; SERVICE_DISABLED = 0x4
|
|
||||||
;---------- Start Mode ---------------
|
|
||||||
|
|
||||||
[zttap300.service]
|
|
||||||
DisplayName = %DeviceDescription%
|
|
||||||
ServiceType = 1
|
|
||||||
StartType = 3
|
|
||||||
ErrorControl = 1
|
|
||||||
LoadOrderGroup = NDIS
|
|
||||||
ServiceBinary = %12%\zttap300.sys
|
|
||||||
|
|
||||||
;----------------- Copy Flags ------------
|
|
||||||
; COPYFLG_NOSKIP = 0x02
|
|
||||||
; COPYFLG_NOVERSIONCHECK = 0x04
|
|
||||||
;----------------- Copy Flags ------------
|
|
||||||
|
|
||||||
[SourceDisksNames]
|
|
||||||
1 = %DeviceDescription%, zttap300.sys
|
|
||||||
|
|
||||||
[SourceDisksFiles]
|
|
||||||
zttap300.sys = 1
|
|
||||||
|
|
||||||
[DestinationDirs]
|
|
||||||
zttap300.files = 11
|
|
||||||
zttap300.driver = 12
|
|
||||||
|
|
||||||
[zttap300.files]
|
|
||||||
;
|
|
||||||
|
|
||||||
[zttap300.driver]
|
|
||||||
zttap300.sys,,,6 ; COPYFLG_NOSKIP | COPYFLG_NOVERSIONCHECK
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -701,7 +701,7 @@
|
|||||||
<key>USE_HFS+_COMPRESSION</key>
|
<key>USE_HFS+_COMPRESSION</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>VERSION</key>
|
<key>VERSION</key>
|
||||||
<string>1.10.6</string>
|
<string>1.12.1</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>TYPE</key>
|
<key>TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
|
@ -1,25 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<DOCUMENT Type="Advanced Installer" CreateVersion="10.9" version="20.4.1" Modules="enterprise" RootPath="." Language="en" Id="{DC564647-6BF0-4550-87F4-89C938D0159C}">
|
<DOCUMENT Type="Advanced Installer" CreateVersion="10.9" version="20.9.1" Modules="enterprise" RootPath="." Language="en" Id="{DC564647-6BF0-4550-87F4-89C938D0159C}">
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
|
||||||
<ROW Name="HiddenItems" Value="ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;AppXAppDetailsComponent;FixupComponent;AppXCapabilitiesComponent;AppXDependenciesComponent;AppXProductDetailsComponent;AppXVisualAssetsComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
|
<ROW Name="HiddenItems" Value="ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;AppXAppDetailsComponent;FixupComponent;AppXCapabilitiesComponent;AppXDependenciesComponent;AppXProductDetailsComponent;AppXVisualAssetsComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
||||||
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
||||||
<ROW Property="AI_EMBD_MSI_EXTR_PATH" Value="[TempFolder]" ValueLocId="-"/>
|
|
||||||
<ROW Property="AI_EXTERNALUIUNINSTALLERNAME" MultiBuildValue="DefaultBuild:aiui"/>
|
<ROW Property="AI_EXTERNALUIUNINSTALLERNAME" MultiBuildValue="DefaultBuild:aiui"/>
|
||||||
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
|
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
|
||||||
<ROW Property="AI_PREDEF_LCONDS_PROPS" Value="AI_DETECTED_DOTNET_VERSION"/>
|
|
||||||
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="ExeBuild:1"/>
|
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="ExeBuild:1"/>
|
||||||
<ROW Property="AI_PRODUCTNAME_ARP" Value="ZeroTier One"/>
|
<ROW Property="AI_PRODUCTNAME_ARP" Value="ZeroTier One"/>
|
||||||
<ROW Property="AI_REQUIRED_DOTNET_DISPLAY" MultiBuildValue="DefaultBuild:4.5" ValueLocId="-"/>
|
|
||||||
<ROW Property="AI_REQUIRED_DOTNET_VERSION" MultiBuildValue="DefaultBuild:4.5" ValueLocId="-"/>
|
|
||||||
<ROW Property="AI_ThemeStyle" Value="aero" MsiKey="AI_ThemeStyle"/>
|
<ROW Property="AI_ThemeStyle" Value="aero" MsiKey="AI_ThemeStyle"/>
|
||||||
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
|
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
|
||||||
<ROW Property="ALLUSERS" Value="1"/>
|
<ROW Property="ALLUSERS" Value="1"/>
|
||||||
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]."/>
|
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]."/>
|
||||||
<ROW Property="ARPCONTACT" Value="contact@zerotier.com"/>
|
<ROW Property="ARPCONTACT" Value="contact@zerotier.com"/>
|
||||||
<ROW Property="ARPHELPLINK" Value="https://www.zerotier.com/"/>
|
<ROW Property="ARPHELPLINK" Value="https://www.zerotier.com/"/>
|
||||||
<ROW Property="ARPHELPTELEPHONE" Value="949-505-9993"/>
|
|
||||||
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
|
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
|
||||||
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="ExeBuild:1"/>
|
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="ExeBuild:1"/>
|
||||||
<ROW Property="ARPPRODUCTICON" Value="ZeroTierIcon.exe" Type="8"/>
|
<ROW Property="ARPPRODUCTICON" Value="ZeroTierIcon.exe" Type="8"/>
|
||||||
@ -27,28 +22,27 @@
|
|||||||
<ROW Property="ARPURLINFOABOUT" Value="https://www.zerotier.com/"/>
|
<ROW Property="ARPURLINFOABOUT" Value="https://www.zerotier.com/"/>
|
||||||
<ROW Property="ARPURLUPDATEINFO" Value="https://www.zerotier.com/"/>
|
<ROW Property="ARPURLUPDATEINFO" Value="https://www.zerotier.com/"/>
|
||||||
<ROW Property="AiFeatIcoZeroTierOne" Value="ZeroTierIcon.exe" Type="8"/>
|
<ROW Property="AiFeatIcoZeroTierOne" Value="ZeroTierIcon.exe" Type="8"/>
|
||||||
<ROW Property="LIMITUI" MultiBuildValue="DefaultBuild:1"/>
|
|
||||||
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
|
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
|
||||||
<ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
|
<ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
|
||||||
<ROW Property="ProductCode" Value="1033:{8D8ECA43-43FF-4358-84E9-4629D8855C03} " Type="16"/>
|
<ROW Property="ProductCode" Value="1033:{22301716-32F1-4247-8167-3E5441A87A58} " Type="16"/>
|
||||||
<ROW Property="ProductLanguage" Value="1033"/>
|
<ROW Property="ProductLanguage" Value="1033"/>
|
||||||
<ROW Property="ProductName" Value="ZeroTier One"/>
|
<ROW Property="ProductName" Value="ZeroTier One"/>
|
||||||
<ROW Property="ProductVersion" Value="1.10.6"/>
|
<ROW Property="ProductVersion" Value="1.12.1" Options="32"/>
|
||||||
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
|
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
|
||||||
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
||||||
<ROW Property="UpgradeCode" Value="{B0E2A5F3-88B6-4E77-B922-CB4739B4C4C8}"/>
|
<ROW Property="UpgradeCode" Value="{B0E2A5F3-88B6-4E77-B922-CB4739B4C4C8}"/>
|
||||||
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86, Windows 8 x86, Windows 8.1 x86" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT64" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT64" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 8.1 x64, Windows Server 2012 R2 x64" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNT64Display" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNT64Display" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 8.1 x64, Windows Server 2012 R2 x64" ValueLocId="-"/>
|
||||||
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86" ValueLocId="-"/>
|
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86, Windows 8 x86, Windows 8.1 x86" ValueLocId="-"/>
|
||||||
<ROW Property="ZTHEADLESS" Value="No"/>
|
<ROW Property="ZTHEADLESS" Value="No"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||||
@ -59,52 +53,58 @@
|
|||||||
<ROW Directory="ProgramMenuFolder" Directory_Parent="TARGETDIR" DefaultDir="PROGRA~2|ProgramMenuFolder" IsPseudoRoot="1"/>
|
<ROW Directory="ProgramMenuFolder" Directory_Parent="TARGETDIR" DefaultDir="PROGRA~2|ProgramMenuFolder" IsPseudoRoot="1"/>
|
||||||
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||||
<ROW Directory="ZeroTier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="ZeroTier" DirectoryOptions="12"/>
|
<ROW Directory="ZeroTier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="ZeroTier" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="driverarm64_Dir" Directory_Parent="One_Dir" DefaultDir=".:DRIVER~1|driver-arm64" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="driverx64_Dir" Directory_Parent="One_Dir" DefaultDir=".:DRIVER~2|driver-x64" DirectoryOptions="15"/>
|
||||||
|
<ROW Directory="driverx86_Dir" Directory_Parent="One_Dir" DefaultDir=".:DRIVER~3|driver-x86" DirectoryOptions="15"/>
|
||||||
<ROW Directory="i686_1_Dir" Directory_Parent="ProgramMenuFolder" DefaultDir=".:i686"/>
|
<ROW Directory="i686_1_Dir" Directory_Parent="ProgramMenuFolder" DefaultDir=".:i686"/>
|
||||||
<ROW Directory="i686_Dir" Directory_Parent="APPDIR" DefaultDir=".:i686" DirectoryOptions="15"/>
|
<ROW Directory="i686_Dir" Directory_Parent="APPDIR" DefaultDir=".:i686" DirectoryOptions="15"/>
|
||||||
<ROW Directory="networks.d_Dir" Directory_Parent="One_Dir" DefaultDir="networks.d" DirectoryOptions="12"/>
|
<ROW Directory="networks.d_Dir" Directory_Parent="One_Dir" DefaultDir="networks.d" DirectoryOptions="12"/>
|
||||||
<ROW Directory="regid.201001.com.zerotier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="REGID2~1.ZER|regid.2010-01.com.zerotier" DirectoryOptions="12"/>
|
<ROW Directory="regid.201001.com.zerotier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="REGID2~1.ZER|regid.2010-01.com.zerotier" DirectoryOptions="12"/>
|
||||||
<ROW Directory="tapwindows_Dir" Directory_Parent="One_Dir" DefaultDir="TAP-WI~1|tap-windows" DirectoryOptions="12"/>
|
|
||||||
<ROW Directory="x64_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x64" DirectoryOptions="12"/>
|
|
||||||
<ROW Directory="x86_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x86" DirectoryOptions="12"/>
|
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||||
<ROW Component="AI_CustomARPName" ComponentId="{D8521222-B184-44D4-84AE-8B6549555BD8}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
<ROW Component="AI_CustomARPName" ComponentId="{E391FCA4-D005-4309-A481-415FAEB15274}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||||
<ROW Component="AI_DisableModify" ComponentId="{46FFA8C5-A0CB-4E05-9AD3-911D543DE8CA}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
<ROW Component="AI_DisableModify" ComponentId="{46FFA8C5-A0CB-4E05-9AD3-911D543DE8CA}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||||
<ROW Component="AI_ExePath" ComponentId="{8E02B36C-7A19-429B-A93E-77A9261AC918}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
<ROW Component="AI_ExePath" ComponentId="{8E02B36C-7A19-429B-A93E-77A9261AC918}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
||||||
<ROW Component="APPDIR" ComponentId="{4DD7907D-D7FE-4CD6-B1A0-B5C1625F5133}" Directory_="APPDIR" Attributes="0"/>
|
<ROW Component="APPDIR" ComponentId="{4DD7907D-D7FE-4CD6-B1A0-B5C1625F5133}" Directory_="APPDIR" Attributes="0"/>
|
||||||
<ROW Component="One" ComponentId="{41AB11E7-066E-414A-96F8-F051D3D3B353}" Directory_="One_Dir" Attributes="0"/>
|
<ROW Component="One" ComponentId="{41AB11E7-066E-414A-96F8-F051D3D3B353}" Directory_="One_Dir" Attributes="0"/>
|
||||||
<ROW Component="ProductInformation" ComponentId="{DB078D04-EA8E-4A7C-9001-89BAD932F9D9}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
<ROW Component="ProductInformation" ComponentId="{DB078D04-EA8E-4A7C-9001-89BAD932F9D9}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
||||||
<ROW Component="ZeroTier" ComponentId="{8864F744-9BDF-4891-88A1-6D23D76BCCB1}" Directory_="ZeroTier_Dir" Attributes="0"/>
|
<ROW Component="ZeroTier" ComponentId="{8864F744-9BDF-4891-88A1-6D23D76BCCB1}" Directory_="ZeroTier_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="driverarm64" ComponentId="{EF9A1336-B00D-409A-BD93-EBA3A266F06D}" Directory_="driverarm64_Dir" Attributes="0" Condition="(VersionNT >= 500) AND AiArm64"/>
|
||||||
|
<ROW Component="driverx64" ComponentId="{29698845-0BA3-46C9-957C-E034B5BE5123}" Directory_="driverx64_Dir" Attributes="0" Condition="VersionNT64 AND NOT AiArm64"/>
|
||||||
|
<ROW Component="driverx86" ComponentId="{60D9AE83-35CD-4E0C-B799-A228D0288D04}" Directory_="driverx86_Dir" Attributes="0" Condition="(VersionNT >= 500) AND NOT VersionNT64 AND NOT AiArm64"/>
|
||||||
<ROW Component="i686" ComponentId="{6EC46014-3BFD-4017-ACBC-C4417D1D6361}" Directory_="i686_1_Dir" Attributes="0"/>
|
<ROW Component="i686" ComponentId="{6EC46014-3BFD-4017-ACBC-C4417D1D6361}" Directory_="i686_1_Dir" Attributes="0"/>
|
||||||
<ROW Component="i686_1" ComponentId="{60156BDC-31D7-47EE-A307-B62129607DD5}" Directory_="i686_Dir" Attributes="0"/>
|
<ROW Component="i686_1" ComponentId="{60156BDC-31D7-47EE-A307-B62129607DD5}" Directory_="i686_Dir" Attributes="0"/>
|
||||||
<ROW Component="networks.d" ComponentId="{EF54D0DF-889F-41DC-AF5C-4E7F96AB1C8B}" Directory_="networks.d_Dir" Attributes="0"/>
|
<ROW Component="networks.d" ComponentId="{EF54D0DF-889F-41DC-AF5C-4E7F96AB1C8B}" Directory_="networks.d_Dir" Attributes="0"/>
|
||||||
<ROW Component="regid.201001.com.zerotier" ComponentId="{A39C80FC-6A8F-454F-9052-10DAC3C3B139}" Directory_="regid.201001.com.zerotier_Dir" Attributes="0"/>
|
<ROW Component="regid.201001.com.zerotier" ComponentId="{A39C80FC-6A8F-454F-9052-10DAC3C3B139}" Directory_="regid.201001.com.zerotier_Dir" Attributes="0"/>
|
||||||
<ROW Component="tapwindows" ComponentId="{3E9CBCCE-EC9D-4802-B8FD-DADB4CC532A2}" Directory_="tapwindows_Dir" Attributes="0"/>
|
|
||||||
<ROW Component="x64" ComponentId="{4DD1F90B-53F1-4390-BDF1-E6D9B39B8D80}" Directory_="x64_Dir" Attributes="0"/>
|
|
||||||
<ROW Component="x86" ComponentId="{8E83C577-3C22-49B7-82A8-369BE1F19224}" Directory_="x86_Dir" Attributes="0"/>
|
|
||||||
<ROW Component="zerotier_desktop_ui.exe" ComponentId="{61A7F53C-C6C3-418D-A652-2E4D9F8173AA}" Directory_="APPDIR" Attributes="256" Condition="ZTHEADLESS = "No" AND VersionNT64" KeyPath="zerotier_desktop_ui.exe"/>
|
<ROW Component="zerotier_desktop_ui.exe" ComponentId="{61A7F53C-C6C3-418D-A652-2E4D9F8173AA}" Directory_="APPDIR" Attributes="256" Condition="ZTHEADLESS = "No" AND VersionNT64" KeyPath="zerotier_desktop_ui.exe"/>
|
||||||
<ROW Component="zerotier_desktop_ui.exe_1" ComponentId="{5CFEA823-6D17-4EAA-BBAA-810E1C89555D}" Directory_="i686_Dir" Attributes="0" Condition="ZTHEADLESS = "No" AND NOT VersionNT64" KeyPath="zerotier_desktop_ui.exe_1"/>
|
<ROW Component="zerotier_desktop_ui.exe_1" ComponentId="{5CFEA823-6D17-4EAA-BBAA-810E1C89555D}" Directory_="i686_Dir" Attributes="0" Condition="ZTHEADLESS = "No" AND NOT VersionNT64 AND NOT AiArm64" KeyPath="zerotier_desktop_ui.exe_1"/>
|
||||||
<ROW Component="zerotierone_x64.exe" ComponentId="{DFCFB72D-B055-4E60-B6D8-81FF585C2183}" Directory_="One_Dir" Attributes="256" Condition="VersionNT64" KeyPath="zerotierone_x64.exe"/>
|
<ROW Component="zerotierone_x64.exe" ComponentId="{DFCFB72D-B055-4E60-B6D8-81FF585C2183}" Directory_="One_Dir" Attributes="256" Condition="VersionNT64" KeyPath="zerotierone_x64.exe"/>
|
||||||
<ROW Component="zerotierone_x86.exe" ComponentId="{5D2F3366-4FE1-40A4-A81A-66C49FA11F1C}" Directory_="One_Dir" Attributes="0" Condition="NOT VersionNT64" KeyPath="zerotierone_x86.exe"/>
|
<ROW Component="zerotierone_x86.exe" ComponentId="{5D2F3366-4FE1-40A4-A81A-66C49FA11F1C}" Directory_="One_Dir" Attributes="0" Condition="NOT VersionNT64 AND NOT AiArm64" KeyPath="zerotierone_x86.exe"/>
|
||||||
<ROW Component="zttap300_x64_win10" ComponentId="{D4839F5E-FB94-41CB-9B1B-177A97ADC904}" Directory_="x64_Dir" Attributes="256" Condition="VersionNT64" KeyPath="zttap300.inf"/>
|
<ROW Component="zttap300.inf" ComponentId="{2591DB80-835D-445D-86FB-DF0717D2D904}" Directory_="driverx64_Dir" Attributes="256" Condition="VersionNT64 AND NOT AiArm64" KeyPath="zttap300.inf"/>
|
||||||
<ROW Component="zttap300_x86_win10" ComponentId="{9F913E48-095B-4EA3-98DA-EDAB1593F3E3}" Directory_="x86_Dir" Attributes="0" Condition="NOT VersionNT64" KeyPath="zttap300.cat_3" Type="0"/>
|
<ROW Component="zttap300.inf_1" ComponentId="{DE7DABB5-7393-4FCD-B2D6-4DD6CAC0E742}" Directory_="driverx86_Dir" Attributes="0" Condition="(VersionNT >= 500) AND NOT VersionNT64 AND NOT AiArm64" KeyPath="zttap300.inf_1"/>
|
||||||
|
<ROW Component="zttap300.inf_2" ComponentId="{8CD16F5C-D1A7-4991-9B77-C0D1ABEA21F6}" Directory_="driverarm64_Dir" Attributes="256" Condition="(VersionNT >= 500) AND AiArm64" KeyPath="zttap300.inf_2"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||||
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
|
||||||
<ROW Feature="ZeroTierOne" Title="MainFeature" Description="ZeroTier One" Display="0" Level="1" Directory_="APPDIR" Attributes="0"/>
|
<ROW Feature="ZeroTierOne" Title="MainFeature" Description="ZeroTier One" Display="0" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ROW Feature="zttap300" Feature_Parent="ZeroTierOne" Title="zttap300" Description="Description" Display="7" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ROW Feature="zttap300_1" Feature_Parent="ZeroTierOne" Title="zttap300" Description="Description" Display="3" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ROW Feature="zttap300_2" Feature_Parent="ZeroTierOne" Title="zttap300" Description="Description" Display="5" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
<ATTRIBUTE name="CurrentFeature" value="ZeroTierOne"/>
|
<ATTRIBUTE name="CurrentFeature" value="ZeroTierOne"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
||||||
<ROW File="zerotierone_x86.exe" Component_="zerotierone_x86.exe" FileName="ZEROTI~1.EXE|zerotier-one_x86.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\Win32\Release\zerotier-one_x86.exe" SelfReg="false" DigSign="true"/>
|
<ROW File="zerotierone_x86.exe" Component_="zerotierone_x86.exe" FileName="ZEROTI~1.EXE|zerotier-one_x86.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\Win32\Release\zerotier-one_x86.exe" SelfReg="false" DigSign="true"/>
|
||||||
<ROW File="zerotierone_x64.exe" Component_="zerotierone_x64.exe" FileName="ZEROTI~2.EXE|zerotier-one_x64.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\x64\Release\zerotier-one_x64.exe" SelfReg="false" DigSign="true"/>
|
<ROW File="zerotierone_x64.exe" Component_="zerotierone_x64.exe" FileName="ZEROTI~2.EXE|zerotier-one_x64.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\x64\Release\zerotier-one_x64.exe" SelfReg="false" DigSign="true"/>
|
||||||
<ROW File="zttap300.cat_2" Component_="zttap300_x64_win10" FileName="zttap300.cat" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.cat" SelfReg="false"/>
|
|
||||||
<ROW File="zttap300.sys_2" Component_="zttap300_x64_win10" FileName="zttap300.sys" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.sys" SelfReg="false"/>
|
|
||||||
<ROW File="zttap300.inf" Component_="zttap300_x64_win10" FileName="zttap300.inf" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.inf" SelfReg="false"/>
|
|
||||||
<ROW File="zttap300.cat_3" Component_="zttap300_x86_win10" FileName="zttap300.cat" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.cat" SelfReg="false"/>
|
|
||||||
<ROW File="zttap300.sys_3" Component_="zttap300_x86_win10" FileName="zttap300.sys" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.sys" SelfReg="false"/>
|
|
||||||
<ROW File="zttap300.inf_1" Component_="zttap300_x86_win10" FileName="zttap300.inf" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.inf" SelfReg="false"/>
|
|
||||||
<ROW File="zerotier_desktop_ui.exe" Component_="zerotier_desktop_ui.exe" FileName="ZEROTI~2.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\x86_64-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
<ROW File="zerotier_desktop_ui.exe" Component_="zerotier_desktop_ui.exe" FileName="ZEROTI~2.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\x86_64-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
||||||
<ROW File="zerotier_desktop_ui.exe_1" Component_="zerotier_desktop_ui.exe_1" FileName="ZEROTI~1.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\i686-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
<ROW File="zerotier_desktop_ui.exe_1" Component_="zerotier_desktop_ui.exe_1" FileName="ZEROTI~1.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\i686-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
||||||
|
<ROW File="zttap300.inf" Component_="zttap300.inf" FileName="zttap300.inf" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.inf" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.sys" Component_="zttap300.inf" FileName="zttap300.sys" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.sys" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.cat" Component_="zttap300.inf" FileName="zttap300.cat" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.cat" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.cat_1" Component_="zttap300.inf_1" FileName="zttap300.cat" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.cat" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.inf_1" Component_="zttap300.inf_1" FileName="zttap300.inf" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.inf" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.sys_1" Component_="zttap300.inf_1" FileName="zttap300.sys" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.sys" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.cat_2" Component_="zttap300.inf_2" FileName="zttap300.cat" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\arm64\zttap300.cat" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.inf_2" Component_="zttap300.inf_2" FileName="zttap300.inf" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\arm64\zttap300.inf" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.sys_2" Component_="zttap300.inf_2" FileName="zttap300.sys" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\arm64\zttap300.sys" SelfReg="false"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.custcomp.AiComponentAliasComponent">
|
<COMPONENT cid="caphyon.advinst.custcomp.AiComponentAliasComponent">
|
||||||
<ROW AliasRowId="AI_CustomARPName" AliasRowOperation="2" Condition="#DefaultBuild:ZTHEADLESS="No""/>
|
<ROW AliasRowId="AI_CustomARPName" AliasRowOperation="2" Condition="#DefaultBuild:ZTHEADLESS="No""/>
|
||||||
@ -112,9 +112,6 @@
|
|||||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||||
<ROW BootstrOptKey="GlobalOptions" GeneralOptions="qh" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites"/>
|
<ROW BootstrOptKey="GlobalOptions" GeneralOptions="qh" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrapperUISequenceComponent">
|
|
||||||
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
|
||||||
</COMPONENT>
|
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||||
<ROW BuildKey="DefaultBuild" BuildName="MSI" BuildOrder="1" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="4" ExtUI="true" UseLargeSchema="true"/>
|
<ROW BuildKey="DefaultBuild" BuildName="MSI" BuildOrder="1" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="4" ExtUI="true" UseLargeSchema="true"/>
|
||||||
<ROW BuildKey="ExeBuild" BuildName="update" BuildOrder="2" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="2" CabsLocation="1" CompressCabs="false" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="4" PackageType="1" FilesInsideExe="true" ExeIconPath="..\..\..\artwork\ZeroTierIcon.ico" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" MsiCmdLine="/qn" ExtUI="true" UseLargeSchema="true" ExeName="zt1_update_2_1,2_[|ProductVersion]_0"/>
|
<ROW BuildKey="ExeBuild" BuildName="update" BuildOrder="2" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="2" CabsLocation="1" CompressCabs="false" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="4" PackageType="1" FilesInsideExe="true" ExeIconPath="..\..\..\artwork\ZeroTierIcon.ico" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" MsiCmdLine="/qn" ExtUI="true" UseLargeSchema="true" ExeName="zt1_update_2_1,2_[|ProductVersion]_0"/>
|
||||||
@ -122,14 +119,6 @@
|
|||||||
<COMPONENT cid="caphyon.advinst.msicomp.CacheComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.CacheComponent">
|
||||||
<ATTRIBUTE name="Enable" value="false"/>
|
<ATTRIBUTE name="Enable" value="false"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageComponent">
|
|
||||||
<ROW ChainedPackage="ZeroTierOne_NDIS6_x64.msi" Order="1" Options="110" InstallCondition="VersionNT64 AND VersionNT >= 1000" MaintenanceCondition="FALSE" RemoveCondition="REMOVE="ALL" AND VersionNT64"/>
|
|
||||||
<ROW ChainedPackage="ZeroTierOne_NDIS6_x86.msi" Order="2" Options="110" InstallCondition="(NOT VersionNT64) And VersionNT >= 1000" MaintenanceCondition="FALSE" RemoveCondition="REMOVE="ALL" AND (NOT VersionNT64)"/>
|
|
||||||
</COMPONENT>
|
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageFileComponent">
|
|
||||||
<ROW FileId="ZeroTierOne_NDIS6_x64.msi" ChainedPackage="ZeroTierOne_NDIS6_x64.msi" Options="1" TargetPath="ZeroTierOne_NDIS6_x64.msi" Content="..\..\bin\tap-windows-ndis6\x64\ZeroTierOne_NDIS6_x64.msi"/>
|
|
||||||
<ROW FileId="ZeroTierOne_NDIS6_x86.msi" ChainedPackage="ZeroTierOne_NDIS6_x86.msi" Options="1" TargetPath="ZeroTierOne_NDIS6_x86.msi" Content="..\..\bin\tap-windows-ndis6\x86\ZeroTierOne_NDIS6_x86.msi"/>
|
|
||||||
</COMPONENT>
|
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||||
<ROW Path="<AI_DICTS>ui.ail"/>
|
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||||
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
||||||
@ -186,15 +175,17 @@
|
|||||||
<ROW Name="ExternalUICleaner.dll" SourcePath="<AI_CUSTACTS>ExternalUICleaner.dll"/>
|
<ROW Name="ExternalUICleaner.dll" SourcePath="<AI_CUSTACTS>ExternalUICleaner.dll"/>
|
||||||
<ROW Name="NetFirewall.dll" SourcePath="<AI_CUSTACTS>NetFirewall.dll"/>
|
<ROW Name="NetFirewall.dll" SourcePath="<AI_CUSTACTS>NetFirewall.dll"/>
|
||||||
<ROW Name="Prereq.dll" SourcePath="<AI_CUSTACTS>Prereq.dll"/>
|
<ROW Name="Prereq.dll" SourcePath="<AI_CUSTACTS>Prereq.dll"/>
|
||||||
<ROW Name="SoftwareDetector.dll" SourcePath="<AI_CUSTACTS>SoftwareDetector.dll"/>
|
|
||||||
<ROW Name="TxtUpdater.dll" SourcePath="<AI_CUSTACTS>TxtUpdater.dll"/>
|
<ROW Name="TxtUpdater.dll" SourcePath="<AI_CUSTACTS>TxtUpdater.dll"/>
|
||||||
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
||||||
<ROW Name="chainersupport.dll" SourcePath="<AI_CUSTACTS>chainersupport.dll"/>
|
|
||||||
<ROW Name="lzmaextractor.dll" SourcePath="<AI_CUSTACTS>lzmaextractor.dll"/>
|
<ROW Name="lzmaextractor.dll" SourcePath="<AI_CUSTACTS>lzmaextractor.dll"/>
|
||||||
<ROW Name="msichainer.exe" SourcePath="<AI_CUSTACTS>msichainer.exe"/>
|
|
||||||
<ROW Name="viewer.exe" SourcePath="<AI_CUSTACTS>viewer.exe" DigSign="true"/>
|
<ROW Name="viewer.exe" SourcePath="<AI_CUSTACTS>viewer.exe" DigSign="true"/>
|
||||||
<ROW Name="xmlCfg.dll" SourcePath="<AI_CUSTACTS>xmlCfg.dll"/>
|
<ROW Name="xmlCfg.dll" SourcePath="<AI_CUSTACTS>xmlCfg.dll"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiConditionComponent">
|
||||||
|
<ROW Feature_="zttap300" Level="0" Condition="((VersionNT < 500) OR (NOT VersionNT))"/>
|
||||||
|
<ROW Feature_="zttap300_1" Level="0" Condition="((VersionNT < 500) OR (NOT VersionNT))"/>
|
||||||
|
<ROW Feature_="zttap300_2" Level="0" Condition="((VersionNT < 500) OR (NOT VersionNT))"/>
|
||||||
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
|
||||||
<ROW Dialog_="ExitDialog" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Cancel]" Order="200" TextLocId="-" MsiKey="ExitDialog#Cancel" Options="1"/>
|
<ROW Dialog_="ExitDialog" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Cancel]" Order="200" TextLocId="-" MsiKey="ExitDialog#Cancel" Options="1"/>
|
||||||
<ROW Dialog_="ExitDialog" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ExitDialog#Back" Options="1"/>
|
<ROW Dialog_="ExitDialog" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ExitDialog#Back" Options="1"/>
|
||||||
@ -203,6 +194,7 @@
|
|||||||
<ROW Dialog_="ExitDialog" Control="LaunchProdCheckBox" Type="CheckBox" X="135" Y="170" Width="10" Height="10" Attributes="2" Property="RUNAPPLICATION" Order="700" MsiKey="ExitDialog#LaunchProdCheckBox" Options="1"/>
|
<ROW Dialog_="ExitDialog" Control="LaunchProdCheckBox" Type="CheckBox" X="135" Y="170" Width="10" Height="10" Attributes="2" Property="RUNAPPLICATION" Order="700" MsiKey="ExitDialog#LaunchProdCheckBox" Options="1"/>
|
||||||
<ROW Dialog_="ExitDialog" Control="Description" Type="Text" X="135" Y="86" Width="220" Height="20" Attributes="196611" Text="Click the "Finish" button to exit the [Wizard]." Order="800" TextLocId="Control.Text.ExitDialog#Description" MsiKey="ExitDialog#Description"/>
|
<ROW Dialog_="ExitDialog" Control="Description" Type="Text" X="135" Y="86" Width="220" Height="20" Attributes="196611" Text="Click the "Finish" button to exit the [Wizard]." Order="800" TextLocId="Control.Text.ExitDialog#Description" MsiKey="ExitDialog#Description"/>
|
||||||
<ROW Dialog_="ExitDialog" Control="BottomLine" Type="Line" X="0" Y="234" Width="372" Height="0" Attributes="1" Order="900" MsiKey="ExitDialog#BottomLine"/>
|
<ROW Dialog_="ExitDialog" Control="BottomLine" Type="Line" X="0" Y="234" Width="372" Height="0" Attributes="1" Order="900" MsiKey="ExitDialog#BottomLine"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="Hyperlink" Type="Hyperlink" X="135" Y="140" Width="220" Height="20" Attributes="65539" Property="AiReadmeLink" Text="<a href="[AiReadmeLink]">View readme</a>" Order="1000" TextLocId="Control.Text.ExitDialog#ViewReadmeHyperlink" MsiKey="ExitDialog#Hyperlink"/>
|
||||||
<ROW Dialog_="WelcomeDlg" Control="WelcomeDlgDialogInitializer" Type="DialogInitializer" X="0" Y="0" Width="0" Height="0" Attributes="0" Order="-1" TextLocId="-" HelpLocId="-" ExtDataLocId="-"/>
|
<ROW Dialog_="WelcomeDlg" Control="WelcomeDlgDialogInitializer" Type="DialogInitializer" X="0" Y="0" Width="0" Height="0" Attributes="0" Order="-1" TextLocId="-" HelpLocId="-" ExtDataLocId="-"/>
|
||||||
<ROW Dialog_="Windows7Warning" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
<ROW Dialog_="Windows7Warning" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||||
<ROW Dialog_="Windows7Warning" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
<ROW Dialog_="Windows7Warning" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||||
@ -216,7 +208,7 @@
|
|||||||
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText@ExitDialog#ViewReadmeText"/>
|
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText@ExitDialog#ViewReadmeText"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlConditionComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlConditionComponent">
|
||||||
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText#Hide#((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 2) AND (CTRLS <> 3))@ExitDialog#ViewReadmeText#Hide#((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 1) AND (CTRLS <> 3))"/>
|
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText#Hide#((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 2) AND (CTRLS <> 3))@ExitDialog#ViewReadmeText#Hide#(((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 1) AND (CTRLS <> 3))) OR AiReadmeLink"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="3"/>
|
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="3"/>
|
||||||
@ -247,7 +239,6 @@
|
|||||||
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[Text_Next]" Argument="[Text_Install]" Condition="AI_INSTALL" Ordering="3" Options="2"/>
|
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[Text_Next]" Argument="[Text_Install]" Condition="AI_INSTALL" Ordering="3" Options="2"/>
|
||||||
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[ButtonText_Next]" Argument="[AI_ButtonText_Next_Orig]" Condition="AI_INSTALL" Ordering="0" Options="2"/>
|
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[ButtonText_Next]" Argument="[AI_ButtonText_Next_Orig]" Condition="AI_INSTALL" Ordering="0" Options="2"/>
|
||||||
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[Text_Next]" Argument="[AI_Text_Next_Orig]" Condition="AI_INSTALL" Ordering="1" Options="2"/>
|
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[Text_Next]" Argument="[AI_Text_Next_Orig]" Condition="AI_INSTALL" Ordering="1" Options="2"/>
|
||||||
<ROW Dialog_="ExitDialog" Control_="Finish" Event="DoAction" Argument="AI_ChainerScheduleReboot" Condition="Not AIEXTERNALUI" Ordering="302"/>
|
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
||||||
<ROW Directory_="networks.d_Dir" Component_="networks.d" ManualDelete="false"/>
|
<ROW Directory_="networks.d_Dir" Component_="networks.d" ManualDelete="false"/>
|
||||||
@ -256,16 +247,13 @@
|
|||||||
<ROW Directory_="i686_1_Dir" Component_="i686" ManualDelete="false"/>
|
<ROW Directory_="i686_1_Dir" Component_="i686" ManualDelete="false"/>
|
||||||
<ROW Directory_="ZeroTier_Dir" Component_="ZeroTier" ManualDelete="true"/>
|
<ROW Directory_="ZeroTier_Dir" Component_="ZeroTier" ManualDelete="true"/>
|
||||||
<ROW Directory_="One_Dir" Component_="One" ManualDelete="false"/>
|
<ROW Directory_="One_Dir" Component_="One" ManualDelete="false"/>
|
||||||
<ROW Directory_="tapwindows_Dir" Component_="tapwindows" ManualDelete="false"/>
|
<ROW Directory_="driverx64_Dir" Component_="driverx64" ManualDelete="false"/>
|
||||||
<ROW Directory_="x64_Dir" Component_="x64" ManualDelete="false"/>
|
<ROW Directory_="driverx86_Dir" Component_="driverx86" ManualDelete="false"/>
|
||||||
<ROW Directory_="x86_Dir" Component_="x86" ManualDelete="false"/>
|
|
||||||
<ROW Directory_="i686_Dir" Component_="i686_1" ManualDelete="false"/>
|
<ROW Directory_="i686_Dir" Component_="i686_1" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="driverarm64_Dir" Component_="driverarm64" ManualDelete="false"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||||
<ROW Action="AI_AppSearchEx" Type="1" Source="Prereq.dll" Target="DoAppSearchEx"/>
|
|
||||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||||
<ROW Action="AI_ChainerScheduleReboot" Type="1" Source="chainersupport.dll" Target="ScheduleReboot" WithoutSeq="true"/>
|
|
||||||
<ROW Action="AI_CommitChainers" Type="11841" Source="chainersupport.dll" Target="CommitChainedPackages" WithoutSeq="true"/>
|
|
||||||
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[~]"/>
|
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="[~]"/>
|
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="[~]"/>
|
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
@ -278,7 +266,6 @@
|
|||||||
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||||
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
|
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||||
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||||
<ROW Action="AI_DetectSoftware" Type="257" Source="SoftwareDetector.dll" Target="OnDetectSoftware"/>
|
|
||||||
<ROW Action="AI_DoRemoveExternalUIStub" Type="3585" Source="ExternalUICleaner.dll" Target="DoRemoveExternalUIStub" WithoutSeq="true"/>
|
<ROW Action="AI_DoRemoveExternalUIStub" Type="3585" Source="ExternalUICleaner.dll" Target="DoRemoveExternalUIStub" WithoutSeq="true"/>
|
||||||
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
||||||
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
||||||
@ -295,13 +282,11 @@
|
|||||||
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
||||||
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
|
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
|
||||||
<ROW Action="AI_PrepareChainers" Type="1" Source="chainersupport.dll" Target="PrepareChainedPackages"/>
|
|
||||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||||
<ROW Action="AI_RemoveExternalUIStub" Type="1" Source="ExternalUICleaner.dll" Target="RemoveExternalUIStub"/>
|
<ROW Action="AI_RemoveExternalUIStub" Type="1" Source="ExternalUICleaner.dll" Target="RemoveExternalUIStub"/>
|
||||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||||
<ROW Action="AI_ResolveLocalizedCredentials" Type="1" Source="aicustact.dll" Target="GetLocalizedCredentials"/>
|
<ROW Action="AI_ResolveLocalizedCredentials" Type="1" Source="aicustact.dll" Target="GetLocalizedCredentials"/>
|
||||||
<ROW Action="AI_RollbackChainers" Type="11585" Source="chainersupport.dll" Target="RollbackChainedPackages" WithoutSeq="true"/>
|
|
||||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||||
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
|
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
|
||||||
@ -326,9 +311,6 @@
|
|||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
|
||||||
<ROW Dialog="Windows7Warning" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
<ROW Dialog="Windows7Warning" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiEmbeddedChainerComponent">
|
|
||||||
<ROW MsiEmbeddedChainer="msichainer.exe" Condition="VersionMsi >= "4.05"" CommandLine="[AI_CHAINER_CMD_LINE]" Source="msichainer.exe" Type="2"/>
|
|
||||||
</COMPONENT>
|
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiEnvComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiEnvComponent">
|
||||||
<ROW Environment="Path" Name="=-*Path" Value="[~];[APPDIR]" Component_="regid.201001.com.zerotier"/>
|
<ROW Environment="Path" Name="=-*Path" Value="[~];[APPDIR]" Component_="regid.201001.com.zerotier"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
@ -338,21 +320,22 @@
|
|||||||
<ROW Feature_="ZeroTierOne" Component_="regid.201001.com.zerotier"/>
|
<ROW Feature_="ZeroTierOne" Component_="regid.201001.com.zerotier"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x64.exe"/>
|
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x64.exe"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x86.exe"/>
|
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x86.exe"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zttap300_x86_win10"/>
|
|
||||||
<ROW Feature_="MainFeature" Component_="APPDIR"/>
|
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zttap300_x64_win10"/>
|
|
||||||
<ROW Feature_="ZeroTierOne" Component_="AI_CustomARPName"/>
|
<ROW Feature_="ZeroTierOne" Component_="AI_CustomARPName"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="AI_DisableModify"/>
|
<ROW Feature_="ZeroTierOne" Component_="AI_DisableModify"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe"/>
|
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe_1"/>
|
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe_1"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="AI_ExePath"/>
|
|
||||||
<ROW Feature_="ZeroTierOne" Component_="i686"/>
|
<ROW Feature_="ZeroTierOne" Component_="i686"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="ZeroTier"/>
|
<ROW Feature_="ZeroTierOne" Component_="ZeroTier"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="One"/>
|
<ROW Feature_="ZeroTierOne" Component_="One"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="tapwindows"/>
|
<ROW Feature_="ZeroTierOne" Component_="driverx64"/>
|
||||||
<ROW Feature_="ZeroTierOne" Component_="x64"/>
|
|
||||||
<ROW Feature_="ZeroTierOne" Component_="x86"/>
|
|
||||||
<ROW Feature_="ZeroTierOne" Component_="i686_1"/>
|
<ROW Feature_="ZeroTierOne" Component_="i686_1"/>
|
||||||
|
<ROW Feature_="zttap300" Component_="zttap300.inf"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="driverx86"/>
|
||||||
|
<ROW Feature_="zttap300_1" Component_="zttap300.inf_1"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="driverarm64"/>
|
||||||
|
<ROW Feature_="zttap300_2" Component_="zttap300.inf_2"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="APPDIR"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="AI_ExePath"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
|
||||||
<ROW Name="ZeroTierIcon.exe" SourcePath="..\..\..\artwork\ZeroTierIcon.ico" Index="0"/>
|
<ROW Name="ZeroTierIcon.exe" SourcePath="..\..\..\artwork\ZeroTierIcon.ico" Index="0"/>
|
||||||
@ -375,10 +358,9 @@
|
|||||||
<ROW Action="AI_DATA_SETTER_2" Condition="(VersionNT >= 501) AND (REMOVE <> "ALL")" Sequence="5801"/>
|
<ROW Action="AI_DATA_SETTER_2" Condition="(VersionNT >= 501) AND (REMOVE <> "ALL")" Sequence="5801"/>
|
||||||
<ROW Action="AI_FwUninstall" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1702"/>
|
<ROW Action="AI_FwUninstall" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1702"/>
|
||||||
<ROW Action="AI_DATA_SETTER_3" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1701"/>
|
<ROW Action="AI_DATA_SETTER_3" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1701"/>
|
||||||
<ROW Action="AI_DetectSoftware" Sequence="103"/>
|
|
||||||
<ROW Action="AI_TxtUpdaterInstall" Sequence="5101"/>
|
<ROW Action="AI_TxtUpdaterInstall" Sequence="5101"/>
|
||||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="ExeBuild"/>
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="ExeBuild"/>
|
||||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="102" Builds="ExeBuild"/>
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="ExeBuild"/>
|
||||||
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="ExeBuild"/>
|
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="ExeBuild"/>
|
||||||
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="ExeBuild"/>
|
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="ExeBuild"/>
|
||||||
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="ExeBuild"/>
|
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="ExeBuild"/>
|
||||||
@ -389,8 +371,6 @@
|
|||||||
<ROW Action="TerminateUIOld" Sequence="1602"/>
|
<ROW Action="TerminateUIOld" Sequence="1602"/>
|
||||||
<ROW Action="AI_DATA_SETTER_6" Sequence="1601"/>
|
<ROW Action="AI_DATA_SETTER_6" Sequence="1601"/>
|
||||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||||
<ROW Action="AI_AppSearchEx" Sequence="101"/>
|
|
||||||
<ROW Action="AI_PrepareChainers" Condition="VersionMsi >= "4.05"" Sequence="5851"/>
|
|
||||||
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="ExeBuild"/>
|
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="ExeBuild"/>
|
||||||
<ROW Action="AI_DATA_SETTER_4" Sequence="1398"/>
|
<ROW Action="AI_DATA_SETTER_4" Sequence="1398"/>
|
||||||
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
||||||
@ -405,22 +385,18 @@
|
|||||||
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||||
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="103"/>
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
|
||||||
<ROW Action="ExecuteAction" Sequence="1299" SeqType="0" MsiKey="ExecuteAction"/>
|
<ROW Action="ExecuteAction" Sequence="1299" SeqType="0" MsiKey="ExecuteAction"/>
|
||||||
<ROW Action="AI_DetectSoftware" Sequence="102"/>
|
|
||||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||||
<ROW Action="AI_AppSearchEx" Sequence="101"/>
|
|
||||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||||
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild"/>
|
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType = 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
<ROW Condition="( Version9X OR VersionNT64 OR ( VersionNT AND ((VersionNT <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT <> 600) OR (MsiNTProductType = 1)) AND (VersionNT <> 601) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNTDisplay]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT" IsPredefined="true" Builds="DefaultBuild"/>
|
<ROW Condition="( Version9X OR VersionNT64 OR ( VersionNT AND ((VersionNT <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT <> 600) OR (MsiNTProductType = 1)) AND (VersionNT <> 601) AND (VersionNT <> 602) AND (VersionNT <> 603) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNTDisplay]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
<ROW Condition="AI_DETECTED_DOTNET_VERSION >= AI_REQUIRED_DOTNET_VERSION" Description="[ProductName] cannot be installed on systems with .NET Framework version lower than [AI_REQUIRED_DOTNET_DISPLAY]." DescriptionLocId="AI.LaunchCondition.DotNET" IsPredefined="true" Builds="DefaultBuild"/>
|
|
||||||
<ROW Condition="NOT AiArm64" Description="[ProductName] cannot be installed on systems running on ARM64 processors. Check for a ARM64 version of [ProductName]" DescriptionLocId="AI.LaunchCondition.ARM64" IsPredefined="true" Builds="DefaultBuild"/>
|
|
||||||
<ROW Condition="Privileged" Description="[ProductName] requires administrative privileges to install." DescriptionLocId="AI.LaunchCondition.Privileged" IsPredefined="true" Builds="DefaultBuild"/>
|
<ROW Condition="Privileged" Description="[ProductName] requires administrative privileges to install." DescriptionLocId="AI.LaunchCondition.Privileged" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="ExeBuild"/>
|
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="ExeBuild"/>
|
||||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
@ -432,15 +408,13 @@
|
|||||||
<ROW LockObject="One_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="One_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="tapwindows_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="driverx64_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="tapwindows_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
<ROW LockObject="driverx86_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="x64_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
<ROW LockObject="driverarm64_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="x64_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
|
||||||
<ROW LockObject="x86_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
|
||||||
<ROW LockObject="x86_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
|
||||||
<ROW LockObject="regid.201001.com.zerotier_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="regid.201001.com.zerotier_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="APPDIR" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="APPDIR" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
<ROW LockObject="i686_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
<ROW LockObject="i686_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="driverarm64_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
||||||
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||||
@ -503,10 +477,6 @@
|
|||||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
||||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
|
|
||||||
<ROW SearchKey="UpgradeCode" SearchType="4" SearchString="{88AA80DE-14CA-4443-B024-6EC13F3EDDAD}" Order="2" Property="ZTTAP300_X86_INSTALLED"/>
|
|
||||||
<ROW SearchKey="_" SearchType="4" SearchString="{88AA80DE-14CA-4443-B024-6EC13F3EDDAD}" Order="1" Property="ZTTAP300_X64_INSTALLED"/>
|
|
||||||
</COMPONENT>
|
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.SoftwareIdentificationComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.SoftwareIdentificationComponent">
|
||||||
<ATTRIBUTE name="LocalFile" value="regid.199509.com.example_ProductName.swidtag"/>
|
<ATTRIBUTE name="LocalFile" value="regid.199509.com.example_ProductName.swidtag"/>
|
||||||
<ATTRIBUTE name="SystemFile" value="regid.199509.com.example_ProductName.swidtag_1"/>
|
<ATTRIBUTE name="SystemFile" value="regid.199509.com.example_ProductName.swidtag_1"/>
|
||||||
@ -528,10 +498,10 @@
|
|||||||
<ROW XmlAttribute="xsischemaLocation" XmlElement="swidsoftware_identification_tag" Name="xsi:schemaLocation" Flags="14" Order="3" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd"/>
|
<ROW XmlAttribute="xsischemaLocation" XmlElement="swidsoftware_identification_tag" Name="xsi:schemaLocation" Flags="14" Order="3" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
|
||||||
<ROW XmlElement="swidbuild" ParentElement="swidnumeric" Name="swid:build" Condition="1" Order="2" Flags="14" Text="6" UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidbuild" ParentElement="swidnumeric" Name="swid:build" Condition="1" Order="2" Flags="14" Text="1" UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidentitlement_required_indicator" ParentElement="swidsoftware_identification_tag" Name="swid:entitlement_required_indicator" Condition="1" Order="0" Flags="14" Text="false" UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidentitlement_required_indicator" ParentElement="swidsoftware_identification_tag" Name="swid:entitlement_required_indicator" Condition="1" Order="0" Flags="14" Text="false" UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidmajor" ParentElement="swidnumeric" Name="swid:major" Condition="1" Order="0" Flags="14" Text="1" UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidmajor" ParentElement="swidnumeric" Name="swid:major" Condition="1" Order="0" Flags="14" Text="1" UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidminor" ParentElement="swidnumeric" Name="swid:minor" Condition="1" Order="1" Flags="14" Text="10" UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidminor" ParentElement="swidnumeric" Name="swid:minor" Condition="1" Order="1" Flags="14" Text="12" UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidname" ParentElement="swidproduct_version" Name="swid:name" Condition="1" Order="0" Flags="14" Text="[ProductVersion]" UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidname" ParentElement="swidproduct_version" Name="swid:name" Condition="1" Order="0" Flags="14" Text="[ProductVersion]" UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidname_1" ParentElement="swidsoftware_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidname_1" ParentElement="swidsoftware_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
||||||
<ROW XmlElement="swidname_2" ParentElement="swidsoftware_licensor" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
<ROW XmlElement="swidname_2" ParentElement="swidsoftware_licensor" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
||||||
|
558
ext/installfiles/windows/ZeroTier One.back.aip
Normal file
558
ext/installfiles/windows/ZeroTier One.back.aip
Normal file
@ -0,0 +1,558 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<DOCUMENT Type="Advanced Installer" CreateVersion="10.9" version="20.4.1" Modules="enterprise" RootPath="." Language="en" Id="{DC564647-6BF0-4550-87F4-89C938D0159C}">
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
|
||||||
|
<ROW Name="HiddenItems" Value="ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;AppXAppDetailsComponent;FixupComponent;AppXCapabilitiesComponent;AppXDependenciesComponent;AppXProductDetailsComponent;AppXVisualAssetsComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
||||||
|
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
||||||
|
<ROW Property="AI_EMBD_MSI_EXTR_PATH" Value="[TempFolder]" ValueLocId="-"/>
|
||||||
|
<ROW Property="AI_EXTERNALUIUNINSTALLERNAME" MultiBuildValue="DefaultBuild:aiui"/>
|
||||||
|
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
|
||||||
|
<ROW Property="AI_PREDEF_LCONDS_PROPS" Value="AI_DETECTED_DOTNET_VERSION"/>
|
||||||
|
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="ExeBuild:1"/>
|
||||||
|
<ROW Property="AI_PRODUCTNAME_ARP" Value="ZeroTier One"/>
|
||||||
|
<ROW Property="AI_REQUIRED_DOTNET_DISPLAY" MultiBuildValue="DefaultBuild:4.5" ValueLocId="-"/>
|
||||||
|
<ROW Property="AI_REQUIRED_DOTNET_VERSION" MultiBuildValue="DefaultBuild:4.5" ValueLocId="-"/>
|
||||||
|
<ROW Property="AI_ThemeStyle" Value="aero" MsiKey="AI_ThemeStyle"/>
|
||||||
|
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
|
||||||
|
<ROW Property="ALLUSERS" Value="1"/>
|
||||||
|
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]."/>
|
||||||
|
<ROW Property="ARPCONTACT" Value="contact@zerotier.com"/>
|
||||||
|
<ROW Property="ARPHELPLINK" Value="https://www.zerotier.com/"/>
|
||||||
|
<ROW Property="ARPHELPTELEPHONE" Value="949-505-9993"/>
|
||||||
|
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
|
||||||
|
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="ExeBuild:1"/>
|
||||||
|
<ROW Property="ARPPRODUCTICON" Value="ZeroTierIcon.exe" Type="8"/>
|
||||||
|
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
|
||||||
|
<ROW Property="ARPURLINFOABOUT" Value="https://www.zerotier.com/"/>
|
||||||
|
<ROW Property="ARPURLUPDATEINFO" Value="https://www.zerotier.com/"/>
|
||||||
|
<ROW Property="AiFeatIcoZeroTierOne" Value="ZeroTierIcon.exe" Type="8"/>
|
||||||
|
<ROW Property="LIMITUI" MultiBuildValue="DefaultBuild:1"/>
|
||||||
|
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
|
||||||
|
<ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
|
||||||
|
<ROW Property="ProductCode" Value="1033:{8D8ECA43-43FF-4358-84E9-4629D8855C03} " Type="16"/>
|
||||||
|
<ROW Property="ProductLanguage" Value="1033"/>
|
||||||
|
<ROW Property="ProductName" Value="ZeroTier One"/>
|
||||||
|
<ROW Property="ProductVersion" Value="1.10.6"/>
|
||||||
|
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
|
||||||
|
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
||||||
|
<ROW Property="UpgradeCode" Value="{B0E2A5F3-88B6-4E77-B922-CB4739B4C4C8}"/>
|
||||||
|
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME#ExeBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0#ExeBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000#ExeBuild:Windows 2000" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003#ExeBuild:Windows XP/2003" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT64" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNT64Display" MultiBuildValue="DefaultBuild:Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" ValueLocId="-"/>
|
||||||
|
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:Windows Vista x86, Windows Server 2008 x86, Windows 7 x86" ValueLocId="-"/>
|
||||||
|
<ROW Property="ZTHEADLESS" Value="No"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||||
|
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1" DirectoryOptions="15"/>
|
||||||
|
<ROW Directory="CommonAppDataFolder" Directory_Parent="TARGETDIR" DefaultDir="COMMON~1|CommonAppDataFolder" IsPseudoRoot="1"/>
|
||||||
|
<ROW Directory="One_Dir" Directory_Parent="ZeroTier_Dir" DefaultDir="One" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="ProgramFilesFolder" Directory_Parent="TARGETDIR" DefaultDir="PROGRA~1|ProgramFilesFolder" IsPseudoRoot="1"/>
|
||||||
|
<ROW Directory="ProgramMenuFolder" Directory_Parent="TARGETDIR" DefaultDir="PROGRA~2|ProgramMenuFolder" IsPseudoRoot="1"/>
|
||||||
|
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||||
|
<ROW Directory="ZeroTier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="ZeroTier" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="i686_1_Dir" Directory_Parent="ProgramMenuFolder" DefaultDir=".:i686"/>
|
||||||
|
<ROW Directory="i686_Dir" Directory_Parent="APPDIR" DefaultDir=".:i686" DirectoryOptions="15"/>
|
||||||
|
<ROW Directory="networks.d_Dir" Directory_Parent="One_Dir" DefaultDir="networks.d" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="regid.201001.com.zerotier_Dir" Directory_Parent="CommonAppDataFolder" DefaultDir="REGID2~1.ZER|regid.2010-01.com.zerotier" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="tapwindows_Dir" Directory_Parent="One_Dir" DefaultDir="TAP-WI~1|tap-windows" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="x64_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x64" DirectoryOptions="12"/>
|
||||||
|
<ROW Directory="x86_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x86" DirectoryOptions="12"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||||
|
<ROW Component="AI_CustomARPName" ComponentId="{D8521222-B184-44D4-84AE-8B6549555BD8}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||||
|
<ROW Component="AI_DisableModify" ComponentId="{46FFA8C5-A0CB-4E05-9AD3-911D543DE8CA}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||||
|
<ROW Component="AI_ExePath" ComponentId="{8E02B36C-7A19-429B-A93E-77A9261AC918}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
||||||
|
<ROW Component="APPDIR" ComponentId="{4DD7907D-D7FE-4CD6-B1A0-B5C1625F5133}" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ROW Component="One" ComponentId="{41AB11E7-066E-414A-96F8-F051D3D3B353}" Directory_="One_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="ProductInformation" ComponentId="{DB078D04-EA8E-4A7C-9001-89BAD932F9D9}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
||||||
|
<ROW Component="ZeroTier" ComponentId="{8864F744-9BDF-4891-88A1-6D23D76BCCB1}" Directory_="ZeroTier_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="i686" ComponentId="{6EC46014-3BFD-4017-ACBC-C4417D1D6361}" Directory_="i686_1_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="i686_1" ComponentId="{60156BDC-31D7-47EE-A307-B62129607DD5}" Directory_="i686_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="networks.d" ComponentId="{EF54D0DF-889F-41DC-AF5C-4E7F96AB1C8B}" Directory_="networks.d_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="regid.201001.com.zerotier" ComponentId="{A39C80FC-6A8F-454F-9052-10DAC3C3B139}" Directory_="regid.201001.com.zerotier_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="tapwindows" ComponentId="{3E9CBCCE-EC9D-4802-B8FD-DADB4CC532A2}" Directory_="tapwindows_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="x64" ComponentId="{4DD1F90B-53F1-4390-BDF1-E6D9B39B8D80}" Directory_="x64_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="x86" ComponentId="{8E83C577-3C22-49B7-82A8-369BE1F19224}" Directory_="x86_Dir" Attributes="0"/>
|
||||||
|
<ROW Component="zerotier_desktop_ui.exe" ComponentId="{61A7F53C-C6C3-418D-A652-2E4D9F8173AA}" Directory_="APPDIR" Attributes="256" Condition="ZTHEADLESS = "No" AND VersionNT64" KeyPath="zerotier_desktop_ui.exe"/>
|
||||||
|
<ROW Component="zerotier_desktop_ui.exe_1" ComponentId="{5CFEA823-6D17-4EAA-BBAA-810E1C89555D}" Directory_="i686_Dir" Attributes="0" Condition="ZTHEADLESS = "No" AND NOT VersionNT64" KeyPath="zerotier_desktop_ui.exe_1"/>
|
||||||
|
<ROW Component="zerotierone_x64.exe" ComponentId="{DFCFB72D-B055-4E60-B6D8-81FF585C2183}" Directory_="One_Dir" Attributes="256" Condition="VersionNT64" KeyPath="zerotierone_x64.exe"/>
|
||||||
|
<ROW Component="zerotierone_x86.exe" ComponentId="{5D2F3366-4FE1-40A4-A81A-66C49FA11F1C}" Directory_="One_Dir" Attributes="0" Condition="NOT VersionNT64" KeyPath="zerotierone_x86.exe"/>
|
||||||
|
<ROW Component="zttap300_x64_win10" ComponentId="{D4839F5E-FB94-41CB-9B1B-177A97ADC904}" Directory_="x64_Dir" Attributes="256" Condition="VersionNT64" KeyPath="zttap300.inf"/>
|
||||||
|
<ROW Component="zttap300_x86_win10" ComponentId="{9F913E48-095B-4EA3-98DA-EDAB1593F3E3}" Directory_="x86_Dir" Attributes="0" Condition="NOT VersionNT64" KeyPath="zttap300.cat_3" Type="0"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||||
|
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ROW Feature="ZeroTierOne" Title="MainFeature" Description="ZeroTier One" Display="0" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||||
|
<ATTRIBUTE name="CurrentFeature" value="ZeroTierOne"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
||||||
|
<ROW File="zerotierone_x86.exe" Component_="zerotierone_x86.exe" FileName="ZEROTI~1.EXE|zerotier-one_x86.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\Win32\Release\zerotier-one_x86.exe" SelfReg="false" DigSign="true"/>
|
||||||
|
<ROW File="zerotierone_x64.exe" Component_="zerotierone_x64.exe" FileName="ZEROTI~2.EXE|zerotier-one_x64.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\windows\Build\x64\Release\zerotier-one_x64.exe" SelfReg="false" DigSign="true"/>
|
||||||
|
<ROW File="zttap300.cat_2" Component_="zttap300_x64_win10" FileName="zttap300.cat" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.cat" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.sys_2" Component_="zttap300_x64_win10" FileName="zttap300.sys" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.sys" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.inf" Component_="zttap300_x64_win10" FileName="zttap300.inf" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x64\zttap300.inf" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.cat_3" Component_="zttap300_x86_win10" FileName="zttap300.cat" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.cat" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.sys_3" Component_="zttap300_x86_win10" FileName="zttap300.sys" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.sys" SelfReg="false"/>
|
||||||
|
<ROW File="zttap300.inf_1" Component_="zttap300_x86_win10" FileName="zttap300.inf" Attributes="0" SourcePath="..\..\bin\tap-windows-ndis6\x86\zttap300.inf" SelfReg="false"/>
|
||||||
|
<ROW File="zerotier_desktop_ui.exe" Component_="zerotier_desktop_ui.exe" FileName="ZEROTI~2.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\x86_64-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
||||||
|
<ROW File="zerotier_desktop_ui.exe_1" Component_="zerotier_desktop_ui.exe_1" FileName="ZEROTI~1.EXE|zerotier_desktop_ui.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\..\..\..\DesktopUI\target\i686-pc-windows-msvc\release\zerotier_desktop_ui.exe" SelfReg="false" DigSign="true"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.custcomp.AiComponentAliasComponent">
|
||||||
|
<ROW AliasRowId="AI_CustomARPName" AliasRowOperation="2" Condition="#DefaultBuild:ZTHEADLESS="No""/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||||
|
<ROW BootstrOptKey="GlobalOptions" GeneralOptions="qh" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.BootstrapperUISequenceComponent">
|
||||||
|
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||||
|
<ROW BuildKey="DefaultBuild" BuildName="MSI" BuildOrder="1" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="4" ExtUI="true" UseLargeSchema="true"/>
|
||||||
|
<ROW BuildKey="ExeBuild" BuildName="update" BuildOrder="2" BuildType="0" PackageFolder="..\..\.." PackageFileName="ZeroTier One" Languages="en" InstallationType="2" CabsLocation="1" CompressCabs="false" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="4" PackageType="1" FilesInsideExe="true" ExeIconPath="..\..\..\artwork\ZeroTierIcon.ico" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" MsiCmdLine="/qn" ExtUI="true" UseLargeSchema="true" ExeName="zt1_update_2_1,2_[|ProductVersion]_0"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.CacheComponent">
|
||||||
|
<ATTRIBUTE name="Enable" value="false"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageComponent">
|
||||||
|
<ROW ChainedPackage="ZeroTierOne_NDIS6_x64.msi" Order="1" Options="110" InstallCondition="VersionNT64 AND VersionNT >= 1000" MaintenanceCondition="FALSE" RemoveCondition="REMOVE="ALL" AND VersionNT64"/>
|
||||||
|
<ROW ChainedPackage="ZeroTierOne_NDIS6_x86.msi" Order="2" Options="110" InstallCondition="(NOT VersionNT64) And VersionNT >= 1000" MaintenanceCondition="FALSE" RemoveCondition="REMOVE="ALL" AND (NOT VersionNT64)"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.ChainedPackageFileComponent">
|
||||||
|
<ROW FileId="ZeroTierOne_NDIS6_x64.msi" ChainedPackage="ZeroTierOne_NDIS6_x64.msi" Options="1" TargetPath="ZeroTierOne_NDIS6_x64.msi" Content="..\..\bin\tap-windows-ndis6\x64\ZeroTierOne_NDIS6_x64.msi"/>
|
||||||
|
<ROW FileId="ZeroTierOne_NDIS6_x86.msi" ChainedPackage="ZeroTierOne_NDIS6_x86.msi" Options="1" TargetPath="ZeroTierOne_NDIS6_x86.msi" Content="..\..\bin\tap-windows-ndis6\x86\ZeroTierOne_NDIS6_x86.msi"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||||
|
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||||
|
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.DigCertStoreComponent">
|
||||||
|
<ROW TimeStampUrl="http://timestamp.digicert.com" SignerDescription="ZeroTier One" DescriptionUrl="https://www.zerotier.com/" SignOptions="7" SignTool="5" UseSha256="1" KVTenantId="5300bf3b-0eff-4a5f-a63f-821e22ed1730" KVAppId="5f94d77e-b795-41fd-afe7-ec913b03c1d3" KVName="ZeroTier-CS" KVCertName="ZT-EV-CS" KVCertVersion="442c2d6f77874ff99eed4b36f5cb401c"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.FirewallExceptionComponent">
|
||||||
|
<ROW FirewallException="ZeroTierOneUDP9993" Direction="1" Action="1" DisplayName="ZeroTier UDP/9993 In" GroupName="ZeroTierOne" Enabled="1" Scope="*" Condition="1" Profiles="7" Port="9993" Protocol="UDP"/>
|
||||||
|
<ROW FirewallException="ZeroTierOnex64Binary" Direction="1" Action="1" DisplayName="ZeroTier x64 Binary In" GroupName="ZeroTierOne" Enabled="1" Scope="*" Condition="((?zerotierone_x64.exe=2) AND ($zerotierone_x64.exe=3))" Profiles="7" AppPath="[#zerotierone_x64.exe]" Port="*" Protocol="ANY"/>
|
||||||
|
<ROW FirewallException="ZeroTierOnex86Binary" Direction="1" Action="1" DisplayName="ZeroTier x86 Binary In" GroupName="ZeroTierOne" Enabled="1" Scope="*" Condition="((?zerotierone_x86.exe=2) AND ($zerotierone_x86.exe=3))" Profiles="7" AppPath="[#zerotierone_x86.exe]" Port="*" Protocol="ANY"/>
|
||||||
|
<ROW FirewallException="ZeroTierUDP9993Out" Direction="2" Action="1" DisplayName="ZeroTier UDP/9993 Out" GroupName="ZeroTierOne" Enabled="1" Scope="*" Condition="1" Profiles="7" Port="9993" Protocol="UDP"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
|
||||||
|
<ROW Fragment="CommonUI.aip" Path="<AI_FRAGS>CommonUI.aip"/>
|
||||||
|
<ROW Fragment="MaintenanceTypeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceTypeDlg.aip"/>
|
||||||
|
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceWelcomeDlg.aip"/>
|
||||||
|
<ROW Fragment="SequenceDialogs.aip" Path="<AI_THEMES>classic\fragments\SequenceDialogs.aip"/>
|
||||||
|
<ROW Fragment="Sequences.aip" Path="<AI_FRAGS>Sequences.aip"/>
|
||||||
|
<ROW Fragment="StaticUIStrings.aip" Path="<AI_FRAGS>StaticUIStrings.aip"/>
|
||||||
|
<ROW Fragment="Themes.aip" Path="<AI_FRAGS>Themes.aip"/>
|
||||||
|
<ROW Fragment="UI.aip" Path="<AI_THEMES>classic\fragments\UI.aip"/>
|
||||||
|
<ROW Fragment="Validation.aip" Path="<AI_FRAGS>Validation.aip"/>
|
||||||
|
<ROW Fragment="VerifyRemoveDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRemoveDlg.aip"/>
|
||||||
|
<ROW Fragment="VerifyRepairDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRepairDlg.aip"/>
|
||||||
|
<ROW Fragment="WelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomeDlg.aip"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
|
||||||
|
<ROW Action="AI_DeleteLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
|
||||||
|
<ROW Action="AI_DeleteRLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
|
||||||
|
<ROW Action="AI_ExtractFiles" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
|
||||||
|
<ROW Action="AI_ExtractLzma" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
|
||||||
|
<ROW Action="AI_FwConfig" Description="Executing Windows Firewall configurations" DescriptionLocId="ActionText.Description.AI_FwConfig" Template="Configuring Windows Firewall rule: "[1]"" TemplateLocId="ActionText.Template.AI_FwConfig"/>
|
||||||
|
<ROW Action="AI_FwInstall" Description="Generating actions to configure Windows Firewall" DescriptionLocId="ActionText.Description.AI_FwInstall"/>
|
||||||
|
<ROW Action="AI_FwRemove" Description="Executing Windows Firewall configurations" DescriptionLocId="ActionText.Description.AI_FwRemove" Template="Configuring Windows Firewall rule: "[1]"" TemplateLocId="ActionText.Template.AI_FwRemove"/>
|
||||||
|
<ROW Action="AI_FwRollback" Description="Rolling back Windows Firewall configurations." DescriptionLocId="ActionText.Description.AI_FwRollback" Template="Rolling back Windows Firewall configurations." TemplateLocId="ActionText.Template.AI_FwRollback"/>
|
||||||
|
<ROW Action="AI_FwUninstall" Description="Generating actions to configure Windows Firewall" DescriptionLocId="ActionText.Description.AI_FwUninstall"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterCommit" Description="Commit text file changes. " DescriptionLocId="ActionText.Description.AI_TxtUpdaterCommit" Template="Commit text file changes." TemplateLocId="ActionText.Template.AI_TxtUpdaterCommit"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterConfig" Description="Executing text file updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterConfig" Template="Updating text file: "[1]"" TemplateLocId="ActionText.Template.AI_TxtUpdaterConfig"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterInstall" Description="Generating actions to configure text files updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterInstall"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterRollback" Description="Rolling back text file changes. " DescriptionLocId="ActionText.Description.AI_TxtUpdaterRollback" Template="Rolling back text file changes." TemplateLocId="ActionText.Template.AI_TxtUpdaterRollback"/>
|
||||||
|
<ROW Action="AI_XmlCommit" Description="Committing XML file configurations." DescriptionLocId="ActionText.Description.AI_XmlCommit" Template="Committing XML file configurations." TemplateLocId="ActionText.Template.AI_XmlCommit"/>
|
||||||
|
<ROW Action="AI_XmlConfig" Description="Executing XML file configurations" DescriptionLocId="ActionText.Description.AI_XmlConfig" Template="Configuring XML file: "[1]"" TemplateLocId="ActionText.Template.AI_XmlConfig"/>
|
||||||
|
<ROW Action="AI_XmlInstall" Description="Generating actions to configure XML files" DescriptionLocId="ActionText.Description.AI_XmlInstall"/>
|
||||||
|
<ROW Action="AI_XmlRemove" Description="Executing XML file configurations" DescriptionLocId="ActionText.Description.AI_XmlRemove" Template="Configuring XML file: "[1]"" TemplateLocId="ActionText.Template.AI_XmlRemove"/>
|
||||||
|
<ROW Action="AI_XmlRollback" Description="Rolling back XML file configurations." DescriptionLocId="ActionText.Description.AI_XmlRollback" Template="Rolling back XML file configurations." TemplateLocId="ActionText.Template.AI_XmlRollback"/>
|
||||||
|
<ROW Action="AI_XmlUninstall" Description="Generating actions to configure XML files" DescriptionLocId="ActionText.Description.AI_XmlUninstall"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
|
||||||
|
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="ExeBuild"/>
|
||||||
|
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="ExeBuild"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||||
|
<ROW Name="ExternalUICleaner.dll" SourcePath="<AI_CUSTACTS>ExternalUICleaner.dll"/>
|
||||||
|
<ROW Name="NetFirewall.dll" SourcePath="<AI_CUSTACTS>NetFirewall.dll"/>
|
||||||
|
<ROW Name="Prereq.dll" SourcePath="<AI_CUSTACTS>Prereq.dll"/>
|
||||||
|
<ROW Name="SoftwareDetector.dll" SourcePath="<AI_CUSTACTS>SoftwareDetector.dll"/>
|
||||||
|
<ROW Name="TxtUpdater.dll" SourcePath="<AI_CUSTACTS>TxtUpdater.dll"/>
|
||||||
|
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
||||||
|
<ROW Name="chainersupport.dll" SourcePath="<AI_CUSTACTS>chainersupport.dll"/>
|
||||||
|
<ROW Name="lzmaextractor.dll" SourcePath="<AI_CUSTACTS>lzmaextractor.dll"/>
|
||||||
|
<ROW Name="msichainer.exe" SourcePath="<AI_CUSTACTS>msichainer.exe"/>
|
||||||
|
<ROW Name="viewer.exe" SourcePath="<AI_CUSTACTS>viewer.exe" DigSign="true"/>
|
||||||
|
<ROW Name="xmlCfg.dll" SourcePath="<AI_CUSTACTS>xmlCfg.dll"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
|
||||||
|
<ROW Dialog_="ExitDialog" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Cancel]" Order="200" TextLocId="-" MsiKey="ExitDialog#Cancel" Options="1"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="0" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ExitDialog#Back" Options="1"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="ViewReadmeCheckBox" Type="CheckBox" X="135" Y="140" Width="10" Height="10" Attributes="2" Property="VIEWREADME" Order="500" MsiKey="ExitDialog#ViewReadmeCheckBox" Options="1"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Attributes="196611" Text="Completing the [ProductName] [Wizard]" TextStyle="VerdanaBold13" Order="600" TextLocId="Control.Text.ExitDialog#Title" MsiKey="ExitDialog#Title"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="LaunchProdCheckBox" Type="CheckBox" X="135" Y="170" Width="10" Height="10" Attributes="2" Property="RUNAPPLICATION" Order="700" MsiKey="ExitDialog#LaunchProdCheckBox" Options="1"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="Description" Type="Text" X="135" Y="86" Width="220" Height="20" Attributes="196611" Text="Click the "Finish" button to exit the [Wizard]." Order="800" TextLocId="Control.Text.ExitDialog#Description" MsiKey="ExitDialog#Description"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control="BottomLine" Type="Line" X="0" Y="234" Width="372" Height="0" Attributes="1" Order="900" MsiKey="ExitDialog#BottomLine"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control="WelcomeDlgDialogInitializer" Type="DialogInitializer" X="0" Y="0" Width="0" Height="0" Attributes="0" Order="-1" TextLocId="-" HelpLocId="-" ExtDataLocId="-"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="[BannerBitmap]" Order="400"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Logo" Type="Text" X="4" Y="228" Width="70" Height="12" Attributes="1" Text="Advanced Installer" Order="700"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Warning: Unsupported Windows Version" TextStyle="[DlgTitleFont]" Order="800"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control="Text_1" Type="Text" X="15" Y="59" Width="344" Height="159" Attributes="65539" Property="TEXT_1_PROP" Text="ZeroTier does not officially support versions of Windows prior to Windows 10, and the ZeroTier graphical tray and control panel application does not run on EOL versions of Windows. You may still install ZeroTier and attempt to use it by opening an administrator-mode command prompt and controlling the service from the command line with "zerotier-cli"." TextStyle="VerdanaBold13" Order="900"/>
|
||||||
|
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText@ExitDialog#ViewReadmeText"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlConditionComponent">
|
||||||
|
<ATTRIBUTE name="DeletedRows" value="ExitDialog#LaunchProdText#Hide#((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 2) AND (CTRLS <> 3))@ExitDialog#ViewReadmeText#Hide#((NOT AI_INSTALL) AND (NOT AI_PATCH)) OR ((CTRLS <> 1) AND (CTRLS <> 3))"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="3"/>
|
||||||
|
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
|
||||||
|
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
|
||||||
|
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||||
|
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
|
||||||
|
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
|
||||||
|
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
|
||||||
|
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||||
|
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="601"/>
|
||||||
|
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="1"/>
|
||||||
|
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="601"/>
|
||||||
|
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="1"/>
|
||||||
|
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="399" Options="1"/>
|
||||||
|
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="299" Options="1"/>
|
||||||
|
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
|
||||||
|
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
|
||||||
|
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
|
||||||
|
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
|
||||||
|
<ROW Dialog_="Windows7Warning" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="SpawnDialog" Argument="OutOfRbDiskDlg" Condition="AI_INSTALL AND OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)" Ordering="5" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="EnableRollback" Argument="False" Condition="AI_INSTALL AND OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"" Ordering="6" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="SpawnDialog" Argument="OutOfDiskDlg" Condition="AI_INSTALL AND ( (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") )" Ordering="7" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[AI_ButtonText_Next_Orig]" Argument="[ButtonText_Next]" Condition="AI_INSTALL" Ordering="0" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[ButtonText_Next]" Argument="[[AI_CommitButton]]" Condition="AI_INSTALL" Ordering="1" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[AI_Text_Next_Orig]" Argument="[Text_Next]" Condition="AI_INSTALL" Ordering="2" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="WelcomeDlgDialogInitializer" Event="[Text_Next]" Argument="[Text_Install]" Condition="AI_INSTALL" Ordering="3" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[ButtonText_Next]" Argument="[AI_ButtonText_Next_Orig]" Condition="AI_INSTALL" Ordering="0" Options="2"/>
|
||||||
|
<ROW Dialog_="WelcomeDlg" Control_="Back" Event="[Text_Next]" Argument="[AI_Text_Next_Orig]" Condition="AI_INSTALL" Ordering="1" Options="2"/>
|
||||||
|
<ROW Dialog_="ExitDialog" Control_="Finish" Event="DoAction" Argument="AI_ChainerScheduleReboot" Condition="Not AIEXTERNALUI" Ordering="302"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
||||||
|
<ROW Directory_="networks.d_Dir" Component_="networks.d" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="regid.201001.com.zerotier_Dir" Component_="regid.201001.com.zerotier" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
|
||||||
|
<ROW Directory_="i686_1_Dir" Component_="i686" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="ZeroTier_Dir" Component_="ZeroTier" ManualDelete="true"/>
|
||||||
|
<ROW Directory_="One_Dir" Component_="One" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="tapwindows_Dir" Component_="tapwindows" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="x64_Dir" Component_="x64" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="x86_Dir" Component_="x86" ManualDelete="false"/>
|
||||||
|
<ROW Directory_="i686_Dir" Component_="i686_1" ManualDelete="false"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||||
|
<ROW Action="AI_AppSearchEx" Type="1" Source="Prereq.dll" Target="DoAppSearchEx"/>
|
||||||
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||||
|
<ROW Action="AI_ChainerScheduleReboot" Type="1" Source="chainersupport.dll" Target="ScheduleReboot" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_CommitChainers" Type="11841" Source="chainersupport.dll" Target="CommitChainedPackages" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_3" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_4" Type="51" Source="CustomActionData" Target="[AI_SETUPEXEPATH]"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_5" Type="51" Source="CustomActionData" Target="zerotier_desktop_ui.exe"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_6" Type="51" Source="CustomActionData" Target="ZeroTier One.exe"/>
|
||||||
|
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
|
||||||
|
<ROW Action="AI_DeleteCadLzma" Type="51" Source="AI_DeleteLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||||
|
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||||
|
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||||
|
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
|
||||||
|
<ROW Action="AI_DetectSoftware" Type="257" Source="SoftwareDetector.dll" Target="OnDetectSoftware"/>
|
||||||
|
<ROW Action="AI_DoRemoveExternalUIStub" Type="3585" Source="ExternalUICleaner.dll" Target="DoRemoveExternalUIStub" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
||||||
|
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
||||||
|
<ROW Action="AI_ExtractCadLzma" Type="51" Source="AI_ExtractLzma" Target="[AI_SETUPEXEPATH]"/>
|
||||||
|
<ROW Action="AI_ExtractFiles" Type="1" Source="Prereq.dll" Target="ExtractSourceFiles" AdditionalSeq="AI_DATA_SETTER_4"/>
|
||||||
|
<ROW Action="AI_ExtractLzma" Type="1025" Source="lzmaextractor.dll" Target="ExtractLZMAFiles"/>
|
||||||
|
<ROW Action="AI_FindExeLzma" Type="1" Source="lzmaextractor.dll" Target="FindEXE"/>
|
||||||
|
<ROW Action="AI_FwConfig" Type="11265" Source="NetFirewall.dll" Target="OnFwConfig" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_FwInstall" Type="1" Source="NetFirewall.dll" Target="OnFwInstall" AdditionalSeq="AI_DATA_SETTER_2"/>
|
||||||
|
<ROW Action="AI_FwRemove" Type="11265" Source="NetFirewall.dll" Target="OnFwRemove" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_FwRollback" Type="11521" Source="NetFirewall.dll" Target="OnFwRollback" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_FwUninstall" Type="1" Source="NetFirewall.dll" Target="OnFwUninstall" AdditionalSeq="AI_DATA_SETTER_3"/>
|
||||||
|
<ROW Action="AI_GetArpIconPath" Type="1" Source="aicustact.dll" Target="GetArpIconPath"/>
|
||||||
|
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||||
|
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
|
||||||
|
<ROW Action="AI_PrepareChainers" Type="1" Source="chainersupport.dll" Target="PrepareChainedPackages"/>
|
||||||
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||||
|
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||||
|
<ROW Action="AI_RemoveExternalUIStub" Type="1" Source="ExternalUICleaner.dll" Target="RemoveExternalUIStub"/>
|
||||||
|
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||||
|
<ROW Action="AI_ResolveLocalizedCredentials" Type="1" Source="aicustact.dll" Target="GetLocalizedCredentials"/>
|
||||||
|
<ROW Action="AI_RollbackChainers" Type="11585" Source="chainersupport.dll" Target="RollbackChainedPackages" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterConfig" Type="11265" Source="TxtUpdater.dll" Target="OnTxtUpdaterConfig" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterInstall" Type="1" Source="TxtUpdater.dll" Target="OnTxtUpdaterInstall"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterRollback" Type="11521" Source="TxtUpdater.dll" Target="OnTxtUpdaterRollback" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_XmlCommit" Type="11777" Source="xmlCfg.dll" Target="OnXmlCommit" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_XmlConfig" Type="11265" Source="xmlCfg.dll" Target="OnXmlConfig" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_XmlInstall" Type="1" Source="xmlCfg.dll" Target="OnXmlInstall" AdditionalSeq="AI_DATA_SETTER"/>
|
||||||
|
<ROW Action="AI_XmlRemove" Type="11265" Source="xmlCfg.dll" Target="OnXmlRemove" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_XmlRollback" Type="11521" Source="xmlCfg.dll" Target="OnXmlRollback" WithoutSeq="true"/>
|
||||||
|
<ROW Action="AI_XmlUninstall" Type="1" Source="xmlCfg.dll" Target="OnXmlUninstall" AdditionalSeq="AI_DATA_SETTER_1"/>
|
||||||
|
<ROW Action="LaunchUI" Type="194" Source="viewer.exe" Target="/DontWait "[APPDIR]zerotier_desktop_ui.exe"" Options="1"/>
|
||||||
|
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFilesFolder]ZeroTier\One"/>
|
||||||
|
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
|
||||||
|
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||||
|
<ROW Action="TapDeviceRemove32" Type="3154" Source="zerotierone_x86.exe" Target="-D"/>
|
||||||
|
<ROW Action="TapDeviceRemove64" Type="3154" Source="zerotierone_x64.exe" Target="-D"/>
|
||||||
|
<ROW Action="TerminateUINew" Type="65" Source="aicustact.dll" Target="StopProcess" Options="1" AdditionalSeq="AI_DATA_SETTER_5"/>
|
||||||
|
<ROW Action="TerminateUIOld" Type="65" Source="aicustact.dll" Target="StopProcess" Options="1" AdditionalSeq="AI_DATA_SETTER_6"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
|
||||||
|
<ROW Dialog="Windows7Warning" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiEmbeddedChainerComponent">
|
||||||
|
<ROW MsiEmbeddedChainer="msichainer.exe" Condition="VersionMsi >= "4.05"" CommandLine="[AI_CHAINER_CMD_LINE]" Source="msichainer.exe" Type="2"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiEnvComponent">
|
||||||
|
<ROW Environment="Path" Name="=-*Path" Value="[~];[APPDIR]" Component_="regid.201001.com.zerotier"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="ProductInformation"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="networks.d"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="regid.201001.com.zerotier"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x64.exe"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zerotierone_x86.exe"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zttap300_x86_win10"/>
|
||||||
|
<ROW Feature_="MainFeature" Component_="APPDIR"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zttap300_x64_win10"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="AI_DisableModify"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="zerotier_desktop_ui.exe_1"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="AI_ExePath"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="i686"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="ZeroTier"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="One"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="tapwindows"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="x64"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="x86"/>
|
||||||
|
<ROW Feature_="ZeroTierOne" Component_="i686_1"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
|
||||||
|
<ROW Name="ZeroTierIcon.exe" SourcePath="..\..\..\artwork\ZeroTierIcon.ico" Index="0"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
|
||||||
|
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel <> 5)" Sequence="210"/>
|
||||||
|
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||||
|
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1502"/>
|
||||||
|
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE="No" AND (Not Installed)" Sequence="1397"/>
|
||||||
|
<ROW Action="AI_ResolveKnownFolders" Sequence="53"/>
|
||||||
|
<ROW Action="AI_XmlInstall" Condition="(REMOVE <> "ALL")" Sequence="5103"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER" Condition="(REMOVE <> "ALL")" Sequence="5102"/>
|
||||||
|
<ROW Action="AI_XmlUninstall" Condition="(REMOVE)" Sequence="3102"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_1" Condition="(REMOVE)" Sequence="3101"/>
|
||||||
|
<ROW Action="InstallFinalize" Sequence="6605" SeqType="0" MsiKey="InstallFinalize"/>
|
||||||
|
<ROW Action="AI_RemoveExternalUIStub" Condition="(REMOVE="ALL") AND ((VersionNT > 500) OR((VersionNT = 500) AND (ServicePackLevel >= 4)))" Sequence="1501"/>
|
||||||
|
<ROW Action="TapDeviceRemove32" Condition="( Installed AND ( REMOVE = "ALL" OR AI_INSTALL_MODE = "Remove" ) AND NOT UPGRADINGPRODUCTCODE ) AND ( NOT VersionNT64 )" Sequence="1605"/>
|
||||||
|
<ROW Action="TapDeviceRemove64" Condition="( Installed AND ( REMOVE = "ALL" OR AI_INSTALL_MODE = "Remove" ) AND NOT UPGRADINGPRODUCTCODE ) AND ( VersionNT64 )" Sequence="1606"/>
|
||||||
|
<ROW Action="AI_FwInstall" Condition="(VersionNT >= 501) AND (REMOVE <> "ALL")" Sequence="5802"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_2" Condition="(VersionNT >= 501) AND (REMOVE <> "ALL")" Sequence="5801"/>
|
||||||
|
<ROW Action="AI_FwUninstall" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1702"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_3" Condition="(VersionNT >= 501) AND (REMOVE="ALL")" Sequence="1701"/>
|
||||||
|
<ROW Action="AI_DetectSoftware" Sequence="103"/>
|
||||||
|
<ROW Action="AI_TxtUpdaterInstall" Sequence="5101"/>
|
||||||
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="102" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="199" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="198" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="197" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="196" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1549" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="1548" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR="" AND Installed AND (REMOVE<>"ALL") AND (AI_INSTALL_MODE<>"Remove") AND (NOT PATCH)" Sequence="6594" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="TerminateUIOld" Sequence="1602"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_6" Sequence="1601"/>
|
||||||
|
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||||
|
<ROW Action="AI_AppSearchEx" Sequence="101"/>
|
||||||
|
<ROW Action="AI_PrepareChainers" Condition="VersionMsi >= "4.05"" Sequence="5851"/>
|
||||||
|
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="ExeBuild"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_4" Sequence="1398"/>
|
||||||
|
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
||||||
|
<ROW Action="TerminateUINew" Sequence="1604"/>
|
||||||
|
<ROW Action="AI_DATA_SETTER_5" Sequence="1603"/>
|
||||||
|
<ROW Action="LaunchUI" Condition="( NOT Installed ) AND ( ZTHEADLESS = "No" )" Sequence="6606"/>
|
||||||
|
<ROW Action="AI_DETECT_MODERNWIN" Condition="(VersionNT >= 603)" Sequence="55" MsiKey="AI_DETECT_MODERNWIN"/>
|
||||||
|
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||||
|
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||||
|
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||||
|
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||||
|
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||||
|
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="103"/>
|
||||||
|
<ROW Action="ExecuteAction" Sequence="1299" SeqType="0" MsiKey="ExecuteAction"/>
|
||||||
|
<ROW Action="AI_DetectSoftware" Sequence="102"/>
|
||||||
|
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||||
|
<ROW Action="AI_AppSearchEx" Sequence="101"/>
|
||||||
|
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||||
|
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||||
|
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
|
<ROW Condition="( Version9X OR VersionNT64 OR ( VersionNT AND ((VersionNT <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT <> 600) OR (MsiNTProductType = 1)) AND (VersionNT <> 601) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNTDisplay]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
|
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
|
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
|
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
|
<ROW Condition="AI_DETECTED_DOTNET_VERSION >= AI_REQUIRED_DOTNET_VERSION" Description="[ProductName] cannot be installed on systems with .NET Framework version lower than [AI_REQUIRED_DOTNET_DISPLAY]." DescriptionLocId="AI.LaunchCondition.DotNET" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
|
<ROW Condition="NOT AiArm64" Description="[ProductName] cannot be installed on systems running on ARM64 processors. Check for a ARM64 version of [ProductName]" DescriptionLocId="AI.LaunchCondition.ARM64" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
|
<ROW Condition="Privileged" Description="[ProductName] requires administrative privileges to install." DescriptionLocId="AI.LaunchCondition.Privileged" IsPredefined="true" Builds="DefaultBuild"/>
|
||||||
|
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="ExeBuild"/>
|
||||||
|
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiLockPermComponent">
|
||||||
|
<ROW LockObject="ZeroTier_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="ZeroTier_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="One_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="One_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="networks.d_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="tapwindows_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="tapwindows_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="x64_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="x64_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="x86_Dir" Table="CreateFolder" User="[GRP_ADMINISTRATORS]" Permission="1245631" Flags="0"/>
|
||||||
|
<ROW LockObject="x86_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="regid.201001.com.zerotier_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="APPDIR" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
<ROW LockObject="i686_Dir" Table="CreateFolder" User="[GRP_EVERYONE]" Permission="1179817" Flags="0"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
||||||
|
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||||
|
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
|
||||||
|
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
|
||||||
|
<ROW Registry="AdvancedInstaller" Root="-1" Key="Software\Caphyon\Advanced Installer" Name="\"/>
|
||||||
|
<ROW Registry="Caphyon" Root="-1" Key="Software\Caphyon" Name="\"/>
|
||||||
|
<ROW Registry="Comments" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Comments" Value="[ARPCOMMENTS]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="Contact" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Contact" Value="[ARPCONTACT]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="CurrentVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion" Name="\"/>
|
||||||
|
<ROW Registry="DisplayIcon" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayIcon" Value="[ARP_ICON_PATH]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="DisplayName" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayName" Value="[AI_PRODUCTNAME_ARP]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="DisplayVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayVersion" Value="[ProductVersion]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="EstimatedSize" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="EstimatedSize" Value="#[AI_ARP_SIZE]" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||||
|
<ROW Registry="HelpLink" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpLink" Value="[ARPHELPLINK]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="InstallLocation" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="InstallLocation" Value="[APPDIR]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="LZMA" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA" Name="\"/>
|
||||||
|
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\"/>
|
||||||
|
<ROW Registry="Microsoft" Root="-1" Key="Software\Microsoft" Name="\"/>
|
||||||
|
<ROW Registry="ModifyPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="ModifyPath" Value="[AI_UNINSTALLER] /i [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="NoModify" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoModify" Value="#1" Component_="AI_DisableModify" VirtualValue="#"/>
|
||||||
|
<ROW Registry="NoRepair" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoRepair" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||||
|
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
|
||||||
|
<ROW Registry="ProductCode_1" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]" Name="\"/>
|
||||||
|
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\"/>
|
||||||
|
<ROW Registry="ProductNameProductVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="\"/>
|
||||||
|
<ROW Registry="ProductVersion_1" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="\"/>
|
||||||
|
<ROW Registry="Publisher" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Publisher" Value="[Manufacturer]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="Readme" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Readme" Value="[ARPREADME]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
|
||||||
|
<ROW Registry="URLInfoAbout" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLInfoAbout" Value="[ARPURLINFOABOUT]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="URLUpdateInfo" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLUpdateInfo" Value="[ARPURLUPDATEINFO]" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="Uninstall" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall" Name="\"/>
|
||||||
|
<ROW Registry="UninstallPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallPath" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="UninstallString" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallString" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||||
|
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
|
||||||
|
<ROW Registry="VersionMajor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMajor" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||||
|
<ROW Registry="VersionMinor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMinor" Value="#6" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||||
|
<ROW Registry="Windows" Root="-1" Key="Software\Microsoft\Windows" Name="\"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
|
||||||
|
<ROW ServiceControl="zerotierone_x64.exe" Name="ZeroTierOneService" Event="163" Wait="1" Component_="zerotierone_x64.exe"/>
|
||||||
|
<ROW ServiceControl="zerotierone_x86.exe" Name="ZeroTierOneService" Event="163" Wait="1" Component_="zerotierone_x86.exe"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
|
||||||
|
<ROW ServiceInstall="zerotierone_x64.exe" Name="ZeroTierOneService" DisplayName="ZeroTier One" ServiceType="16" StartType="2" ErrorControl="32769" Component_="zerotierone_x64.exe" Description="Ethernet Virtualization Service"/>
|
||||||
|
<ROW ServiceInstall="zerotierone_x86.exe" Name="ZeroTierOneService" DisplayName="ZeroTier One" ServiceType="16" StartType="2" ErrorControl="32769" Component_="zerotierone_x86.exe" Description="Ethernet Virtualization Service"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiShortsComponent">
|
||||||
|
<ROW Shortcut="ZeroTier" Directory_="ProgramMenuFolder" Name="ZeroTier" Component_="zerotier_desktop_ui.exe" Target="[#zerotier_desktop_ui.exe]" Hotkey="0" Icon_="ZeroTierIcon.exe" IconIndex="0" ShowCmd="1" WkDir="APPDIR"/>
|
||||||
|
<ROW Shortcut="ZeroTier_1" Directory_="i686_1_Dir" Name="ZeroTier" Component_="zerotier_desktop_ui.exe_1" Target="[#zerotier_desktop_ui.exe_1]" Hotkey="0" Icon_="ZeroTierIcon.exe" IconIndex="0" ShowCmd="1" WkDir="i686_Dir"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||||
|
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
|
||||||
|
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
||||||
|
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
|
||||||
|
<ROW SearchKey="UpgradeCode" SearchType="4" SearchString="{88AA80DE-14CA-4443-B024-6EC13F3EDDAD}" Order="2" Property="ZTTAP300_X86_INSTALLED"/>
|
||||||
|
<ROW SearchKey="_" SearchType="4" SearchString="{88AA80DE-14CA-4443-B024-6EC13F3EDDAD}" Order="1" Property="ZTTAP300_X64_INSTALLED"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.SoftwareIdentificationComponent">
|
||||||
|
<ATTRIBUTE name="LocalFile" value="regid.199509.com.example_ProductName.swidtag"/>
|
||||||
|
<ATTRIBUTE name="SystemFile" value="regid.199509.com.example_ProductName.swidtag_1"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateComponent">
|
||||||
|
<ROW Name="Append/Create" TxtUpdateSet="zerotiercli.bat" FindPattern="@ECHO OFF if [\[][#zerotierone_x64.exe][\]] == [\[][\]] ( 	[#zerotierone_x86.exe] -q %* ) else ( 	[#zerotierone_x64.exe] -q %* ) " Options="160" Order="0" FileEncoding="0"/>
|
||||||
|
<ROW Name="Replace" TxtUpdateSet="zerotiercli.bat" FindPattern="YourFindText" ReplacePattern="YourReplaceText" Options="2" Order="1" FileEncoding="-1"/>
|
||||||
|
<ROW Name="Append/Create" TxtUpdateSet="zerotiercli1.bat" FindPattern="@ECHO OFF if [\[][#zerotierone_x64.exe][\]] == [\[][\]] ( 	[#zerotierone_x86.exe] -i %* ) else ( 	[#zerotierone_x64.exe] -i %* ) " Options="160" Order="0" FileEncoding="0"/>
|
||||||
|
<ROW Name="Replace" TxtUpdateSet="zerotiercli1.bat" FindPattern="YourFindText" ReplacePattern="YourReplaceText" Options="2" Order="1" FileEncoding="-1"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateSetComponent">
|
||||||
|
<ROW Key="zerotiercli.bat" Component="regid.201001.com.zerotier" FileName="zerotier-cli.bat" Directory="APPDIR" Options="17"/>
|
||||||
|
<ROW Key="zerotiercli1.bat" Component="regid.201001.com.zerotier" FileName="zerotier-idtool.bat" Directory="APPDIR" Options="17"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.XmlAttributeComponent">
|
||||||
|
<ROW XmlAttribute="xmlnsds" XmlElement="swidsoftware_identification_tag" Name="xmlns:ds" Flags="14" Order="0" Value="http://www.w3.org/2000/09/xmldsig#"/>
|
||||||
|
<ROW XmlAttribute="xmlnsswid" XmlElement="swidsoftware_identification_tag" Name="xmlns:swid" Flags="14" Order="1" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd"/>
|
||||||
|
<ROW XmlAttribute="xmlnsxsi" XmlElement="swidsoftware_identification_tag" Name="xmlns:xsi" Flags="14" Order="2" Value="http://www.w3.org/2001/XMLSchema-instance"/>
|
||||||
|
<ROW XmlAttribute="xsischemaLocation" XmlElement="swidsoftware_identification_tag" Name="xsi:schemaLocation" Flags="14" Order="3" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
|
||||||
|
<ROW XmlElement="swidbuild" ParentElement="swidnumeric" Name="swid:build" Condition="1" Order="2" Flags="14" Text="6" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidentitlement_required_indicator" ParentElement="swidsoftware_identification_tag" Name="swid:entitlement_required_indicator" Condition="1" Order="0" Flags="14" Text="false" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidmajor" ParentElement="swidnumeric" Name="swid:major" Condition="1" Order="0" Flags="14" Text="1" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidminor" ParentElement="swidnumeric" Name="swid:minor" Condition="1" Order="1" Flags="14" Text="10" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidname" ParentElement="swidproduct_version" Name="swid:name" Condition="1" Order="0" Flags="14" Text="[ProductVersion]" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidname_1" ParentElement="swidsoftware_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidname_2" ParentElement="swidsoftware_licensor" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidname_3" ParentElement="swidtag_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc." UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidnumeric" ParentElement="swidproduct_version" Name="swid:numeric" Condition="1" Order="1" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidproduct_title" ParentElement="swidsoftware_identification_tag" Name="swid:product_title" Condition="1" Order="1" Flags="14" Text="[ProductName]" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidproduct_version" ParentElement="swidsoftware_identification_tag" Name="swid:product_version" Condition="1" Order="2" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidregid" ParentElement="swidsoftware_creator" Name="swid:regid" Condition="1" Order="1" Flags="14" Text="regid.2010-01.com.zerotier" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidregid_1" ParentElement="swidsoftware_licensor" Name="swid:regid" Condition="1" Order="1" Flags="14" Text="regid.2010-01.com.zerotier" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidregid_2" ParentElement="swidtag_creator" Name="swid:regid" Condition="1" Order="1" Flags="14" Text="regid.2010-01.com.zerotier" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidreview" ParentElement="swidnumeric" Name="swid:review" Condition="1" Order="3" Flags="14" Text="0" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidsoftware_creator" ParentElement="swidsoftware_identification_tag" Name="swid:software_creator" Condition="1" Order="3" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidsoftware_id" ParentElement="swidsoftware_identification_tag" Name="swid:software_id" Condition="1" Order="5" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidsoftware_identification_tag" Name="swid:software_identification_tag" Condition="1" Order="0" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidsoftware_licensor" ParentElement="swidsoftware_identification_tag" Name="swid:software_licensor" Condition="1" Order="4" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidtag_creator" ParentElement="swidsoftware_identification_tag" Name="swid:tag_creator" Condition="1" Order="6" Flags="14" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidtag_creator_regid" ParentElement="swidsoftware_id" Name="swid:tag_creator_regid" Condition="1" Order="1" Flags="14" Text="regid.2010-01.com.zerotier" UpdateIndexInParent="0"/>
|
||||||
|
<ROW XmlElement="swidunique_id" ParentElement="swidsoftware_id" Name="swid:unique_id" Condition="1" Order="0" Flags="14" Text="ZeroTierOne" UpdateIndexInParent="0"/>
|
||||||
|
</COMPONENT>
|
||||||
|
<COMPONENT cid="caphyon.advinst.msicomp.XmlFileComponent">
|
||||||
|
<ROW XmlFile="regid.199509.com.example_ProductName.swidtag" FileName="REGID2~1.SWI|regid.2010-01.com.zerotier_ZeroTierOne.swidtag" DirProperty="APPDIR" Component="ProductInformation" RootElement="swidsoftware_identification_tag" Flags="25" Version="1.0" Encoding="UTF-8" IndentUnits="2"/>
|
||||||
|
<ROW XmlFile="regid.199509.com.example_ProductName.swidtag_1" FileName="REGID2~1.SWI|regid.2010-01.com.zerotier_ZeroTierOne.swidtag" DirProperty="regid.201001.com.zerotier_Dir" Component="ProductInformation" RootElement="swidsoftware_identification_tag" Flags="25" Version="1.0" Encoding="UTF-8" IndentUnits="2"/>
|
||||||
|
</COMPONENT>
|
||||||
|
</DOCUMENT>
|
1618
ext/libpqxx-7.7.3/config/config.guess
vendored
1618
ext/libpqxx-7.7.3/config/config.guess
vendored
File diff suppressed because it is too large
Load Diff
2913
ext/libpqxx-7.7.3/config/config.sub
vendored
2913
ext/libpqxx-7.7.3/config/config.sub
vendored
File diff suppressed because it is too large
Load Diff
@ -8,6 +8,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "prometheus/collectable.h"
|
#include "prometheus/collectable.h"
|
||||||
#include "prometheus/metric.h"
|
#include "prometheus/metric.h"
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace prometheus {
|
namespace prometheus {
|
||||||
namespace simpleapi {
|
namespace simpleapi {
|
||||||
|
@ -1194,7 +1194,7 @@ typedef struct
|
|||||||
uint64_t mac; /* MAC in lower 48 bits */
|
uint64_t mac; /* MAC in lower 48 bits */
|
||||||
uint32_t adi; /* Additional distinguishing information, usually zero except for IPv4 ARP groups */
|
uint32_t adi; /* Additional distinguishing information, usually zero except for IPv4 ARP groups */
|
||||||
} multicastSubscriptions[ZT_MAX_MULTICAST_SUBSCRIPTIONS];
|
} multicastSubscriptions[ZT_MAX_MULTICAST_SUBSCRIPTIONS];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network specific DNS configuration
|
* Network specific DNS configuration
|
||||||
*/
|
*/
|
||||||
@ -1327,6 +1327,11 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
float packetErrorRatio;
|
float packetErrorRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of flows assigned to this path
|
||||||
|
*/
|
||||||
|
uint16_t assignedFlowCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Address scope
|
* Address scope
|
||||||
*/
|
*/
|
||||||
|
@ -29,14 +29,14 @@ package com.zerotier.sdk;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Status codes sent to status update callback when things happen
|
* Status codes sent to status update callback when things happen
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_Event
|
* Defined in ZeroTierOne.h as ZT_Event
|
||||||
*/
|
*/
|
||||||
public enum Event {
|
public enum Event {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Node has been initialized
|
* Node has been initialized
|
||||||
*
|
* <p>
|
||||||
* This is the first event generated, and is always sent. It may occur
|
* This is the first event generated, and is always sent. It may occur
|
||||||
* before Node's constructor returns.
|
* before Node's constructor returns.
|
||||||
*/
|
*/
|
||||||
@ -49,7 +49,7 @@ public enum Event {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Node is online -- at least one upstream node appears reachable
|
* Node is online -- at least one upstream node appears reachable
|
||||||
*
|
* <p>
|
||||||
* Meta-data: none
|
* Meta-data: none
|
||||||
*/
|
*/
|
||||||
EVENT_ONLINE(2),
|
EVENT_ONLINE(2),
|
||||||
@ -104,7 +104,7 @@ public enum Event {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* VERB_USER_MESSAGE received
|
* VERB_USER_MESSAGE received
|
||||||
*
|
* <p>
|
||||||
* These are generated when a VERB_USER_MESSAGE packet is received via
|
* These are generated when a VERB_USER_MESSAGE packet is received via
|
||||||
* ZeroTier VL1.
|
* ZeroTier VL1.
|
||||||
*/
|
*/
|
||||||
@ -112,7 +112,7 @@ public enum Event {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Remote trace received
|
* Remote trace received
|
||||||
*
|
* <p>
|
||||||
* These are generated when a VERB_REMOTE_TRACE is received. Note
|
* These are generated when a VERB_REMOTE_TRACE is received. Note
|
||||||
* that any node can fling one of these at us. It is your responsibility
|
* that any node can fling one of these at us. It is your responsibility
|
||||||
* to filter and determine if it's worth paying attention to. If it's
|
* to filter and determine if it's worth paying attention to. If it's
|
||||||
|
@ -75,8 +75,8 @@ public class Node {
|
|||||||
EventListener eventListener,
|
EventListener eventListener,
|
||||||
VirtualNetworkFrameListener frameListener,
|
VirtualNetworkFrameListener frameListener,
|
||||||
VirtualNetworkConfigListener configListener,
|
VirtualNetworkConfigListener configListener,
|
||||||
PathChecker pathChecker) throws NodeException {
|
PathChecker pathChecker) {
|
||||||
ResultCode rc = node_init(
|
return node_init(
|
||||||
nodeId,
|
nodeId,
|
||||||
getListener,
|
getListener,
|
||||||
putListener,
|
putListener,
|
||||||
@ -85,10 +85,6 @@ public class Node {
|
|||||||
frameListener,
|
frameListener,
|
||||||
configListener,
|
configListener,
|
||||||
pathChecker);
|
pathChecker);
|
||||||
if(rc != ResultCode.RESULT_OK) {
|
|
||||||
throw new NodeException(rc.toString());
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInited() {
|
public boolean isInited() {
|
||||||
@ -299,7 +295,7 @@ public class Node {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add or update a moon
|
* Add or update a moon
|
||||||
*
|
* <p>
|
||||||
* Moons are persisted in the data store in moons.d/, so this can persist
|
* Moons are persisted in the data store in moons.d/, so this can persist
|
||||||
* across invocations if the contents of moon.d are scanned and orbit is
|
* across invocations if the contents of moon.d are scanned and orbit is
|
||||||
* called for each on startup.
|
* called for each on startup.
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* ZeroTier One - Network Virtualization Everywhere
|
|
||||||
* Copyright (C) 2011-2015 ZeroTier, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* --
|
|
||||||
*
|
|
||||||
* ZeroTier may be used and distributed under the terms of the GPLv3, which
|
|
||||||
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
|
|
||||||
*
|
|
||||||
* If you would like to embed ZeroTier into a commercial application or
|
|
||||||
* redistribute it in a modified binary form, please contact ZeroTier Networks
|
|
||||||
* LLC. Start here: http://www.zerotier.com/
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.zerotier.sdk;
|
|
||||||
|
|
||||||
public class NodeException extends Exception {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 6268040509883125819L;
|
|
||||||
|
|
||||||
public NodeException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
@ -31,7 +31,7 @@ import com.zerotier.sdk.util.StringUtils;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Current node status
|
* Current node status
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_NodeStatus
|
* Defined in ZeroTierOne.h as ZT_NodeStatus
|
||||||
*/
|
*/
|
||||||
public class NodeStatus {
|
public class NodeStatus {
|
||||||
|
@ -11,9 +11,9 @@ public interface PathChecker {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback to check whether a path should be used for ZeroTier traffic
|
* Callback to check whether a path should be used for ZeroTier traffic
|
||||||
*
|
* <p>
|
||||||
* This function must return true if the path should be used.
|
* This function must return true if the path should be used.
|
||||||
*
|
* <p>
|
||||||
* If no path check function is specified, ZeroTier will still exclude paths
|
* If no path check function is specified, ZeroTier will still exclude paths
|
||||||
* that overlap with ZeroTier-assigned and managed IP address blocks. But the
|
* that overlap with ZeroTier-assigned and managed IP address blocks. But the
|
||||||
* use of a path check function is recommended to ensure that recursion does
|
* use of a path check function is recommended to ensure that recursion does
|
||||||
@ -22,7 +22,7 @@ public interface PathChecker {
|
|||||||
* all configured ZeroTier interfaces and check to ensure that the supplied
|
* all configured ZeroTier interfaces and check to ensure that the supplied
|
||||||
* addresses will not result in ZeroTier traffic being sent over a ZeroTier
|
* addresses will not result in ZeroTier traffic being sent over a ZeroTier
|
||||||
* interface (recursion).
|
* interface (recursion).
|
||||||
*
|
* <p>
|
||||||
* Obviously this is not required in configurations where this can't happen,
|
* Obviously this is not required in configurations where this can't happen,
|
||||||
* such as network containers or embedded.
|
* such as network containers or embedded.
|
||||||
*
|
*
|
||||||
@ -35,7 +35,7 @@ public interface PathChecker {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get physical addresses for ZeroTier peers
|
* Function to get physical addresses for ZeroTier peers
|
||||||
*
|
* <p>
|
||||||
* If provided this function will be occasionally called to get physical
|
* If provided this function will be occasionally called to get physical
|
||||||
* addresses that might be tried to reach a ZeroTier address.
|
* addresses that might be tried to reach a ZeroTier address.
|
||||||
*
|
*
|
||||||
|
@ -33,7 +33,7 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Peer status result buffer
|
* Peer status result buffer
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_Peer
|
* Defined in ZeroTierOne.h as ZT_Peer
|
||||||
*/
|
*/
|
||||||
public class Peer {
|
public class Peer {
|
||||||
|
@ -31,7 +31,7 @@ import java.net.InetSocketAddress;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Physical network path to a peer
|
* Physical network path to a peer
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_PeerPhysicalPath
|
* Defined in ZeroTierOne.h as ZT_PeerPhysicalPath
|
||||||
*/
|
*/
|
||||||
public class PeerPhysicalPath {
|
public class PeerPhysicalPath {
|
||||||
|
@ -29,7 +29,7 @@ package com.zerotier.sdk;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* What trust hierarchy role does this peer have?
|
* What trust hierarchy role does this peer have?
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_PeerRole
|
* Defined in ZeroTierOne.h as ZT_PeerRole
|
||||||
*/
|
*/
|
||||||
public enum PeerRole {
|
public enum PeerRole {
|
||||||
|
@ -38,7 +38,7 @@ import java.util.Collections;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Virtual network configuration
|
* Virtual network configuration
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkConfig
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkConfig
|
||||||
*/
|
*/
|
||||||
public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
||||||
@ -107,100 +107,108 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
|||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
|
|
||||||
|
if (o == null) {
|
||||||
|
Log.i(TAG, "Old is null");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(o instanceof VirtualNetworkConfig)) {
|
if (!(o instanceof VirtualNetworkConfig)) {
|
||||||
return false;
|
Log.i(TAG, "Old is not an instance of VirtualNetworkConfig: " + o);
|
||||||
}
|
|
||||||
|
|
||||||
VirtualNetworkConfig cfg = (VirtualNetworkConfig) o;
|
|
||||||
|
|
||||||
if (this.nwid != cfg.nwid) {
|
|
||||||
Log.i(TAG, "NetworkID Changed. Old: " + StringUtils.networkIdToString(this.nwid) + " (" + this.nwid + "), " +
|
|
||||||
"New: " + StringUtils.networkIdToString(cfg.nwid) + " (" + cfg.nwid + ")");
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.mac != cfg.mac) {
|
VirtualNetworkConfig old = (VirtualNetworkConfig) o;
|
||||||
Log.i(TAG, "MAC Changed. Old: " + StringUtils.macAddressToString(this.mac) + ", New: " + StringUtils.macAddressToString(cfg.mac));
|
|
||||||
|
if (this.nwid != old.nwid) {
|
||||||
|
Log.i(TAG, "NetworkID Changed. New: " + StringUtils.networkIdToString(this.nwid) + " (" + this.nwid + "), " +
|
||||||
|
"Old: " + StringUtils.networkIdToString(old.nwid) + " (" + old.nwid + ")");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.name.equals(cfg.name)) {
|
if (this.mac != old.mac) {
|
||||||
Log.i(TAG, "Name Changed. Old: " + this.name + ", New: " + cfg.name);
|
Log.i(TAG, "MAC Changed. New: " + StringUtils.macAddressToString(this.mac) + ", Old: " + StringUtils.macAddressToString(old.mac));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.status != cfg.status) {
|
if (!this.name.equals(old.name)) {
|
||||||
Log.i(TAG, "Status Changed. Old: " + this.status + ", New: " + cfg.status);
|
Log.i(TAG, "Name Changed. New: " + this.name + ", Old: " + old.name);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.type != cfg.type) {
|
if (this.status != old.status) {
|
||||||
Log.i(TAG, "Type changed. Old " + this.type + ", New: " + cfg.type);
|
Log.i(TAG, "Status Changed. New: " + this.status + ", Old: " + old.status);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.mtu != cfg.mtu) {
|
if (this.type != old.type) {
|
||||||
Log.i(TAG, "MTU Changed. Old: " + this.mtu + ", New: " + cfg.mtu);
|
Log.i(TAG, "Type changed. New: " + this.type + ", Old: " + old.type);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.dhcp != cfg.dhcp) {
|
if (this.mtu != old.mtu) {
|
||||||
Log.i(TAG, "DHCP Flag Changed. Old: " + this.dhcp + ", New: " + cfg.dhcp);
|
Log.i(TAG, "MTU Changed. New: " + this.mtu + ", Old: " + old.mtu);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.bridge != cfg.bridge) {
|
if (this.dhcp != old.dhcp) {
|
||||||
Log.i(TAG, "Bridge Flag Changed. Old: " + this.bridge + ", New: " + cfg.bridge);
|
Log.i(TAG, "DHCP Flag Changed. New: " + this.dhcp + ", Old: " + old.dhcp);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.broadcastEnabled != cfg.broadcastEnabled) {
|
if (this.bridge != old.bridge) {
|
||||||
Log.i(TAG, "Broadcast Flag Changed. Old: "+ this.broadcastEnabled + ", New: " + cfg.broadcastEnabled);
|
Log.i(TAG, "Bridge Flag Changed. New: " + this.bridge + ", Old: " + old.bridge);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.portError != cfg.portError) {
|
if (this.broadcastEnabled != old.broadcastEnabled) {
|
||||||
Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + cfg.portError);
|
Log.i(TAG, "Broadcast Flag Changed. New: "+ this.broadcastEnabled + ", Old: " + old.broadcastEnabled);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.netconfRevision != cfg.netconfRevision) {
|
if (this.portError != old.portError) {
|
||||||
Log.i(TAG, "NetConfRevision Changed. Old: " + this.netconfRevision + ", New: " + cfg.netconfRevision);
|
Log.i(TAG, "Port Error Changed. New: " + this.portError + ", Old: " + old.portError);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Arrays.equals(assignedAddresses, cfg.assignedAddresses)) {
|
if (this.netconfRevision != old.netconfRevision) {
|
||||||
|
Log.i(TAG, "NetConfRevision Changed. New: " + this.netconfRevision + ", Old: " + old.netconfRevision);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Arrays.equals(assignedAddresses, old.assignedAddresses)) {
|
||||||
|
|
||||||
ArrayList<String> aaCurrent = new ArrayList<>();
|
|
||||||
ArrayList<String> aaNew = new ArrayList<>();
|
ArrayList<String> aaNew = new ArrayList<>();
|
||||||
|
ArrayList<String> aaOld = new ArrayList<>();
|
||||||
for (InetSocketAddress s : assignedAddresses) {
|
for (InetSocketAddress s : assignedAddresses) {
|
||||||
aaCurrent.add(s.toString());
|
|
||||||
}
|
|
||||||
for (InetSocketAddress s : cfg.assignedAddresses) {
|
|
||||||
aaNew.add(s.toString());
|
aaNew.add(s.toString());
|
||||||
}
|
}
|
||||||
Collections.sort(aaCurrent);
|
for (InetSocketAddress s : old.assignedAddresses) {
|
||||||
|
aaOld.add(s.toString());
|
||||||
|
}
|
||||||
Collections.sort(aaNew);
|
Collections.sort(aaNew);
|
||||||
|
Collections.sort(aaOld);
|
||||||
|
|
||||||
Log.i(TAG, "Assigned Addresses Changed");
|
Log.i(TAG, "Assigned Addresses Changed");
|
||||||
Log.i(TAG, "Old:");
|
Log.i(TAG, "New:");
|
||||||
for (String s : aaCurrent) {
|
for (String s : aaNew) {
|
||||||
Log.i(TAG, " " + s);
|
Log.i(TAG, " " + s);
|
||||||
}
|
}
|
||||||
Log.i(TAG, "");
|
Log.i(TAG, "");
|
||||||
Log.i(TAG, "New:");
|
Log.i(TAG, "Old:");
|
||||||
for (String s : aaNew) {
|
for (String s : aaOld) {
|
||||||
Log.i(TAG, " " +s);
|
Log.i(TAG, " " +s);
|
||||||
}
|
}
|
||||||
Log.i(TAG, "");
|
Log.i(TAG, "");
|
||||||
@ -208,27 +216,27 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Arrays.equals(routes, cfg.routes)) {
|
if (!Arrays.equals(routes, old.routes)) {
|
||||||
|
|
||||||
ArrayList<String> rCurrent = new ArrayList<>();
|
|
||||||
ArrayList<String> rNew = new ArrayList<>();
|
ArrayList<String> rNew = new ArrayList<>();
|
||||||
|
ArrayList<String> rOld = new ArrayList<>();
|
||||||
for (VirtualNetworkRoute r : routes) {
|
for (VirtualNetworkRoute r : routes) {
|
||||||
rCurrent.add(r.toString());
|
|
||||||
}
|
|
||||||
for (VirtualNetworkRoute r : cfg.routes) {
|
|
||||||
rNew.add(r.toString());
|
rNew.add(r.toString());
|
||||||
}
|
}
|
||||||
Collections.sort(rCurrent);
|
for (VirtualNetworkRoute r : old.routes) {
|
||||||
|
rOld.add(r.toString());
|
||||||
|
}
|
||||||
Collections.sort(rNew);
|
Collections.sort(rNew);
|
||||||
|
Collections.sort(rOld);
|
||||||
|
|
||||||
Log.i(TAG, "Managed Routes Changed");
|
Log.i(TAG, "Managed Routes Changed");
|
||||||
Log.i(TAG, "Old:");
|
Log.i(TAG, "New:");
|
||||||
for (String s : rCurrent) {
|
for (String s : rNew) {
|
||||||
Log.i(TAG, " " + s);
|
Log.i(TAG, " " + s);
|
||||||
}
|
}
|
||||||
Log.i(TAG, "");
|
Log.i(TAG, "");
|
||||||
Log.i(TAG, "New:");
|
Log.i(TAG, "Old:");
|
||||||
for (String s : rNew) {
|
for (String s : rOld) {
|
||||||
Log.i(TAG, " " + s);
|
Log.i(TAG, " " + s);
|
||||||
}
|
}
|
||||||
Log.i(TAG, "");
|
Log.i(TAG, "");
|
||||||
@ -239,20 +247,22 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
|||||||
boolean dnsEquals;
|
boolean dnsEquals;
|
||||||
if (this.dns == null) {
|
if (this.dns == null) {
|
||||||
//noinspection RedundantIfStatement
|
//noinspection RedundantIfStatement
|
||||||
if (cfg.dns == null) {
|
if (old.dns == null) {
|
||||||
dnsEquals = true;
|
dnsEquals = true;
|
||||||
} else {
|
} else {
|
||||||
dnsEquals = false;
|
dnsEquals = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (cfg.dns == null) {
|
if (old.dns == null) {
|
||||||
dnsEquals = false;
|
dnsEquals = false;
|
||||||
} else {
|
} else {
|
||||||
dnsEquals = this.dns.equals(cfg.dns);
|
dnsEquals = this.dns.equals(old.dns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dnsEquals) {
|
if (!dnsEquals) {
|
||||||
|
Log.i(TAG, "DNS Changed. New: " + this.dns + ", Old: " + old.dns);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,11 +384,11 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* ZeroTier-assigned addresses (in {@link InetSocketAddress} objects)
|
* ZeroTier-assigned addresses (in {@link InetSocketAddress} objects)
|
||||||
*
|
* <p>
|
||||||
* For IP, the port number of the sockaddr_XX structure contains the number
|
* For IP, the port number of the sockaddr_XX structure contains the number
|
||||||
* of bits in the address netmask. Only the IP address and port are used.
|
* of bits in the address netmask. Only the IP address and port are used.
|
||||||
* Other fields like interface number can be ignored.
|
* Other fields like interface number can be ignored.
|
||||||
*
|
* <p>
|
||||||
* This is only used for ZeroTier-managed address assignments sent by the
|
* This is only used for ZeroTier-managed address assignments sent by the
|
||||||
* virtual network's configuration master.
|
* virtual network's configuration master.
|
||||||
*/
|
*/
|
||||||
|
@ -36,14 +36,14 @@ public interface VirtualNetworkConfigListener {
|
|||||||
* <p>This can be called at any time to update the configuration of a virtual
|
* <p>This can be called at any time to update the configuration of a virtual
|
||||||
* network port. The parameter after the network ID specifies whether this
|
* network port. The parameter after the network ID specifies whether this
|
||||||
* port is being brought up, updated, brought down, or permanently deleted.
|
* port is being brought up, updated, brought down, or permanently deleted.
|
||||||
*
|
* <p>
|
||||||
* This in turn should be used by the underlying implementation to create
|
* This in turn should be used by the underlying implementation to create
|
||||||
* and configure tap devices at the OS (or virtual network stack) layer.</P>
|
* and configure tap devices at the OS (or virtual network stack) layer.</P>
|
||||||
*
|
*
|
||||||
* This should not call {@link Node#multicastSubscribe(long, long)} or other network-modifying
|
* This should not call {@link Node#multicastSubscribe(long, long)} or other network-modifying
|
||||||
* methods, as this could cause a deadlock in multithreaded or interrupt
|
* methods, as this could cause a deadlock in multithreaded or interrupt
|
||||||
* driven environments.
|
* driven environments.
|
||||||
*
|
* <p>
|
||||||
* This must return 0 on success. It can return any OS-dependent error code
|
* This must return 0 on success. It can return any OS-dependent error code
|
||||||
* on failure, and this results in the network being placed into the
|
* on failure, and this results in the network being placed into the
|
||||||
* PORT_ERROR state.
|
* PORT_ERROR state.
|
||||||
|
@ -29,7 +29,7 @@ package com.zerotier.sdk;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Virtual network configuration update type
|
* Virtual network configuration update type
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkConfigOperation
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkConfigOperation
|
||||||
*/
|
*/
|
||||||
public enum VirtualNetworkConfigOperation {
|
public enum VirtualNetworkConfigOperation {
|
||||||
|
@ -10,7 +10,7 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* DNS configuration to be pushed on a virtual network
|
* DNS configuration to be pushed on a virtual network
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkDNS
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkDNS
|
||||||
*/
|
*/
|
||||||
public class VirtualNetworkDNS implements Comparable<VirtualNetworkDNS> {
|
public class VirtualNetworkDNS implements Comparable<VirtualNetworkDNS> {
|
||||||
@ -45,6 +45,7 @@ public class VirtualNetworkDNS implements Comparable<VirtualNetworkDNS> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//noinspection RedundantIfStatement
|
||||||
if (!servers.equals(d.servers)) {
|
if (!servers.equals(d.servers)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ import java.net.InetSocketAddress;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A route to be pushed on a virtual network
|
* A route to be pushed on a virtual network
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkRoute
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkRoute
|
||||||
*/
|
*/
|
||||||
public class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute>
|
public class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute>
|
||||||
@ -126,6 +126,7 @@ public class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute>
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//noinspection RedundantIfStatement
|
||||||
if (metric != other.metric) {
|
if (metric != other.metric) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ package com.zerotier.sdk;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Virtual network status codes
|
* Virtual network status codes
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkStatus
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkStatus
|
||||||
*/
|
*/
|
||||||
public enum VirtualNetworkStatus {
|
public enum VirtualNetworkStatus {
|
||||||
|
@ -29,7 +29,7 @@ package com.zerotier.sdk;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Virtual network type codes
|
* Virtual network type codes
|
||||||
*
|
* <p>
|
||||||
* Defined in ZeroTierOne.h as ZT_VirtualNetworkType
|
* Defined in ZeroTierOne.h as ZT_VirtualNetworkType
|
||||||
*/
|
*/
|
||||||
public enum VirtualNetworkType {
|
public enum VirtualNetworkType {
|
||||||
|
@ -102,6 +102,43 @@ SharedPtr<Bond> Bond::getBondByPeerId(int64_t identity)
|
|||||||
return _bonds.count(identity) ? _bonds[identity] : SharedPtr<Bond>();
|
return _bonds.count(identity) ? _bonds[identity] : SharedPtr<Bond>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Bond::setAllMtuByTuple(uint16_t mtu, const std::string& ifStr, const std::string& ipStr)
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bonds_m);
|
||||||
|
std::map<int64_t, SharedPtr<Bond> >::iterator bondItr = _bonds.begin();
|
||||||
|
bool found = false;
|
||||||
|
while (bondItr != _bonds.end()) {
|
||||||
|
if (bondItr->second->setMtuByTuple(mtu,ifStr,ipStr)) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
++bondItr;
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Bond::setMtuByTuple(uint16_t mtu, const std::string& ifStr, const std::string& ipStr)
|
||||||
|
{
|
||||||
|
Mutex::Lock _lp(_paths_m);
|
||||||
|
bool found = false;
|
||||||
|
for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) {
|
||||||
|
if (_paths[i].p) {
|
||||||
|
SharedPtr<Link> sl = getLink(_paths[i].p);
|
||||||
|
if (sl) {
|
||||||
|
if (sl->ifname() == ifStr) {
|
||||||
|
char ipBuf[64] = { 0 };
|
||||||
|
_paths[i].p->address().toIpString(ipBuf);
|
||||||
|
std::string newString = std::string(ipBuf);
|
||||||
|
if (newString == ipStr) {
|
||||||
|
_paths[i].p->_mtu = mtu;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
SharedPtr<Bond> Bond::createBond(const RuntimeEnvironment* renv, const SharedPtr<Peer>& peer)
|
SharedPtr<Bond> Bond::createBond(const RuntimeEnvironment* renv, const SharedPtr<Peer>& peer)
|
||||||
{
|
{
|
||||||
Mutex::Lock _l(_bonds_m);
|
Mutex::Lock _l(_bonds_m);
|
||||||
@ -162,8 +199,8 @@ void Bond::destroyBond(uint64_t peerId)
|
|||||||
auto iter = _bonds.find(peerId);
|
auto iter = _bonds.find(peerId);
|
||||||
if (iter != _bonds.end()) {
|
if (iter != _bonds.end()) {
|
||||||
iter->second->stopBond();
|
iter->second->stopBond();
|
||||||
|
_bonds.erase(iter);
|
||||||
}
|
}
|
||||||
_bonds.erase(peerId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bond::stopBond()
|
void Bond::stopBond()
|
||||||
@ -978,7 +1015,7 @@ void Bond::curateBond(int64_t now, bool rebuildBond)
|
|||||||
// Whether we've waited long enough since the link last came online
|
// Whether we've waited long enough since the link last came online
|
||||||
bool satisfiedUpDelay = (now - _paths[i].lastAliveToggle) >= _upDelay;
|
bool satisfiedUpDelay = (now - _paths[i].lastAliveToggle) >= _upDelay;
|
||||||
// How long since the last QoS was received (Must be less than ZT_PEER_PATH_EXPIRATION since the remote peer's _qosSendInterval isn't known)
|
// How long since the last QoS was received (Must be less than ZT_PEER_PATH_EXPIRATION since the remote peer's _qosSendInterval isn't known)
|
||||||
bool acceptableQoSAge = _paths[i].lastQoSReceived == 0 || ((now - _paths[i].lastQoSReceived) < ZT_PEER_EXPIRED_PATH_TRIAL_PERIOD);
|
bool acceptableQoSAge = (_paths[i].lastQoSReceived == 0 && inTrial) || ((now - _paths[i].lastQoSReceived) < ZT_PEER_EXPIRED_PATH_TRIAL_PERIOD);
|
||||||
currEligibility = _paths[i].allowed() && ((acceptableAge && satisfiedUpDelay && acceptableQoSAge) || inTrial);
|
currEligibility = _paths[i].allowed() && ((acceptableAge && satisfiedUpDelay && acceptableQoSAge) || inTrial);
|
||||||
|
|
||||||
if (currEligibility) {
|
if (currEligibility) {
|
||||||
@ -1070,7 +1107,7 @@ void Bond::curateBond(int64_t now, bool rebuildBond)
|
|||||||
|
|
||||||
// Bond a spare link if required (no viable primary links left)
|
// Bond a spare link if required (no viable primary links left)
|
||||||
if (! foundUsablePrimaryPath) {
|
if (! foundUsablePrimaryPath) {
|
||||||
debug("no usable primary links remain, will attempt to use spare if available");
|
// debug("no usable primary links remain, will attempt to use spare if available");
|
||||||
for (int j = 0; j < it->second.size(); j++) {
|
for (int j = 0; j < it->second.size(); j++) {
|
||||||
int idx = it->second.at(j);
|
int idx = it->second.at(j);
|
||||||
if (! _paths[idx].p || ! _paths[idx].eligible || ! _paths[idx].allowed() || ! _paths[idx].isSpare()) {
|
if (! _paths[idx].p || ! _paths[idx].eligible || ! _paths[idx].allowed() || ! _paths[idx].isSpare()) {
|
||||||
@ -1244,7 +1281,8 @@ void Bond::estimatePathQuality(int64_t now)
|
|||||||
if (link) {
|
if (link) {
|
||||||
int linkSpeed = link->capacity();
|
int linkSpeed = link->capacity();
|
||||||
_paths[i].p->_givenLinkSpeed = linkSpeed;
|
_paths[i].p->_givenLinkSpeed = linkSpeed;
|
||||||
_paths[i].p->_mtu = link->mtu();
|
_paths[i].p->_mtu = link->mtu() ? link->mtu() : _paths[i].p->_mtu;
|
||||||
|
_paths[i].p->_assignedFlowCount = _paths[i].assignedFlowCount;
|
||||||
maxObservedLinkCap = linkSpeed > maxObservedLinkCap ? linkSpeed : maxObservedLinkCap;
|
maxObservedLinkCap = linkSpeed > maxObservedLinkCap ? linkSpeed : maxObservedLinkCap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -456,6 +456,26 @@ class Bond {
|
|||||||
*/
|
*/
|
||||||
static SharedPtr<Bond> getBondByPeerId(int64_t identity);
|
static SharedPtr<Bond> getBondByPeerId(int64_t identity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MTU for link by given interface name and IP address (across all bonds)
|
||||||
|
*
|
||||||
|
* @param mtu MTU to be used on this link
|
||||||
|
* @param ifStr interface name to match
|
||||||
|
* @param ipStr IP address to match
|
||||||
|
* @return Whether the MTU was set
|
||||||
|
*/
|
||||||
|
static bool setAllMtuByTuple(uint16_t mtu, const std::string& ifStr, const std::string& ipStr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MTU for link by given interface name and IP address
|
||||||
|
*
|
||||||
|
* @param mtu MTU to be used on this link
|
||||||
|
* @param ifStr interface name to match
|
||||||
|
* @param ipStr IP address to match
|
||||||
|
* @return Whether the MTU was set
|
||||||
|
*/
|
||||||
|
bool setMtuByTuple(uint16_t mtu, const std::string& ifStr, const std::string& ipStr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new bond to the bond controller.
|
* Add a new bond to the bond controller.
|
||||||
*
|
*
|
||||||
|
@ -317,8 +317,7 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar
|
|||||||
bool IncomingPacket::_doACK(const RuntimeEnvironment* RR, void* tPtr, const SharedPtr<Peer>& peer)
|
bool IncomingPacket::_doACK(const RuntimeEnvironment* RR, void* tPtr, const SharedPtr<Peer>& peer)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
SharedPtr<Bond> bond = peer->bond();
|
if (! peer->rateGateACK(RR->node->now())) {
|
||||||
if (! bond || ! bond->rateGateACK(RR->node->now())) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
int32_t ackedBytes;
|
int32_t ackedBytes;
|
||||||
@ -326,9 +325,7 @@ bool IncomingPacket::_doACK(const RuntimeEnvironment* RR, void* tPtr, const Shar
|
|||||||
return true; // ignore
|
return true; // ignore
|
||||||
}
|
}
|
||||||
memcpy(&ackedBytes, payload(), sizeof(ackedBytes));
|
memcpy(&ackedBytes, payload(), sizeof(ackedBytes));
|
||||||
if (bond) {
|
peer->receivedAck(_path, RR->node->now(), Utils::ntoh(ackedBytes));
|
||||||
bond->receivedAck(_path, RR->node->now(), Utils::ntoh(ackedBytes));
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
Metrics::pkt_ack_in++;
|
Metrics::pkt_ack_in++;
|
||||||
return true;
|
return true;
|
||||||
@ -338,7 +335,7 @@ bool IncomingPacket::_doQOS_MEASUREMENT(const RuntimeEnvironment* RR, void* tPtr
|
|||||||
{
|
{
|
||||||
Metrics::pkt_qos_in++;
|
Metrics::pkt_qos_in++;
|
||||||
SharedPtr<Bond> bond = peer->bond();
|
SharedPtr<Bond> bond = peer->bond();
|
||||||
if (! bond || ! bond->rateGateQoS(RR->node->now(), _path)) {
|
if (! peer->rateGateQoS(RR->node->now(), _path)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (payloadLength() > ZT_QOS_MAX_PACKET_SIZE || payloadLength() < ZT_QOS_MIN_PACKET_SIZE) {
|
if (payloadLength() > ZT_QOS_MAX_PACKET_SIZE || payloadLength() < ZT_QOS_MIN_PACKET_SIZE) {
|
||||||
@ -359,9 +356,7 @@ bool IncomingPacket::_doQOS_MEASUREMENT(const RuntimeEnvironment* RR, void* tPtr
|
|||||||
ptr += sizeof(uint16_t);
|
ptr += sizeof(uint16_t);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (bond) {
|
peer->receivedQoS(_path, now, count, rx_id, rx_ts);
|
||||||
bond->receivedQoS(_path, now, count, rx_id, rx_ts);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,10 +621,7 @@ bool IncomingPacket::_doOK(const RuntimeEnvironment *RR,void *tPtr,const SharedP
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!hops()) {
|
if (!hops()) {
|
||||||
SharedPtr<Bond> bond = peer->bond();
|
_path->updateLatency((unsigned int)latency,RR->node->now());
|
||||||
if (!bond) {
|
|
||||||
_path->updateLatency((unsigned int)latency,RR->node->now());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
peer->setRemoteVersion(vProto,vMajor,vMinor,vRevision);
|
peer->setRemoteVersion(vProto,vMajor,vMinor,vRevision);
|
||||||
@ -801,8 +793,7 @@ bool IncomingPacket::_doFRAME(const RuntimeEnvironment *RR,void *tPtr,const Shar
|
|||||||
{
|
{
|
||||||
Metrics::pkt_frame_in++;
|
Metrics::pkt_frame_in++;
|
||||||
int32_t _flowId = ZT_QOS_NO_FLOW;
|
int32_t _flowId = ZT_QOS_NO_FLOW;
|
||||||
SharedPtr<Bond> bond = peer->bond();
|
if (peer->flowHashingSupported()) {
|
||||||
if (bond && bond->flowHashingSupported()) {
|
|
||||||
if (size() > ZT_PROTO_VERB_EXT_FRAME_IDX_PAYLOAD) {
|
if (size() > ZT_PROTO_VERB_EXT_FRAME_IDX_PAYLOAD) {
|
||||||
const unsigned int etherType = at<uint16_t>(ZT_PROTO_VERB_FRAME_IDX_ETHERTYPE);
|
const unsigned int etherType = at<uint16_t>(ZT_PROTO_VERB_FRAME_IDX_ETHERTYPE);
|
||||||
const unsigned int frameLen = size() - ZT_PROTO_VERB_FRAME_IDX_PAYLOAD;
|
const unsigned int frameLen = size() - ZT_PROTO_VERB_FRAME_IDX_PAYLOAD;
|
||||||
@ -1481,8 +1472,7 @@ bool IncomingPacket::_doPATH_NEGOTIATION_REQUEST(const RuntimeEnvironment *RR,vo
|
|||||||
{
|
{
|
||||||
Metrics::pkt_path_negotiation_request_in++;
|
Metrics::pkt_path_negotiation_request_in++;
|
||||||
uint64_t now = RR->node->now();
|
uint64_t now = RR->node->now();
|
||||||
SharedPtr<Bond> bond = peer->bond();
|
if (!peer->rateGatePathNegotiation(now, _path)) {
|
||||||
if (!bond || !bond->rateGatePathNegotiation(now, _path)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (payloadLength() != sizeof(int16_t)) {
|
if (payloadLength() != sizeof(int16_t)) {
|
||||||
@ -1490,9 +1480,7 @@ bool IncomingPacket::_doPATH_NEGOTIATION_REQUEST(const RuntimeEnvironment *RR,vo
|
|||||||
}
|
}
|
||||||
int16_t remoteUtility = 0;
|
int16_t remoteUtility = 0;
|
||||||
memcpy(&remoteUtility, payload(), sizeof(int16_t));
|
memcpy(&remoteUtility, payload(), sizeof(int16_t));
|
||||||
if (peer->bond()) {
|
peer->processIncomingPathNegotiationRequest(now, _path, Utils::ntoh(remoteUtility));
|
||||||
peer->bond()->processIncomingPathNegotiationRequest(now, _path, Utils::ntoh(remoteUtility));
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,6 +589,7 @@ ZT_PeerList *Node::peers() const
|
|||||||
p->paths[p->pathCount].latencyVariance = (*path)->latencyVariance();
|
p->paths[p->pathCount].latencyVariance = (*path)->latencyVariance();
|
||||||
p->paths[p->pathCount].packetLossRatio = (*path)->packetLossRatio();
|
p->paths[p->pathCount].packetLossRatio = (*path)->packetLossRatio();
|
||||||
p->paths[p->pathCount].packetErrorRatio = (*path)->packetErrorRatio();
|
p->paths[p->pathCount].packetErrorRatio = (*path)->packetErrorRatio();
|
||||||
|
p->paths[p->pathCount].assignedFlowCount = (*path)->assignedFlowCount();
|
||||||
p->paths[p->pathCount].relativeQuality = (*path)->relativeQuality();
|
p->paths[p->pathCount].relativeQuality = (*path)->relativeQuality();
|
||||||
p->paths[p->pathCount].linkSpeed = (*path)->givenLinkSpeed();
|
p->paths[p->pathCount].linkSpeed = (*path)->givenLinkSpeed();
|
||||||
p->paths[p->pathCount].bonded = (*path)->bonded();
|
p->paths[p->pathCount].bonded = (*path)->bonded();
|
||||||
@ -602,9 +603,9 @@ ZT_PeerList *Node::peers() const
|
|||||||
}
|
}
|
||||||
if (pi->second->bond()) {
|
if (pi->second->bond()) {
|
||||||
p->isBonded = pi->second->bond();
|
p->isBonded = pi->second->bond();
|
||||||
p->bondingPolicy = pi->second->bond()->policy();
|
p->bondingPolicy = pi->second->bondingPolicy();
|
||||||
p->numAliveLinks = pi->second->bond()->getNumAliveLinks();
|
p->numAliveLinks = pi->second->getNumAliveLinks();
|
||||||
p->numTotalLinks = pi->second->bond()->getNumTotalLinks();
|
p->numTotalLinks = pi->second->getNumTotalLinks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -851,7 +852,7 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des
|
|||||||
case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: {
|
case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: {
|
||||||
//fprintf(stderr, "\n\nGot auth required\n\n");
|
//fprintf(stderr, "\n\nGot auth required\n\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -89,6 +89,7 @@ public:
|
|||||||
_latencyVariance(0.0),
|
_latencyVariance(0.0),
|
||||||
_packetLossRatio(0.0),
|
_packetLossRatio(0.0),
|
||||||
_packetErrorRatio(0.0),
|
_packetErrorRatio(0.0),
|
||||||
|
_assignedFlowCount(0),
|
||||||
_valid(true),
|
_valid(true),
|
||||||
_eligible(false),
|
_eligible(false),
|
||||||
_bonded(false),
|
_bonded(false),
|
||||||
@ -110,6 +111,7 @@ public:
|
|||||||
_latencyVariance(0.0),
|
_latencyVariance(0.0),
|
||||||
_packetLossRatio(0.0),
|
_packetLossRatio(0.0),
|
||||||
_packetErrorRatio(0.0),
|
_packetErrorRatio(0.0),
|
||||||
|
_assignedFlowCount(0),
|
||||||
_valid(true),
|
_valid(true),
|
||||||
_eligible(false),
|
_eligible(false),
|
||||||
_bonded(false),
|
_bonded(false),
|
||||||
@ -320,6 +322,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
inline float packetErrorRatio() const { return _packetErrorRatio; }
|
inline float packetErrorRatio() const { return _packetErrorRatio; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Number of flows assigned to this path
|
||||||
|
*/
|
||||||
|
inline unsigned int assignedFlowCount() const { return _assignedFlowCount; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Whether this path is valid as reported by the bonding layer. The bonding layer
|
* @return Whether this path is valid as reported by the bonding layer. The bonding layer
|
||||||
* actually checks with Phy to see if the interface is still up
|
* actually checks with Phy to see if the interface is still up
|
||||||
@ -374,6 +381,7 @@ private:
|
|||||||
volatile float _latencyVariance;
|
volatile float _latencyVariance;
|
||||||
volatile float _packetLossRatio;
|
volatile float _packetLossRatio;
|
||||||
volatile float _packetErrorRatio;
|
volatile float _packetErrorRatio;
|
||||||
|
volatile uint16_t _assignedFlowCount;
|
||||||
volatile bool _valid;
|
volatile bool _valid;
|
||||||
volatile bool _eligible;
|
volatile bool _eligible;
|
||||||
volatile bool _bonded;
|
volatile bool _bonded;
|
||||||
|
@ -28,7 +28,7 @@ namespace ZeroTier {
|
|||||||
|
|
||||||
static unsigned char s_freeRandomByteCounter = 0;
|
static unsigned char s_freeRandomByteCounter = 0;
|
||||||
|
|
||||||
Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Identity &peerIdentity)
|
Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Identity &peerIdentity)
|
||||||
: RR(renv)
|
: RR(renv)
|
||||||
, _lastReceive(0)
|
, _lastReceive(0)
|
||||||
, _lastNontrivialReceive(0)
|
, _lastNontrivialReceive(0)
|
||||||
@ -487,20 +487,29 @@ void Peer::tryMemorizedPath(void *tPtr,int64_t now)
|
|||||||
void Peer::performMultipathStateCheck(void *tPtr, int64_t now)
|
void Peer::performMultipathStateCheck(void *tPtr, int64_t now)
|
||||||
{
|
{
|
||||||
Mutex::Lock _l(_bond_m);
|
Mutex::Lock _l(_bond_m);
|
||||||
if (_bond) {
|
|
||||||
// Once enabled the Bond object persists, no need to update state
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Check for conditions required for multipath bonding and create a bond
|
* Check for conditions required for multipath bonding and create a bond
|
||||||
* if allowed.
|
* if allowed.
|
||||||
*/
|
*/
|
||||||
int numAlivePaths = 0;
|
int numAlivePaths = 0;
|
||||||
|
bool atLeastOneNonExpired = false;
|
||||||
for(unsigned int i=0;i<ZT_MAX_PEER_NETWORK_PATHS;++i) {
|
for(unsigned int i=0;i<ZT_MAX_PEER_NETWORK_PATHS;++i) {
|
||||||
if (_paths[i].p && _paths[i].p->alive(now)) {
|
if (_paths[i].p) {
|
||||||
numAlivePaths++;
|
if(_paths[i].p->alive(now)) {
|
||||||
|
numAlivePaths++;
|
||||||
|
}
|
||||||
|
if ((now - _paths[i].lr) < ZT_PEER_PATH_EXPIRATION) {
|
||||||
|
atLeastOneNonExpired = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (_bond) {
|
||||||
|
if (numAlivePaths == 0 && !atLeastOneNonExpired) {
|
||||||
|
_bond = SharedPtr<Bond>();
|
||||||
|
RR->bc->destroyBond(_id.address().toInt());
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
_localMultipathSupported = ((numAlivePaths >= 1) && (RR->bc->inUse()) && (ZT_PROTO_VERSION > 9));
|
_localMultipathSupported = ((numAlivePaths >= 1) && (RR->bc->inUse()) && (ZT_PROTO_VERSION > 9));
|
||||||
if (_localMultipathSupported && !_bond) {
|
if (_localMultipathSupported && !_bond) {
|
||||||
if (RR->bc) {
|
if (RR->bc) {
|
||||||
|
@ -56,7 +56,6 @@ private:
|
|||||||
public:
|
public:
|
||||||
~Peer() {
|
~Peer() {
|
||||||
Utils::burn(_key,sizeof(_key));
|
Utils::burn(_key,sizeof(_key));
|
||||||
RR->bc->destroyBond(_id.address().toInt());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -434,6 +433,64 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See definition in Bond
|
||||||
|
*/
|
||||||
|
inline bool rateGateQoS(int64_t now, SharedPtr<Path>& path)
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bond_m);
|
||||||
|
if(_bond) {
|
||||||
|
return _bond->rateGateQoS(now, path);
|
||||||
|
}
|
||||||
|
return false; // Default behavior. If there is no bond, we drop these
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See definition in Bond
|
||||||
|
*/
|
||||||
|
void receivedQoS(const SharedPtr<Path>& path, int64_t now, int count, uint64_t* rx_id, uint16_t* rx_ts)
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bond_m);
|
||||||
|
if(_bond) {
|
||||||
|
_bond->receivedQoS(path, now, count, rx_id, rx_ts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See definition in Bond
|
||||||
|
*/
|
||||||
|
void processIncomingPathNegotiationRequest(uint64_t now, SharedPtr<Path>& path, int16_t remoteUtility)
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bond_m);
|
||||||
|
if(_bond) {
|
||||||
|
_bond->processIncomingPathNegotiationRequest(now, path, remoteUtility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See definition in Bond
|
||||||
|
*/
|
||||||
|
inline bool rateGatePathNegotiation(int64_t now, SharedPtr<Path>& path)
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bond_m);
|
||||||
|
if(_bond) {
|
||||||
|
return _bond->rateGatePathNegotiation(now, path);
|
||||||
|
}
|
||||||
|
return false; // Default behavior. If there is no bond, we drop these
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See definition in Bond
|
||||||
|
*/
|
||||||
|
bool flowHashingSupported()
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_bond_m);
|
||||||
|
if(_bond) {
|
||||||
|
return _bond->flowHashingSupported();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serialize a peer for storage in local cache
|
* Serialize a peer for storage in local cache
|
||||||
*
|
*
|
||||||
@ -533,6 +590,28 @@ public:
|
|||||||
return ZT_BOND_POLICY_NONE;
|
return ZT_BOND_POLICY_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of links in this bond which are considered alive
|
||||||
|
*/
|
||||||
|
inline uint8_t getNumAliveLinks() {
|
||||||
|
Mutex::Lock _l(_paths_m);
|
||||||
|
if (_bond) {
|
||||||
|
return _bond->getNumAliveLinks();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of links in this bond
|
||||||
|
*/
|
||||||
|
inline uint8_t getNumTotalLinks() {
|
||||||
|
Mutex::Lock _l(_paths_m);
|
||||||
|
if (_bond) {
|
||||||
|
return _bond->getNumTotalLinks();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//inline const AES *aesKeysIfSupported() const
|
//inline const AES *aesKeysIfSupported() const
|
||||||
//{ return (const AES *)0; }
|
//{ return (const AES *)0; }
|
||||||
|
|
||||||
|
@ -509,7 +509,17 @@ void Switch::onLocalEthernet(void *tPtr,const SharedPtr<Network> &network,const
|
|||||||
adv[42] = (checksum >> 8) & 0xff;
|
adv[42] = (checksum >> 8) & 0xff;
|
||||||
adv[43] = checksum & 0xff;
|
adv[43] = checksum & 0xff;
|
||||||
|
|
||||||
RR->node->putFrame(tPtr,network->id(),network->userPtr(),peerMac,from,ZT_ETHERTYPE_IPV6,0,adv,72);
|
//
|
||||||
|
// call on separate background thread
|
||||||
|
// this prevents problems related to trying to do rx while inside of doing tx, such as acquiring same lock recursively
|
||||||
|
//
|
||||||
|
|
||||||
|
std::thread([=]() {
|
||||||
|
|
||||||
|
RR->node->putFrame(tPtr, network->id(), network->userPtr(), peerMac, from, ZT_ETHERTYPE_IPV6, 0, adv, 72);
|
||||||
|
|
||||||
|
}).detach();
|
||||||
|
|
||||||
return; // NDP emulation done. We have forged a "fake" reply, so no need to send actual NDP query.
|
return; // NDP emulation done. We have forged a "fake" reply, so no need to send actual NDP query.
|
||||||
} // else no NDP emulation
|
} // else no NDP emulation
|
||||||
} // else no NDP emulation
|
} // else no NDP emulation
|
||||||
@ -546,8 +556,18 @@ void Switch::onLocalEthernet(void *tPtr,const SharedPtr<Network> &network,const
|
|||||||
data,
|
data,
|
||||||
len);
|
len);
|
||||||
} else if (to == network->mac()) {
|
} else if (to == network->mac()) {
|
||||||
|
|
||||||
// Destination is this node, so just reinject it
|
// Destination is this node, so just reinject it
|
||||||
RR->node->putFrame(tPtr,network->id(),network->userPtr(),from,to,etherType,vlanId,data,len);
|
|
||||||
|
//
|
||||||
|
// same pattern as putFrame call above
|
||||||
|
//
|
||||||
|
std::thread([=]() {
|
||||||
|
|
||||||
|
RR->node->putFrame(tPtr, network->id(), network->userPtr(), from, to, etherType, vlanId, data, len);
|
||||||
|
|
||||||
|
}).detach();
|
||||||
|
|
||||||
} else if (to[0] == MAC::firstOctetForNetwork(network->id())) {
|
} else if (to[0] == MAC::firstOctetForNetwork(network->id())) {
|
||||||
// Destination is another ZeroTier peer on the same network
|
// Destination is another ZeroTier peer on the same network
|
||||||
|
|
||||||
|
32
one.cpp
32
one.cpp
@ -171,7 +171,7 @@ static int cli(int argc,char **argv)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
unsigned int port = 0;
|
unsigned int port = 0;
|
||||||
std::string homeDir,command,arg1,arg2,authToken;
|
std::string homeDir,command,arg1,arg2,arg3,arg4,authToken;
|
||||||
std::string ip("127.0.0.1");
|
std::string ip("127.0.0.1");
|
||||||
bool json = false;
|
bool json = false;
|
||||||
for(int i=1;i<argc;++i) {
|
for(int i=1;i<argc;++i) {
|
||||||
@ -569,9 +569,35 @@ static int cli(int argc,char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (arg1 == "setmtu") { /* zerotier-cli bond setmtu <mtu> <iface> <ip> */
|
||||||
|
requestHeaders["Content-Type"] = "application/json";
|
||||||
|
requestHeaders["Content-Length"] = "2";
|
||||||
|
if (argc == 8) {
|
||||||
|
arg2 = argv[5];
|
||||||
|
arg3 = argv[6];
|
||||||
|
arg4 = argv[7];
|
||||||
|
}
|
||||||
|
unsigned int scode = Http::POST(
|
||||||
|
1024 * 1024 * 16,
|
||||||
|
60000,
|
||||||
|
(const struct sockaddr *)&addr,
|
||||||
|
(std::string("/bond/") + arg1 + "/" + arg2 + "/" + arg3 + "/" + arg4).c_str(),
|
||||||
|
requestHeaders,
|
||||||
|
"{}",
|
||||||
|
2,
|
||||||
|
responseHeaders,
|
||||||
|
responseBody);
|
||||||
|
if (scode == 200) {
|
||||||
|
printf("200 setmtu OK" ZT_EOL_S);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
printf("no link match found, new MTU was not applied" ZT_EOL_S);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else if (arg1.length() == 10) {
|
else if (arg1.length() == 10) {
|
||||||
if (arg2 == "rotate") { /* zerotier-cli bond <peerId> rotate */
|
if (arg2 == "rotate") { /* zerotier-cli bond <peerId> rotate */
|
||||||
fprintf(stderr, "zerotier-cli bond <peerId> rotate\n");
|
|
||||||
requestHeaders["Content-Type"] = "application/json";
|
requestHeaders["Content-Type"] = "application/json";
|
||||||
requestHeaders["Content-Length"] = "2";
|
requestHeaders["Content-Length"] = "2";
|
||||||
unsigned int scode = Http::POST(
|
unsigned int scode = Http::POST(
|
||||||
@ -588,7 +614,7 @@ static int cli(int argc,char **argv)
|
|||||||
if (json) {
|
if (json) {
|
||||||
printf("%s",cliFixJsonCRs(responseBody).c_str());
|
printf("%s",cliFixJsonCRs(responseBody).c_str());
|
||||||
} else {
|
} else {
|
||||||
printf("200 bond OK" ZT_EOL_S);
|
printf("200 rotate OK" ZT_EOL_S);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -87,11 +87,10 @@ namespace ZeroTier {
|
|||||||
class Binder {
|
class Binder {
|
||||||
private:
|
private:
|
||||||
struct _Binding {
|
struct _Binding {
|
||||||
_Binding() : udpSock((PhySocket*)0), tcpListenSock((PhySocket*)0)
|
_Binding() : udpSock((PhySocket*)0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
PhySocket* udpSock;
|
PhySocket* udpSock;
|
||||||
PhySocket* tcpListenSock;
|
|
||||||
InetAddress address;
|
InetAddress address;
|
||||||
char ifname[256] = {};
|
char ifname[256] = {};
|
||||||
};
|
};
|
||||||
@ -111,7 +110,6 @@ class Binder {
|
|||||||
Mutex::Lock _l(_lock);
|
Mutex::Lock _l(_lock);
|
||||||
for (unsigned int b = 0, c = _bindingCount; b < c; ++b) {
|
for (unsigned int b = 0, c = _bindingCount; b < c; ++b) {
|
||||||
phy.close(_bindings[b].udpSock, false);
|
phy.close(_bindings[b].udpSock, false);
|
||||||
phy.close(_bindings[b].tcpListenSock, false);
|
|
||||||
}
|
}
|
||||||
_bindingCount = 0;
|
_bindingCount = 0;
|
||||||
}
|
}
|
||||||
@ -133,7 +131,7 @@ class Binder {
|
|||||||
template <typename PHY_HANDLER_TYPE, typename INTERFACE_CHECKER> void refresh(Phy<PHY_HANDLER_TYPE>& phy, unsigned int* ports, unsigned int portCount, const std::vector<InetAddress> explicitBind, INTERFACE_CHECKER& ifChecker)
|
template <typename PHY_HANDLER_TYPE, typename INTERFACE_CHECKER> void refresh(Phy<PHY_HANDLER_TYPE>& phy, unsigned int* ports, unsigned int portCount, const std::vector<InetAddress> explicitBind, INTERFACE_CHECKER& ifChecker)
|
||||||
{
|
{
|
||||||
std::map<InetAddress, std::string> localIfAddrs;
|
std::map<InetAddress, std::string> localIfAddrs;
|
||||||
PhySocket *udps, *tcps;
|
PhySocket *udps;
|
||||||
Mutex::Lock _l(_lock);
|
Mutex::Lock _l(_lock);
|
||||||
bool interfacesEnumerated = true;
|
bool interfacesEnumerated = true;
|
||||||
|
|
||||||
@ -419,11 +417,8 @@ class Binder {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PhySocket* const udps = _bindings[b].udpSock;
|
PhySocket* const udps = _bindings[b].udpSock;
|
||||||
PhySocket* const tcps = _bindings[b].tcpListenSock;
|
|
||||||
_bindings[b].udpSock = (PhySocket*)0;
|
_bindings[b].udpSock = (PhySocket*)0;
|
||||||
_bindings[b].tcpListenSock = (PhySocket*)0;
|
|
||||||
phy.close(udps, false);
|
phy.close(udps, false);
|
||||||
phy.close(tcps, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,24 +432,20 @@ class Binder {
|
|||||||
}
|
}
|
||||||
if (bi == _bindingCount) {
|
if (bi == _bindingCount) {
|
||||||
udps = phy.udpBind(reinterpret_cast<const struct sockaddr*>(&(ii->first)), (void*)0, ZT_UDP_DESIRED_BUF_SIZE);
|
udps = phy.udpBind(reinterpret_cast<const struct sockaddr*>(&(ii->first)), (void*)0, ZT_UDP_DESIRED_BUF_SIZE);
|
||||||
tcps = phy.tcpListen(reinterpret_cast<const struct sockaddr*>(&(ii->first)), (void*)0);
|
if (udps) {
|
||||||
if ((udps) && (tcps)) {
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
// Bind Linux sockets to their device so routes that we manage do not override physical routes (wish all platforms had this!)
|
// Bind Linux sockets to their device so routes that we manage do not override physical routes (wish all platforms had this!)
|
||||||
if (ii->second.length() > 0) {
|
if (ii->second.length() > 0) {
|
||||||
char tmp[256];
|
char tmp[256];
|
||||||
Utils::scopy(tmp, sizeof(tmp), ii->second.c_str());
|
Utils::scopy(tmp, sizeof(tmp), ii->second.c_str());
|
||||||
int fd = (int)Phy<PHY_HANDLER_TYPE>::getDescriptor(udps);
|
int fd = (int)Phy<PHY_HANDLER_TYPE>::getDescriptor(udps);
|
||||||
if (fd >= 0)
|
if (fd >= 0) {
|
||||||
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, tmp, strlen(tmp));
|
|
||||||
fd = (int)Phy<PHY_HANDLER_TYPE>::getDescriptor(tcps);
|
|
||||||
if (fd >= 0)
|
|
||||||
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, tmp, strlen(tmp));
|
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, tmp, strlen(tmp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif // __LINUX__
|
#endif // __LINUX__
|
||||||
if (_bindingCount < ZT_BINDER_MAX_BINDINGS) {
|
if (_bindingCount < ZT_BINDER_MAX_BINDINGS) {
|
||||||
_bindings[_bindingCount].udpSock = udps;
|
_bindings[_bindingCount].udpSock = udps;
|
||||||
_bindings[_bindingCount].tcpListenSock = tcps;
|
|
||||||
_bindings[_bindingCount].address = ii->first;
|
_bindings[_bindingCount].address = ii->first;
|
||||||
memcpy(_bindings[_bindingCount].ifname, (char*)ii->second.c_str(), (int)ii->second.length());
|
memcpy(_bindings[_bindingCount].ifname, (char*)ii->second.c_str(), (int)ii->second.length());
|
||||||
++_bindingCount;
|
++_bindingCount;
|
||||||
@ -462,7 +453,6 @@ class Binder {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
phy.close(udps, false);
|
phy.close(udps, false);
|
||||||
phy.close(tcps, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public:
|
|||||||
{
|
{
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
is64Bit = TRUE;
|
is64Bit = TRUE;
|
||||||
tapDriverPath = "\\tap-windows\\x64\\zttap300.inf";
|
//tapDriverPath = "\\tap-windows\\x64\\zttap300.inf";
|
||||||
#else
|
#else
|
||||||
is64Bit = FALSE;
|
is64Bit = FALSE;
|
||||||
IsWow64Process(GetCurrentProcess(),&is64Bit);
|
IsWow64Process(GetCurrentProcess(),&is64Bit);
|
||||||
@ -86,9 +86,10 @@ public:
|
|||||||
fprintf(stderr,"FATAL: you must use the 64-bit ZeroTier One service on 64-bit Windows systems\r\n");
|
fprintf(stderr,"FATAL: you must use the 64-bit ZeroTier One service on 64-bit Windows systems\r\n");
|
||||||
_exit(1);
|
_exit(1);
|
||||||
}
|
}
|
||||||
tapDriverPath = "\\tap-windows\\x86\\zttap300.inf";
|
//tapDriverPath = "\\tap-windows\\x86\\zttap300.inf";
|
||||||
#endif
|
#endif
|
||||||
tapDriverName = "zttap300";
|
tapDriverName = "zttap300";
|
||||||
|
tapDriverPath = "\\zttap300.inf";
|
||||||
|
|
||||||
setupApiMod = LoadLibraryA("setupapi.dll");
|
setupApiMod = LoadLibraryA("setupapi.dll");
|
||||||
if (!setupApiMod) {
|
if (!setupApiMod) {
|
||||||
|
@ -277,7 +277,7 @@ std::string http_log(const httplib::Request &req, const httplib::Response &res)
|
|||||||
class NetworkState
|
class NetworkState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NetworkState()
|
NetworkState()
|
||||||
: _webPort(9993)
|
: _webPort(9993)
|
||||||
, _tap((EthernetTap *)0)
|
, _tap((EthernetTap *)0)
|
||||||
#if ZT_SSO_ENABLED
|
#if ZT_SSO_ENABLED
|
||||||
@ -357,7 +357,7 @@ public:
|
|||||||
bool allowDNS() const {
|
bool allowDNS() const {
|
||||||
return _settings.allowDNS;
|
return _settings.allowDNS;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<InetAddress> allowManagedWhitelist() const {
|
std::vector<InetAddress> allowManagedWhitelist() const {
|
||||||
return _settings.allowManagedWhitelist;
|
return _settings.allowManagedWhitelist;
|
||||||
}
|
}
|
||||||
@ -644,6 +644,7 @@ static void _peerToJson(nlohmann::json &pj,const ZT_Peer *peer, SharedPtr<Bond>
|
|||||||
j["latencyVariance"] = peer->paths[i].latencyVariance;
|
j["latencyVariance"] = peer->paths[i].latencyVariance;
|
||||||
j["packetLossRatio"] = peer->paths[i].packetLossRatio;
|
j["packetLossRatio"] = peer->paths[i].packetLossRatio;
|
||||||
j["packetErrorRatio"] = peer->paths[i].packetErrorRatio;
|
j["packetErrorRatio"] = peer->paths[i].packetErrorRatio;
|
||||||
|
j["assignedFlowCount"] = peer->paths[i].assignedFlowCount;
|
||||||
j["lastInAge"] = (now - lastReceive);
|
j["lastInAge"] = (now - lastReceive);
|
||||||
j["lastOutAge"] = (now - lastSend);
|
j["lastOutAge"] = (now - lastSend);
|
||||||
j["bonded"] = peer->paths[i].bonded;
|
j["bonded"] = peer->paths[i].bonded;
|
||||||
@ -785,8 +786,11 @@ public:
|
|||||||
bool _updateAutoApply;
|
bool _updateAutoApply;
|
||||||
|
|
||||||
httplib::Server _controlPlane;
|
httplib::Server _controlPlane;
|
||||||
|
httplib::Server _controlPlaneV6;
|
||||||
std::thread _serverThread;
|
std::thread _serverThread;
|
||||||
|
std::thread _serverThreadV6;
|
||||||
bool _serverThreadRunning;
|
bool _serverThreadRunning;
|
||||||
|
bool _serverThreadRunningV6;
|
||||||
|
|
||||||
bool _allowTcpFallbackRelay;
|
bool _allowTcpFallbackRelay;
|
||||||
bool _forceTcpRelay;
|
bool _forceTcpRelay;
|
||||||
@ -838,7 +842,7 @@ public:
|
|||||||
// Deadline for the next background task service function
|
// Deadline for the next background task service function
|
||||||
volatile int64_t _nextBackgroundTaskDeadline;
|
volatile int64_t _nextBackgroundTaskDeadline;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::map<uint64_t,NetworkState> _nets;
|
std::map<uint64_t,NetworkState> _nets;
|
||||||
Mutex _nets_m;
|
Mutex _nets_m;
|
||||||
@ -887,8 +891,11 @@ public:
|
|||||||
,_updater((SoftwareUpdater *)0)
|
,_updater((SoftwareUpdater *)0)
|
||||||
,_updateAutoApply(false)
|
,_updateAutoApply(false)
|
||||||
,_controlPlane()
|
,_controlPlane()
|
||||||
|
,_controlPlaneV6()
|
||||||
,_serverThread()
|
,_serverThread()
|
||||||
|
,_serverThreadV6()
|
||||||
,_serverThreadRunning(false)
|
,_serverThreadRunning(false)
|
||||||
|
,_serverThreadRunningV6(false)
|
||||||
,_forceTcpRelay(false)
|
,_forceTcpRelay(false)
|
||||||
,_primaryPort(port)
|
,_primaryPort(port)
|
||||||
,_udpPortPickerCounter(0)
|
,_udpPortPickerCounter(0)
|
||||||
@ -930,7 +937,7 @@ public:
|
|||||||
|
|
||||||
virtual ~OneServiceImpl()
|
virtual ~OneServiceImpl()
|
||||||
{
|
{
|
||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
WinFWHelper::removeICMPRules();
|
WinFWHelper::removeICMPRules();
|
||||||
#endif
|
#endif
|
||||||
_binder.closeAll(_phy);
|
_binder.closeAll(_phy);
|
||||||
@ -943,6 +950,10 @@ public:
|
|||||||
if (_serverThreadRunning) {
|
if (_serverThreadRunning) {
|
||||||
_serverThread.join();
|
_serverThread.join();
|
||||||
}
|
}
|
||||||
|
_controlPlaneV6.stop();
|
||||||
|
if (_serverThreadRunningV6) {
|
||||||
|
_serverThreadV6.join();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ZT_USE_MINIUPNPC
|
#ifdef ZT_USE_MINIUPNPC
|
||||||
delete _portMapper;
|
delete _portMapper;
|
||||||
@ -1047,10 +1058,10 @@ public:
|
|||||||
// private address port number. Buggy NATs are a running theme.
|
// private address port number. Buggy NATs are a running theme.
|
||||||
//
|
//
|
||||||
// This used to pick the secondary port based on the node ID until we
|
// This used to pick the secondary port based on the node ID until we
|
||||||
// discovered another problem: buggy routers and malicious traffic
|
// discovered another problem: buggy routers and malicious traffic
|
||||||
// "detection". A lot of routers have such things built in these days
|
// "detection". A lot of routers have such things built in these days
|
||||||
// and mis-detect ZeroTier traffic as malicious and block it resulting
|
// and mis-detect ZeroTier traffic as malicious and block it resulting
|
||||||
// in a node that appears to be in a coma. Secondary ports are now
|
// in a node that appears to be in a coma. Secondary ports are now
|
||||||
// randomized on startup.
|
// randomized on startup.
|
||||||
if (_allowSecondaryPort) {
|
if (_allowSecondaryPort) {
|
||||||
if (_secondaryPort) {
|
if (_secondaryPort) {
|
||||||
@ -1526,6 +1537,22 @@ public:
|
|||||||
|
|
||||||
// Internal HTTP Control Plane
|
// Internal HTTP Control Plane
|
||||||
void startHTTPControlPlane() {
|
void startHTTPControlPlane() {
|
||||||
|
// control plane endpoints
|
||||||
|
std::string bondShowPath = "/bond/show/([0-9a-fA-F]{10})";
|
||||||
|
std::string bondRotatePath = "/bond/rotate/([0-9a-fA-F]{10})";
|
||||||
|
std::string setBondMtuPath = "/bond/setmtu/([0-9]{3,5})/([a-zA-Z0-9_]{1,16})/([0-9a-fA-F\\.\\:]{1,39})";
|
||||||
|
std::string configPath = "/config";
|
||||||
|
std::string configPostPath = "/config/settings";
|
||||||
|
std::string healthPath = "/health";
|
||||||
|
std::string moonListPath = "/moon";
|
||||||
|
std::string moonPath = "/moon/([0-9a-fA-F]{10})";
|
||||||
|
std::string networkListPath = "/network";
|
||||||
|
std::string networkPath = "/network/([0-9a-fA-F]{16})";
|
||||||
|
std::string peerListPath = "/peer";
|
||||||
|
std::string peerPath = "/peer/([0-9a-fA-F]{10})";
|
||||||
|
std::string statusPath = "/status";
|
||||||
|
std::string metricsPath = "/metrics";
|
||||||
|
|
||||||
std::vector<std::string> noAuthEndpoints { "/sso", "/health" };
|
std::vector<std::string> noAuthEndpoints { "/sso", "/health" };
|
||||||
|
|
||||||
auto setContent = [=] (const httplib::Request &req, httplib::Response &res, std::string content) {
|
auto setContent = [=] (const httplib::Request &req, httplib::Response &res, std::string content) {
|
||||||
@ -1624,8 +1651,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
auto bondShow = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
_controlPlane.Get("/bond/show/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
|
||||||
if (!_node->bondController()->inUse()) {
|
if (!_node->bondController()->inUse()) {
|
||||||
setContent(req, res, "");
|
setContent(req, res, "");
|
||||||
res.status = 400;
|
res.status = 400;
|
||||||
@ -1651,7 +1677,9 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_node->freeQueryResult((void *)pl);
|
_node->freeQueryResult((void *)pl);
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(bondShowPath, bondShow);
|
||||||
|
_controlPlaneV6.Get(bondShowPath, bondShow);
|
||||||
|
|
||||||
auto bondRotate = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto bondRotate = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
if (!_node->bondController()->inUse()) {
|
if (!_node->bondController()->inUse()) {
|
||||||
@ -1659,11 +1687,8 @@ public:
|
|||||||
res.status = 400;
|
res.status = 400;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto bondID = req.matches[1];
|
auto bondID = req.matches[1];
|
||||||
uint64_t id = Utils::hexStrToU64(bondID.str().c_str());
|
uint64_t id = Utils::hexStrToU64(bondID.str().c_str());
|
||||||
|
|
||||||
exit(0);
|
|
||||||
SharedPtr<Bond> bond = _node->bondController()->getBondByPeerId(id);
|
SharedPtr<Bond> bond = _node->bondController()->getBondByPeerId(id);
|
||||||
if (bond) {
|
if (bond) {
|
||||||
if (bond->abForciblyRotateLink()) {
|
if (bond->abForciblyRotateLink()) {
|
||||||
@ -1677,10 +1702,27 @@ public:
|
|||||||
}
|
}
|
||||||
setContent(req, res, "{}");
|
setContent(req, res, "{}");
|
||||||
};
|
};
|
||||||
_controlPlane.Post("/bond/rotate/([0-9a-fA-F]{10})", bondRotate);
|
_controlPlane.Post(bondRotatePath, bondRotate);
|
||||||
_controlPlane.Put("/bond/rotate/([0-9a-fA-F]{10})", bondRotate);
|
_controlPlane.Put(bondRotatePath, bondRotate);
|
||||||
|
_controlPlaneV6.Post(bondRotatePath, bondRotate);
|
||||||
|
_controlPlaneV6.Put(bondRotatePath, bondRotate);
|
||||||
|
|
||||||
_controlPlane.Get("/config", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto setMtu = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
|
if (!_node->bondController()->inUse()) {
|
||||||
|
setContent(req, res, "");
|
||||||
|
res.status = 400;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint16_t mtu = atoi(req.matches[1].str().c_str());
|
||||||
|
res.status = _node->bondController()->setAllMtuByTuple(mtu, req.matches[2].str().c_str(), req.matches[3].str().c_str()) ? 200 : 400;
|
||||||
|
setContent(req, res, "{}");
|
||||||
|
};
|
||||||
|
_controlPlane.Post(setBondMtuPath, setMtu);
|
||||||
|
_controlPlane.Put(setBondMtuPath, setMtu);
|
||||||
|
_controlPlaneV6.Post(setBondMtuPath, setMtu);
|
||||||
|
_controlPlaneV6.Put(setBondMtuPath, setMtu);
|
||||||
|
|
||||||
|
auto getConfig = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
std::string config;
|
std::string config;
|
||||||
{
|
{
|
||||||
Mutex::Lock lc(_localConfig_m);
|
Mutex::Lock lc(_localConfig_m);
|
||||||
@ -1690,7 +1732,9 @@ public:
|
|||||||
config = "{}";
|
config = "{}";
|
||||||
}
|
}
|
||||||
setContent(req, res, config);
|
setContent(req, res, config);
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(configPath, getConfig);
|
||||||
|
_controlPlaneV6.Get(configPath, getConfig);
|
||||||
|
|
||||||
auto configPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto configPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
json j(OSUtils::jsonParse(req.body));
|
json j(OSUtils::jsonParse(req.body));
|
||||||
@ -1707,10 +1751,12 @@ public:
|
|||||||
}
|
}
|
||||||
setContent(req, res, "{}");
|
setContent(req, res, "{}");
|
||||||
};
|
};
|
||||||
_controlPlane.Post("/config/settings", configPost);
|
_controlPlane.Post(configPostPath, configPost);
|
||||||
_controlPlane.Put("/config/settings", configPost);
|
_controlPlane.Put(configPostPath, configPost);
|
||||||
|
_controlPlaneV6.Post(configPostPath, configPost);
|
||||||
|
_controlPlaneV6.Put(configPostPath, configPost);
|
||||||
|
|
||||||
_controlPlane.Get("/health", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto healthGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
json out = json::object();
|
json out = json::object();
|
||||||
|
|
||||||
char tmp[256];
|
char tmp[256];
|
||||||
@ -1728,9 +1774,11 @@ public:
|
|||||||
out["clock"] = OSUtils::now();
|
out["clock"] = OSUtils::now();
|
||||||
|
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(healthPath, healthGet);
|
||||||
|
_controlPlaneV6.Get(healthPath, healthGet);
|
||||||
|
|
||||||
_controlPlane.Get("/moon", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto moonListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
std::vector<World> moons(_node->moons());
|
std::vector<World> moons(_node->moons());
|
||||||
|
|
||||||
auto out = json::array();
|
auto out = json::array();
|
||||||
@ -1740,9 +1788,11 @@ public:
|
|||||||
out.push_back(mj);
|
out.push_back(mj);
|
||||||
}
|
}
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(moonListPath, moonListGet);
|
||||||
|
_controlPlaneV6.Get(moonListPath, moonListGet);
|
||||||
|
|
||||||
_controlPlane.Get("/moon/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res){
|
auto moonGet = [&, setContent](const httplib::Request &req, httplib::Response &res){
|
||||||
std::vector<World> moons(_node->moons());
|
std::vector<World> moons(_node->moons());
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
auto out = json::object();
|
auto out = json::object();
|
||||||
@ -1754,7 +1804,9 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(moonPath, moonGet);
|
||||||
|
_controlPlaneV6.Get(moonPath, moonGet);
|
||||||
|
|
||||||
auto moonPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto moonPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
@ -1793,19 +1845,22 @@ public:
|
|||||||
}
|
}
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
};
|
};
|
||||||
_controlPlane.Post("/moon/([0-9a-fA-F]{10})", moonPost);
|
_controlPlane.Post(moonPath, moonPost);
|
||||||
_controlPlane.Put("/moon/([0-9a-fA-F]{10})", moonPost);
|
_controlPlane.Put(moonPath, moonPost);
|
||||||
|
_controlPlaneV6.Post(moonPath, moonPost);
|
||||||
|
_controlPlaneV6.Put(moonPath, moonPost);
|
||||||
|
|
||||||
_controlPlane.Delete("/moon/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto moonDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
uint64_t id = Utils::hexStrToU64(input.str().c_str());
|
uint64_t id = Utils::hexStrToU64(input.str().c_str());
|
||||||
auto out = json::object();
|
auto out = json::object();
|
||||||
_node->deorbit((void*)0,id);
|
_node->deorbit((void*)0,id);
|
||||||
out["result"] = true;
|
out["result"] = true;
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Delete(moonPath, moonDelete);
|
||||||
|
|
||||||
_controlPlane.Get("/network", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
Mutex::Lock _l(_nets_m);
|
Mutex::Lock _l(_nets_m);
|
||||||
auto out = json::array();
|
auto out = json::array();
|
||||||
|
|
||||||
@ -1816,9 +1871,11 @@ public:
|
|||||||
out.push_back(nj);
|
out.push_back(nj);
|
||||||
}
|
}
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(networkListPath, networkListGet);
|
||||||
|
_controlPlaneV6.Get(networkListPath, networkListGet);
|
||||||
|
|
||||||
_controlPlane.Get("/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
Mutex::Lock _l(_nets_m);
|
Mutex::Lock _l(_nets_m);
|
||||||
|
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
@ -1832,7 +1889,9 @@ public:
|
|||||||
}
|
}
|
||||||
setContent(req, res, "");
|
setContent(req, res, "");
|
||||||
res.status = 404;
|
res.status = 404;
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(networkPath, networkGet);
|
||||||
|
_controlPlaneV6.Get(networkPath, networkGet);
|
||||||
|
|
||||||
auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
@ -1886,10 +1945,12 @@ public:
|
|||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
_controlPlane.Post("/network/([0-9a-fA-F]{16})", networkPost);
|
_controlPlane.Post(networkPath, networkPost);
|
||||||
_controlPlane.Put("/network/([0-9a-fA-F]){16}", networkPost);
|
_controlPlane.Put(networkPath, networkPost);
|
||||||
|
_controlPlaneV6.Post(networkPath, networkPost);
|
||||||
|
_controlPlaneV6.Put(networkPath, networkPost);
|
||||||
|
|
||||||
_controlPlane.Delete("/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
auto out = json::object();
|
auto out = json::object();
|
||||||
ZT_VirtualNetworkList *nws = _node->networks();
|
ZT_VirtualNetworkList *nws = _node->networks();
|
||||||
@ -1902,9 +1963,11 @@ public:
|
|||||||
}
|
}
|
||||||
_node->freeQueryResult((void*)nws);
|
_node->freeQueryResult((void*)nws);
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Delete(networkPath, networkDelete);
|
||||||
|
_controlPlaneV6.Delete(networkPath, networkDelete);
|
||||||
|
|
||||||
_controlPlane.Get("/peer", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto peerListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
ZT_PeerList *pl = _node->peers();
|
ZT_PeerList *pl = _node->peers();
|
||||||
auto out = nlohmann::json::array();
|
auto out = nlohmann::json::array();
|
||||||
|
|
||||||
@ -1920,9 +1983,11 @@ public:
|
|||||||
}
|
}
|
||||||
_node->freeQueryResult((void*)pl);
|
_node->freeQueryResult((void*)pl);
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(peerListPath, peerListGet);
|
||||||
|
_controlPlaneV6.Get(peerListPath, peerListGet);
|
||||||
|
|
||||||
_controlPlane.Get("/peer/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto peerGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
ZT_PeerList *pl = _node->peers();
|
ZT_PeerList *pl = _node->peers();
|
||||||
|
|
||||||
auto input = req.matches[1];
|
auto input = req.matches[1];
|
||||||
@ -1940,9 +2005,11 @@ public:
|
|||||||
}
|
}
|
||||||
_node->freeQueryResult((void*)pl);
|
_node->freeQueryResult((void*)pl);
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(peerPath, peerGet);
|
||||||
|
_controlPlaneV6.Get(peerPath, peerGet);
|
||||||
|
|
||||||
_controlPlane.Get("/status", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
auto statusGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||||
ZT_NodeStatus status;
|
ZT_NodeStatus status;
|
||||||
_node->status(&status);
|
_node->status(&status);
|
||||||
|
|
||||||
@ -2005,10 +2072,13 @@ public:
|
|||||||
out["planetWorldTimestamp"] = planet.timestamp();
|
out["planetWorldTimestamp"] = planet.timestamp();
|
||||||
|
|
||||||
setContent(req, res, out.dump());
|
setContent(req, res, out.dump());
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(statusPath, statusGet);
|
||||||
|
_controlPlaneV6.Get(statusPath, statusGet);
|
||||||
|
|
||||||
#if ZT_SSO_ENABLED
|
#if ZT_SSO_ENABLED
|
||||||
_controlPlane.Get("/sso", [this](const httplib::Request &req, httplib::Response &res) {
|
std::string ssoPath = "/sso";
|
||||||
|
auto ssoGet = [this](const httplib::Request &req, httplib::Response &res) {
|
||||||
std::string htmlTemplatePath = _homePath + ZT_PATH_SEPARATOR + "sso-auth.template.html";
|
std::string htmlTemplatePath = _homePath + ZT_PATH_SEPARATOR + "sso-auth.template.html";
|
||||||
std::string htmlTemplate;
|
std::string htmlTemplate;
|
||||||
if (!OSUtils::readFile(htmlTemplatePath.c_str(), htmlTemplate)) {
|
if (!OSUtils::readFile(htmlTemplatePath.c_str(), htmlTemplate)) {
|
||||||
@ -2074,10 +2144,11 @@ public:
|
|||||||
|
|
||||||
zeroidc::free_cstr(ret);
|
zeroidc::free_cstr(ret);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(ssoPath, ssoGet);
|
||||||
|
_controlPlaneV6.Get(ssoPath, ssoGet);
|
||||||
#endif
|
#endif
|
||||||
|
auto metricsGet = [this](const httplib::Request &req, httplib::Response &res) {
|
||||||
_controlPlane.Get("/metrics", [this](const httplib::Request &req, httplib::Response &res) {
|
|
||||||
std::string statspath = _homePath + ZT_PATH_SEPARATOR + "metrics.prom";
|
std::string statspath = _homePath + ZT_PATH_SEPARATOR + "metrics.prom";
|
||||||
std::string metrics;
|
std::string metrics;
|
||||||
if (OSUtils::readFile(statspath.c_str(), metrics)) {
|
if (OSUtils::readFile(statspath.c_str(), metrics)) {
|
||||||
@ -2086,9 +2157,11 @@ public:
|
|||||||
res.set_content("{}", "application/json");
|
res.set_content("{}", "application/json");
|
||||||
res.status = 500;
|
res.status = 500;
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
_controlPlane.Get(metricsPath, metricsGet);
|
||||||
|
_controlPlaneV6.Get(metricsPath, metricsGet);
|
||||||
|
|
||||||
_controlPlane.set_exception_handler([&, setContent](const httplib::Request &req, httplib::Response &res, std::exception_ptr ep) {
|
auto exceptionHandler = [&, setContent](const httplib::Request &req, httplib::Response &res, std::exception_ptr ep) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
auto fmt = "{\"error\": %d, \"description\": \"%s\"}";
|
auto fmt = "{\"error\": %d, \"description\": \"%s\"}";
|
||||||
try {
|
try {
|
||||||
@ -2100,39 +2173,70 @@ public:
|
|||||||
}
|
}
|
||||||
setContent(req, res, buf);
|
setContent(req, res, buf);
|
||||||
res.status = 500;
|
res.status = 500;
|
||||||
});
|
};
|
||||||
|
_controlPlane.set_exception_handler(exceptionHandler);
|
||||||
|
_controlPlaneV6.set_exception_handler(exceptionHandler);
|
||||||
|
|
||||||
if (_controller) {
|
if (_controller) {
|
||||||
_controller->configureHTTPControlPlane(_controlPlane, setContent);
|
_controller->configureHTTPControlPlane(_controlPlane, _controlPlaneV6, setContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
_controlPlane.set_pre_routing_handler(authCheck);
|
_controlPlane.set_pre_routing_handler(authCheck);
|
||||||
|
_controlPlaneV6.set_pre_routing_handler(authCheck);
|
||||||
|
|
||||||
#if ZT_DEBUG==1
|
#if ZT_DEBUG==1
|
||||||
_controlPlane.set_logger([](const httplib::Request &req, const httplib::Response &res) {
|
_controlPlane.set_logger([](const httplib::Request &req, const httplib::Response &res) {
|
||||||
fprintf(stderr, "%s", http_log(req, res).c_str());
|
fprintf(stderr, "%s", http_log(req, res).c_str());
|
||||||
});
|
});
|
||||||
|
_controlPlaneV6.set_logger([](const httplib::Request &req, const httplib::Response &res) {
|
||||||
|
fprintf(stderr, "%s", http_log(req, res).c_str());
|
||||||
|
});
|
||||||
#endif
|
#endif
|
||||||
if (_primaryPort==0) {
|
if (_primaryPort==0) {
|
||||||
fprintf(stderr, "unable to determine local control port");
|
fprintf(stderr, "unable to determine local control port");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!_controlPlane.bind_to_port("0.0.0.0", _primaryPort)) {
|
bool v4controlPlaneBound = false;
|
||||||
fprintf(stderr, "Error binding control plane to port %d\n", _primaryPort);
|
_controlPlane.set_address_family(AF_INET);
|
||||||
exit(-1);
|
if(_controlPlane.bind_to_port("0.0.0.0", _primaryPort)) {
|
||||||
|
_serverThread = std::thread([&] {
|
||||||
|
_serverThreadRunning = true;
|
||||||
|
fprintf(stderr, "Starting Control Plane...\n");
|
||||||
|
if(!_controlPlane.listen_after_bind()) {
|
||||||
|
fprintf(stderr, "Error on listen_after_bind()\n");
|
||||||
|
}
|
||||||
|
fprintf(stderr, "Control Plane Stopped\n");
|
||||||
|
_serverThreadRunning = false;
|
||||||
|
});
|
||||||
|
v4controlPlaneBound = true;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error binding control plane to 0.0.0.0:%d\n", _primaryPort);
|
||||||
|
v4controlPlaneBound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_serverThread = std::thread([&] {
|
bool v6controlPlaneBound = false;
|
||||||
_serverThreadRunning = true;
|
_controlPlaneV6.set_address_family(AF_INET6);
|
||||||
fprintf(stderr, "Starting Control Plane...\n");
|
if(_controlPlaneV6.bind_to_port("::", _primaryPort)) {
|
||||||
if(!_controlPlane.listen_after_bind()) {
|
_serverThreadV6 = std::thread([&] {
|
||||||
fprintf(stderr, "Error on listen_after_bind()\n");
|
_serverThreadRunningV6 = true;
|
||||||
}
|
fprintf(stderr, "Starting V6 Control Plane...\n");
|
||||||
fprintf(stderr, "Control Plane Stopped\n");
|
if(!_controlPlaneV6.listen_after_bind()) {
|
||||||
_serverThreadRunning = false;
|
fprintf(stderr, "Error on V6 listen_after_bind()\n");
|
||||||
});
|
}
|
||||||
|
fprintf(stderr, "V6 Control Plane Stopped\n");
|
||||||
|
_serverThreadRunningV6 = false;
|
||||||
|
});
|
||||||
|
v6controlPlaneBound = true;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error binding control plane to [::]:%d\n", _primaryPort);
|
||||||
|
v6controlPlaneBound = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!v4controlPlaneBound && !v6controlPlaneBound) {
|
||||||
|
fprintf(stderr, "ERROR: Could not bind control plane. Exiting...\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be called after _localConfig is read or modified
|
// Must be called after _localConfig is read or modified
|
||||||
@ -2750,46 +2854,8 @@ public:
|
|||||||
TcpConnection *tc = reinterpret_cast<TcpConnection *>(*uptr);
|
TcpConnection *tc = reinterpret_cast<TcpConnection *>(*uptr);
|
||||||
tc->lastReceive = OSUtils::now();
|
tc->lastReceive = OSUtils::now();
|
||||||
switch(tc->type) {
|
switch(tc->type) {
|
||||||
|
case TcpConnection::TCP_UNCATEGORIZED_INCOMING:
|
||||||
// TODO: Remove Me
|
return;
|
||||||
// case TcpConnection::TCP_UNCATEGORIZED_INCOMING:
|
|
||||||
// switch(reinterpret_cast<uint8_t *>(data)[0]) {
|
|
||||||
// // HTTP: GET, PUT, POST, HEAD, DELETE
|
|
||||||
// case 'G':
|
|
||||||
// case 'P':
|
|
||||||
// case 'D':
|
|
||||||
// case 'H': {
|
|
||||||
// // This is only allowed from IPs permitted to access the management
|
|
||||||
// // backplane, which is just 127.0.0.1/::1 unless otherwise configured.
|
|
||||||
// bool allow;
|
|
||||||
// {
|
|
||||||
// Mutex::Lock _l(_localConfig_m);
|
|
||||||
// if (_allowManagementFrom.empty()) {
|
|
||||||
// allow = (tc->remoteAddr.ipScope() == InetAddress::IP_SCOPE_LOOPBACK);
|
|
||||||
// } else {
|
|
||||||
// allow = false;
|
|
||||||
// for(std::vector<InetAddress>::const_iterator i(_allowManagementFrom.begin());i!=_allowManagementFrom.end();++i) {
|
|
||||||
// if (i->containsAddress(tc->remoteAddr)) {
|
|
||||||
// allow = true;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (allow) {
|
|
||||||
// tc->type = TcpConnection::TCP_HTTP_INCOMING;
|
|
||||||
// phyOnTcpData(sock,uptr,data,len);
|
|
||||||
// } else {
|
|
||||||
// _phy.close(sock);
|
|
||||||
// }
|
|
||||||
// } break;
|
|
||||||
|
|
||||||
// // Drop unknown protocols
|
|
||||||
// default:
|
|
||||||
// _phy.close(sock);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// return;
|
|
||||||
|
|
||||||
case TcpConnection::TCP_HTTP_INCOMING:
|
case TcpConnection::TCP_HTTP_INCOMING:
|
||||||
case TcpConnection::TCP_HTTP_OUTGOING:
|
case TcpConnection::TCP_HTTP_OUTGOING:
|
||||||
|
@ -22,12 +22,12 @@
|
|||||||
/**
|
/**
|
||||||
* Minor version
|
* Minor version
|
||||||
*/
|
*/
|
||||||
#define ZEROTIER_ONE_VERSION_MINOR 10
|
#define ZEROTIER_ONE_VERSION_MINOR 12
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Revision
|
* Revision
|
||||||
*/
|
*/
|
||||||
#define ZEROTIER_ONE_VERSION_REVISION 6
|
#define ZEROTIER_ONE_VERSION_REVISION 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build version
|
* Build version
|
||||||
|
@ -624,7 +624,7 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\ext;$(SolutionDir)\..\rustybits\target;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\..\ext;$(SolutionDir)\..\rustybits\target;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Name: zerotier-one
|
Name: zerotier-one
|
||||||
Version: 1.10.6
|
Version: 1.12.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: ZeroTier network virtualization service
|
Summary: ZeroTier network virtualization service
|
||||||
|
|
||||||
License: ZeroTier BSL 1.1
|
License: ZeroTier BUSL 1.1
|
||||||
URL: https://www.zerotier.com
|
URL: https://www.zerotier.com
|
||||||
|
|
||||||
# Fedora
|
# Fedora
|
||||||
@ -143,6 +143,12 @@ chmod 0755 $RPM_BUILD_ROOT/etc/init.d/zerotier-one
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Aug 25 2023 Adam Ierymenko <adam.ierymenko@zerotier.com> - 1.12.1
|
||||||
|
- see https://github.com/zerotier/ZeroTierOne for release notes
|
||||||
|
|
||||||
|
* Thu Aug 17 2023 Adam Ierymenko <adam.ierymenko@zerotier.com> - 1.12.0
|
||||||
|
- see https://github.com/zerotier/ZeroTierOne for release notes
|
||||||
|
|
||||||
* Tue Mar 21 2023 Adam Ierymenko <adam.ierymenko@zerotier.com> - 1.10.6
|
* Tue Mar 21 2023 Adam Ierymenko <adam.ierymenko@zerotier.com> - 1.10.6
|
||||||
- see https://github.com/zerotier/ZeroTierOne for release notes
|
- see https://github.com/zerotier/ZeroTierOne for release notes
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user