|
|
|
@ -2,6 +2,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
#include <SDL.h> |
|
|
|
#include <SDL.h> |
|
|
|
#include <atomic> |
|
|
|
#include <atomic> |
|
|
|
|
|
|
|
#include <unordered_map> |
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_SDL1 |
|
|
|
#ifdef USE_SDL1 |
|
|
|
#include "utils/sdl2_to_1_2_backports.h" |
|
|
|
#include "utils/sdl2_to_1_2_backports.h" |
|
|
|
@ -38,6 +39,15 @@ namespace net { |
|
|
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
namespace { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// static constexpr uint64_t zt_earth = 0x8056c2e21c000001;
|
|
|
|
|
|
|
|
constexpr uint64_t ZtNetwork = 0xa84ac5c10a7ebb5f; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::atomic_bool zt_network_ready(false); |
|
|
|
|
|
|
|
std::atomic_bool zt_node_online(false); |
|
|
|
|
|
|
|
std::atomic_bool zt_joined(false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::unordered_map<uint64_t, zts_event_t> ztPeerEvents; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef DVL_ZT_SYMLINK |
|
|
|
#ifdef DVL_ZT_SYMLINK |
|
|
|
bool HasMultiByteChars(string_view path) |
|
|
|
bool HasMultiByteChars(string_view path) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -107,38 +117,48 @@ std::string ToZTCompliantPath(string_view configPath) |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
void Callback(void *ptr) |
|
|
|
|
|
|
|
|
|
|
|
// static constexpr uint64_t zt_earth = 0x8056c2e21c000001;
|
|
|
|
|
|
|
|
static constexpr uint64_t ZtNetwork = 0xa84ac5c10a7ebb5f; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static std::atomic_bool zt_network_ready(false); |
|
|
|
|
|
|
|
static std::atomic_bool zt_node_online(false); |
|
|
|
|
|
|
|
static std::atomic_bool zt_joined(false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void Callback(void *ptr) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
zts_event_msg_t *msg = reinterpret_cast<zts_event_msg_t *>(ptr); |
|
|
|
zts_event_msg_t *msg = reinterpret_cast<zts_event_msg_t *>(ptr); |
|
|
|
// printf("callback %i\n", msg->eventCode);
|
|
|
|
|
|
|
|
if (msg->event_code == ZTS_EVENT_NODE_ONLINE) { |
|
|
|
switch (msg->event_code) { |
|
|
|
|
|
|
|
case ZTS_EVENT_NODE_ONLINE: |
|
|
|
Log("ZeroTier: ZTS_EVENT_NODE_ONLINE, nodeId={:x}", (unsigned long long)msg->node->node_id); |
|
|
|
Log("ZeroTier: ZTS_EVENT_NODE_ONLINE, nodeId={:x}", (unsigned long long)msg->node->node_id); |
|
|
|
zt_node_online = true; |
|
|
|
zt_node_online = true; |
|
|
|
if (!zt_joined) { |
|
|
|
if (!zt_joined) { |
|
|
|
zts_net_join(ZtNetwork); |
|
|
|
zts_net_join(ZtNetwork); |
|
|
|
zt_joined = true; |
|
|
|
zt_joined = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (msg->event_code == ZTS_EVENT_NODE_OFFLINE) { |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ZTS_EVENT_NODE_OFFLINE: |
|
|
|
Log("ZeroTier: ZTS_EVENT_NODE_OFFLINE"); |
|
|
|
Log("ZeroTier: ZTS_EVENT_NODE_OFFLINE"); |
|
|
|
zt_node_online = false; |
|
|
|
zt_node_online = false; |
|
|
|
} else if (msg->event_code == ZTS_EVENT_NETWORK_READY_IP6) { |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ZTS_EVENT_NETWORK_READY_IP6: |
|
|
|
Log("ZeroTier: ZTS_EVENT_NETWORK_READY_IP6, networkId={:x}", (unsigned long long)msg->network->net_id); |
|
|
|
Log("ZeroTier: ZTS_EVENT_NETWORK_READY_IP6, networkId={:x}", (unsigned long long)msg->network->net_id); |
|
|
|
zt_ip6setup(); |
|
|
|
zt_ip6setup(); |
|
|
|
zt_network_ready = true; |
|
|
|
zt_network_ready = true; |
|
|
|
} else if (msg->event_code == ZTS_EVENT_ADDR_ADDED_IP6) { |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ZTS_EVENT_ADDR_ADDED_IP6: |
|
|
|
print_ip6_addr(&(msg->addr->addr)); |
|
|
|
print_ip6_addr(&(msg->addr->addr)); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ZTS_EVENT_PEER_DIRECT: |
|
|
|
|
|
|
|
case ZTS_EVENT_PEER_RELAY: |
|
|
|
|
|
|
|
ztPeerEvents[msg->peer->peer_id] = static_cast<zts_event_t>(msg->event_code); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ZTS_EVENT_PEER_PATH_DEAD: |
|
|
|
|
|
|
|
ztPeerEvents.erase(msg->peer->peer_id); |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
bool zerotier_network_ready() |
|
|
|
bool zerotier_network_ready() |
|
|
|
{ |
|
|
|
{ |
|
|
|
return zt_network_ready && zt_node_online; |
|
|
|
return zt_network_ready && zt_node_online; |
|
|
|
@ -156,5 +176,20 @@ void zerotier_network_start() |
|
|
|
zts_node_start(); |
|
|
|
zts_node_start(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool zerotier_is_relayed(uint64_t mac) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
bool isRelayed = true; |
|
|
|
|
|
|
|
if (zts_core_lock_obtain() != ZTS_ERR_OK) |
|
|
|
|
|
|
|
return isRelayed; |
|
|
|
|
|
|
|
zts_peer_info_t peerInfo; |
|
|
|
|
|
|
|
if (zts_core_query_peer_info(ZtNetwork, mac, &peerInfo) == ZTS_ERR_OK) { |
|
|
|
|
|
|
|
auto peerEvent = ztPeerEvents.find(peerInfo.peer_id); |
|
|
|
|
|
|
|
if (peerEvent != ztPeerEvents.end()) |
|
|
|
|
|
|
|
isRelayed = (peerEvent->second == ZTS_EVENT_PEER_RELAY); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
zts_core_lock_release(); |
|
|
|
|
|
|
|
return isRelayed; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} // namespace net
|
|
|
|
} // namespace net
|
|
|
|
} // namespace devilution
|
|
|
|
} // namespace devilution
|
|
|
|
|