You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.1 KiB
143 lines
4.1 KiB
/** |
|
* libzt Swift example |
|
* |
|
* swiftc -lc++ -import-objc-header ../../include/ZeroTierSockets.h -L. -lzt main.swift -o main; |
|
* ./main |
|
*/ |
|
|
|
import Swift |
|
import Foundation |
|
|
|
var nodeReady:Bool = false |
|
var networkReady:Bool = false |
|
|
|
let myZeroTierEventCallback : @convention(c) (UnsafeMutableRawPointer?) -> Void = |
|
{ |
|
(msgPtr) -> Void in |
|
let msg = msgPtr?.bindMemory(to: zts_callback_msg.self, capacity: 1) |
|
|
|
var eventCode = msg!.pointee.eventCode |
|
|
|
let node = msg?.pointee.node; |
|
let network = msg?.pointee.network; |
|
|
|
switch Int32(eventCode) |
|
{ |
|
case ZTS_EVENT_NODE_ONLINE: |
|
let nodeId:UInt64 = node!.pointee.address |
|
print(String(format: "ZTS_EVENT_NODE_ONLINE (%llx)", nodeId)) |
|
nodeReady = true; |
|
|
|
case ZTS_EVENT_NODE_OFFLINE: |
|
print("ZTS_EVENT_NODE_OFFLINE\n") |
|
nodeReady = false; |
|
|
|
case ZTS_EVENT_NODE_NORMAL_TERMINATION: |
|
print("ZTS_EVENT_NODE_NORMAL_TERMINATION\n") |
|
|
|
case ZTS_EVENT_NETWORK_NOT_FOUND: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_NOT_FOUND (%llx)", networkId)) |
|
|
|
case ZTS_EVENT_NETWORK_REQUESTING_CONFIG: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_REQUESTING_CONFIG (%llx)", networkId)) |
|
|
|
case ZTS_EVENT_NETWORK_ACCESS_DENIED: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_ACCESS_DENIED (%llx)", networkId)) |
|
|
|
case ZTS_EVENT_NETWORK_READY_IP4: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_READY_IP4 (%llx)", networkId)) |
|
networkReady = true; |
|
|
|
case ZTS_EVENT_NETWORK_READY_IP6: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_READY_IP6 (%llx)", networkId)) |
|
networkReady = true; |
|
|
|
case ZTS_EVENT_NETWORK_DOWN: |
|
let networkId:UInt64 = network!.pointee.nwid |
|
print(String(format: "ZTS_EVENT_NETWORK_DOWN (%llx)", networkId)) |
|
|
|
/* |
|
// Network stack events |
|
case ZTS_EVENT_NETIF_UP: |
|
print("ZTS_EVENT_NETIF_UP --- network=%llx, mac=%llx, mtu=%d\n", |
|
msg.netif->nwid, |
|
msg.netif->mac, |
|
msg.netif->mtu) |
|
//networkReady = true; |
|
|
|
case ZTS_EVENT_NETIF_DOWN: |
|
print("ZTS_EVENT_NETIF_DOWN --- network=%llx, mac=%llx\n", |
|
msg.netif->nwid, |
|
msg.netif->mac) |
|
//networkReady = true; |
|
|
|
// Address events |
|
case ZTS_EVENT_ADDR_ADDED_IP4: |
|
print("ZTS_EVENT_ADDR_ADDED_IP4") |
|
/* |
|
char ipstr[INET_ADDRSTRLEN]; |
|
struct zts_sockaddr_in *in4 = (struct zts_sockaddr_in*)&(msg.addr->addr); |
|
inet_ntop(AF_INET, &(in4->sin_addr), ipstr, INET_ADDRSTRLEN); |
|
print("ZTS_EVENT_ADDR_NEW_IP4 --- This node's virtual address on network %llx is %s\n", |
|
msg.addr->nwid, ipstr) |
|
*/ |
|
|
|
case ZTS_EVENT_ADDR_ADDED_IP6: |
|
print("ZTS_EVENT_ADDR_ADDED_IP6") |
|
/* |
|
char ipstr[INET6_ADDRSTRLEN]; |
|
struct zts_sockaddr_in6 *in6 = (struct zts_sockaddr_in6*)&(msg.addr->addr); |
|
inet_ntop(AF_INET6, &(in6->sin6_addr), ipstr, INET6_ADDRSTRLEN); |
|
print("ZTS_EVENT_ADDR_NEW_IP6 --- This node's virtual address on network %llx is %s\n", |
|
msg.addr->nwid, ipstr) |
|
*/ |
|
|
|
case ZTS_EVENT_ADDR_REMOVED_IP4: |
|
print("ZTS_EVENT_ADDR_REMOVED_IP4") |
|
/* |
|
char ipstr[INET_ADDRSTRLEN]; |
|
struct zts_sockaddr_in *in4 = (struct zts_sockaddr_in*)&(msg.addr->addr); |
|
inet_ntop(AF_INET, &(in4->sin_addr), ipstr, INET_ADDRSTRLEN); |
|
print("ZTS_EVENT_ADDR_REMOVED_IP4 --- The virtual address %s for this node on network %llx has been removed.\n", |
|
ipstr, msg.addr->nwid) |
|
*/ |
|
|
|
case ZTS_EVENT_ADDR_REMOVED_IP6: |
|
print("ZTS_EVENT_ADDR_REMOVED_IP6") |
|
/* |
|
char ipstr[INET6_ADDRSTRLEN]; |
|
struct zts_sockaddr_in6 *in6 = (struct zts_sockaddr_in6*)&(msg.addr->addr); |
|
inet_ntop(AF_INET6, &(in6->sin6_addr), ipstr, INET6_ADDRSTRLEN); |
|
print("ZTS_EVENT_ADDR_REMOVED_IP6 --- The virtual address %s for this node on network %llx has been removed.\n", |
|
ipstr, msg.addr->nwid) |
|
*/ |
|
// Peer events |
|
case ZTS_EVENT_PEER_P2P: |
|
print("ZTS_EVENT_PEER_P2P --- node=%llx\n", msg.peer->address) |
|
case ZTS_EVENT_PEER_RELAY: |
|
print("ZTS_EVENT_PEER_RELAY --- node=%llx\n", msg.peer->address) |
|
|
|
|
|
*/ |
|
default: |
|
print("UNKNOWN_EVENT") |
|
} |
|
} |
|
|
|
func main() |
|
{ |
|
print("waiting for node to come online...") |
|
zts_start("../../config_path_a", myZeroTierEventCallback, 0) |
|
while(!nodeReady) { |
|
sleep(1) |
|
} |
|
print("Joining network") |
|
|
|
} |
|
|
|
main()
|
|
|