iox/osx adjustments

This commit is contained in:
Joseph Henry
2016-09-09 10:51:15 -07:00
parent 195c993a14
commit 88cdb93317
6 changed files with 58 additions and 83 deletions

View File

@@ -7,6 +7,7 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
7C0C03D51D832599009C0827 /* ZTSDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0C03D41D832599009C0827 /* ZTSDK.swift */; };
7C74DACF1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */; }; 7C74DACF1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */; };
7C74DAD21D3C47D300A6C0B9 /* ZeroTierSDK_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */; }; 7C74DAD21D3C47D300A6C0B9 /* ZeroTierSDK_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */; };
7C74DAD31D3C485800A6C0B9 /* ZeroTierSDK_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */; }; 7C74DAD31D3C485800A6C0B9 /* ZeroTierSDK_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */; };
@@ -32,6 +33,7 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
7C0C03D41D832599009C0827 /* ZTSDK.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ZTSDK.swift; path = ../../../../../src/ZTSDK.swift; sourceTree = "<group>"; };
7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_XcodeWrapper.cpp; path = ../../../../../src/SDK_XcodeWrapper.cpp; sourceTree = "<group>"; }; 7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_XcodeWrapper.cpp; path = ../../../../../src/SDK_XcodeWrapper.cpp; sourceTree = "<group>"; };
7C74DACE1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_XcodeWrapper.hpp; path = ../../../../../src/SDK_XcodeWrapper.hpp; sourceTree = "<group>"; }; 7C74DACE1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_XcodeWrapper.hpp; path = ../../../../../src/SDK_XcodeWrapper.hpp; sourceTree = "<group>"; };
7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZeroTierSDK_OSX.framework; path = ../../../../build/osx_app_framework/Debug/ZeroTierSDK_OSX.framework; sourceTree = "<group>"; }; 7C74DAD01D3C472C00A6C0B9 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZeroTierSDK_OSX.framework; path = ../../../../build/osx_app_framework/Debug/ZeroTierSDK_OSX.framework; sourceTree = "<group>"; };
@@ -76,6 +78,7 @@
7CFCB42F1D1AFEE800D3E66C /* Example_OSX_App */ = { 7CFCB42F1D1AFEE800D3E66C /* Example_OSX_App */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
7C0C03D41D832599009C0827 /* ZTSDK.swift */,
7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */, 7C74DACD1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp */,
7C74DACE1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.hpp */, 7C74DACE1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.hpp */,
7CFCB4301D1AFEE800D3E66C /* AppDelegate.swift */, 7CFCB4301D1AFEE800D3E66C /* AppDelegate.swift */,
@@ -160,6 +163,7 @@
files = ( files = (
7CFCB4331D1AFEE800D3E66C /* ViewController.swift in Sources */, 7CFCB4331D1AFEE800D3E66C /* ViewController.swift in Sources */,
7C74DACF1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp in Sources */, 7C74DACF1D3C46EB00A6C0B9 /* SDK_XcodeWrapper.cpp in Sources */,
7C0C03D51D832599009C0827 /* ZTSDK.swift in Sources */,
7CFCB4311D1AFEE800D3E66C /* AppDelegate.swift in Sources */, 7CFCB4311D1AFEE800D3E66C /* AppDelegate.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;

View File

@@ -10,6 +10,8 @@ import Cocoa
class ViewController: NSViewController { class ViewController: NSViewController {
let zt = ZTSDK();
@IBOutlet weak var btnJoinNetwork: NSButton! @IBOutlet weak var btnJoinNetwork: NSButton!
@IBOutlet weak var btnLeaveNetwork: NSButton! @IBOutlet weak var btnLeaveNetwork: NSButton!
@IBOutlet weak var txtNWID: NSTextField! @IBOutlet weak var txtNWID: NSTextField!
@@ -25,7 +27,6 @@ class ViewController: NSViewController {
var serverPort:Int32 = 8080 var serverPort:Int32 = 8080
var serverAddr:String = "0.0.0.0" var serverAddr:String = "0.0.0.0"
var sock:Int32 = -1 var sock:Int32 = -1
var accepted_sock:Int32 = -1 var accepted_sock:Int32 = -1
@@ -41,12 +42,12 @@ class ViewController: NSViewController {
// Join a ZeroTier network // Join a ZeroTier network
@IBAction func UI_JoinNetwork(sender: AnyObject) { @IBAction func UI_JoinNetwork(sender: AnyObject) {
zt_join_network(txtNWID.stringValue); zt.join_network(txtNWID.stringValue);
} }
// Leave a ZeroTier network // Leave a ZeroTier network
@IBAction func UI_LeaveNetwork(sender: AnyObject) { @IBAction func UI_LeaveNetwork(sender: AnyObject) {
zt_leave_network(txtNWID.stringValue); zt.leave_network(txtNWID.stringValue);
} }
// Select an API // Select an API
@@ -78,18 +79,11 @@ class ViewController: NSViewController {
// TCP // TCP
if(selectedProtocol == SOCK_STREAM) if(selectedProtocol == SOCK_STREAM)
{ {
sock = zt_socket(AF_INET, SOCK_STREAM, 0) sock = zt.socket(AF_INET, SOCK_STREAM, 0)
var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)), let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, Int16(serverPort))
sin_family: UInt8(AF_INET), let connect_err = zt.connect(sock, ztaddr)
sin_port: UInt16(serverPort).bigEndian,
sin_addr: in_addr(s_addr: 0),
sin_zero: (0,0,0,0,0,0,0,0))
inet_pton(AF_INET, serverAddr, &(addr.sin_addr));
let connect_err = zt_connect(sock, UnsafePointer<sockaddr>([addr]), UInt32(addr.sin_len))
print("connect_err = \(connect_err),\(errno)") print("connect_err = \(connect_err),\(errno)")
if connect_err < 0 { if connect_err < 0 {
let err = errno let err = errno
print("Error connecting IPv4 socket \(err)") print("Error connecting IPv4 socket \(err)")
@@ -116,36 +110,24 @@ class ViewController: NSViewController {
var bind_thread : NSThread! var bind_thread : NSThread!
func attempt_bind() func attempt_bind()
{ {
sock = zt_socket(AF_INET, SOCK_STREAM, 0) sock = zt.socket(AF_INET, SOCK_STREAM, 0)
var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)), let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, Int16(serverPort))
sin_family: UInt8(AF_INET), let bind_err = zt.bind(sock, ztaddr)
sin_port: UInt16(serverPort).bigEndian,
sin_addr: in_addr(s_addr: 0), print("bind_err = \(bind_err),\(errno)")
sin_zero: (0,0,0,0,0,0,0,0)) if bind_err < 0 {
let err = errno
print("Error binding IPv4 socket \(err)")
return
}
inet_pton(AF_INET, serverAddr, &(addr.sin_addr)); // Put socket into listening state
zt_listen(sock, 1);
let bind_err = zt_bind(sock, UnsafePointer<sockaddr>([addr]), UInt32(addr.sin_len))
print("bind_err = \(bind_err),\(errno)")
if bind_err < 0 {
let err = errno
print("Error binding IPv4 socket \(err)")
return
}
// Put socket into listening state
zt_listen(sock, 1);
// Accept connection
var len:socklen_t = 0;
var legIntPtr = withUnsafeMutablePointer(&len, { $0 })
// TCP // TCP
if(selectedProtocol == SOCK_STREAM) { if(selectedProtocol == SOCK_STREAM) {
while(accepted_sock < 0) { while(accepted_sock < 0) {
accepted_sock = zt_accept(sock, UnsafeMutablePointer<sockaddr>([addr]), legIntPtr) accepted_sock = zt.accept(sock, ztaddr)
} }
print("accepted connection") print("accepted connection")
} }
@@ -205,14 +187,14 @@ class ViewController: NSViewController {
{ {
sleep(1) sleep(1)
dispatch_async(dispatch_get_main_queue()) { dispatch_async(dispatch_get_main_queue()) {
var str_buf = [Int8](count: 16, repeatedValue: 0) //var str_buf = [Int8](count: 16, repeatedValue: 0)
zt_get_addresses(self.txtNWID.stringValue, &str_buf); //zt_get_addresses(self.txtNWID.stringValue, &str_buf);
print("IPV4 = ", String.fromCString(str_buf)) //print("IPV4 = ", String.fromCString(str_buf))
} }
// TCP // TCP
if(selectedProtocol == SOCK_STREAM) if(selectedProtocol == SOCK_STREAM)
{ {
var len = 32 let len = 32
var buffer = [UInt8](count: len, repeatedValue: 0) var buffer = [UInt8](count: len, repeatedValue: 0)
let n = read(accepted_sock, &buffer, len); let n = read(accepted_sock, &buffer, len);
if(n > 0) if(n > 0)
@@ -292,11 +274,12 @@ class ViewController: NSViewController {
txtPort.intValue = serverPort txtPort.intValue = serverPort
txtNWID.stringValue = "8056c2e21c000001" txtNWID.stringValue = "8056c2e21c000001"
// ZeroTier Service thread selectedProtocol = SOCK_STREAM
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { print("Starting ZeroTier...\n");
self.service_thread = NSThread(target:self, selector:"ztnc_start_service", object:nil) zt.start_service(nil);
self.service_thread.start() print("Joining network...\n");
}); zt.join_network(txtNWID.stringValue);
print("Complete\n");
// Update UI on RX of data // Update UI on RX of data
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {

View File

@@ -93,11 +93,10 @@ class ViewController: UIViewController {
if(selectedProtocol == SOCK_STREAM) if(selectedProtocol == SOCK_STREAM)
{ {
sock = zt.socket(AF_INET, SOCK_STREAM, 0) sock = zt.socket(AF_INET, SOCK_STREAM, 0)
let ztaddr: ZTAddress = ZTAddress(family: AF_INET, addr: serverAddr, port: serverPort) let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, serverPort)
let connect_err = zt.connect(sock, ztaddr) let connect_err = zt.connect(sock, ztaddr)
print("connect_err = \(connect_err),\(errno)") print("connect_err = \(connect_err),\(errno)")
if connect_err < 0 { if connect_err < 0 {
let err = errno let err = errno
print("Error connecting IPv4 socket \(err)") print("Error connecting IPv4 socket \(err)")
@@ -130,7 +129,7 @@ class ViewController: UIViewController {
if(selectedProtocol == SOCK_STREAM) if(selectedProtocol == SOCK_STREAM)
{ {
sock = zt_socket(AF_INET, SOCK_STREAM, 0) sock = zt_socket(AF_INET, SOCK_STREAM, 0)
let ztaddr: ZTAddress = ZTAddress(family: AF_INET, addr: serverAddr, port: serverPort) let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, serverPort)
let bind_err = zt.bind(sock, ztaddr) let bind_err = zt.bind(sock, ztaddr)
print("bind_err = \(bind_err),\(errno)") print("bind_err = \(bind_err),\(errno)")
@@ -144,9 +143,6 @@ class ViewController: UIViewController {
// Put socket into listening state // Put socket into listening state
zt_listen(Int32(sock), 1); zt_listen(Int32(sock), 1);
// Accept connection
var len:socklen_t = 0;
var legIntPtr = withUnsafeMutablePointer(&len, { $0 })
while(accepted_sock < 0) { while(accepted_sock < 0) {
accepted_sock = zt.accept(sock, ztaddr) accepted_sock = zt.accept(sock, ztaddr)
} }
@@ -156,7 +152,7 @@ class ViewController: UIViewController {
// UDP // UDP
if(selectedProtocol == SOCK_DGRAM) if(selectedProtocol == SOCK_DGRAM)
{ {
let ztaddr: ZTAddress = ZTAddress(family: AF_INET, addr: serverAddr, port: serverPort) let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, serverPort)
sock = zt_socket(AF_INET, SOCK_DGRAM, 0) sock = zt_socket(AF_INET, SOCK_DGRAM, 0)
err = zt.bind(sock, ztaddr) err = zt.bind(sock, ztaddr)
@@ -189,9 +185,9 @@ class ViewController: UIViewController {
sleep(1) sleep(1)
dispatch_async(dispatch_get_main_queue()) { dispatch_async(dispatch_get_main_queue()) {
var str_buf = [Int8](count: 16, repeatedValue: 0) //var str_buf = [Int8](count: 16, repeatedValue: 0)
print(self.zt.get_address(self.txtNWID.text!)) //, &str_buf); //print(self.zt.get_address(self.txtNWID.text!)) //, &str_buf);
self.lblAddress.text = String.fromCString(str_buf) //self.lblAddress.text = String.fromCString(str_buf)
// print("IPV4 = ", String.fromCString(str_buf)) // print("IPV4 = ", String.fromCString(str_buf))
} }
@@ -277,14 +273,10 @@ class ViewController: UIViewController {
serverPort = 8080 serverPort = 8080
selectedProtocol = SOCK_STREAM selectedProtocol = SOCK_STREAM
sleep(3)
print("Starting ZeroTier...\n"); print("Starting ZeroTier...\n");
zt.start_service(nil); zt.start_service(nil);
print("Joining network...\n"); print("Joining network...\n");
zt.join_network(txtNWID.text!); zt.join_network(txtNWID.text!);
print("Complete\n"); print("Complete\n");
// UI RX update // UI RX update

View File

@@ -22,7 +22,9 @@ bool zt_service_is_running();
void zt_join_network(const char *nwid); void zt_join_network(const char *nwid);
void zt_leave_network(const char *nwid); void zt_leave_network(const char *nwid);
void zt_is_running(const char *nwid); void zt_is_running(const char *nwid);
void zt_get_addresses(const char *nwid, char * addrstr); void zt_get_ipv4_address(const char *nwid, char *addrstr);
void zt_get_ipv6_address(const char *nwid, char *addrstr);
// SOCKS5 PROXY CONTROLS // SOCKS5 PROXY CONTROLS
void zt_start_proxy_server(const char *nwid, struct sockaddr_storage addr); void zt_start_proxy_server(const char *nwid, struct sockaddr_storage addr);

View File

@@ -61,8 +61,12 @@ extern "C" void zt_leave_network(const char *nwid) {
zts_leave_network(nwid); zts_leave_network(nwid);
} }
// Returns a list of addresses associated with this device on the given network // Returns a list of addresses associated with this device on the given network
extern "C" void zt_get_addresses(const char *nwid, char *addrstr) { extern "C" void zt_get_ipv4_address(const char *nwid, char *addrstr) {
zts_get_addresses(nwid, addrstr); zts_get_ipv4_address(nwid, addrstr);
}
// Returns a list of addresses associated with this device on the given network
extern "C" void zt_get_ipv6_address(const char *nwid, char *addrstr) {
zts_get_ipv6_address(nwid, addrstr);
} }

View File

@@ -16,15 +16,13 @@ struct ZTAddress
var port: Int16 var port: Int16
var data: sockaddr_in? var data: sockaddr_in?
init(family: Int32, addr: String, port: Int16) init(_ family: Int32, _ addr: String, _ port: Int16) {
{
self.family = family self.family = family
self.addr = addr self.addr = addr
self.port = port self.port = port
} }
func to_sockaddr_in() -> UnsafePointer<sockaddr> func to_sockaddr_in() -> UnsafePointer<sockaddr> {
{
var data = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)), var data = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)),
sin_family: UInt8(AF_INET), sin_family: UInt8(AF_INET),
sin_port: UInt16(port).bigEndian, sin_port: UInt16(port).bigEndian,
@@ -34,8 +32,7 @@ struct ZTAddress
return UnsafePointer<sockaddr>([data]); return UnsafePointer<sockaddr>([data]);
} }
func len() -> UInt8 func len() -> UInt8 {
{
return UInt8(sizeof(sockaddr_in)) return UInt8(sizeof(sockaddr_in))
} }
} }
@@ -46,8 +43,7 @@ struct ZTAddress
class ZTSDK : NSObject class ZTSDK : NSObject
{ {
var service_thread : NSThread! var service_thread : NSThread!
private func ztnc_start_service(path: String?) private func ztnc_start_service(path: String?) {
{
if(path == nil) { if(path == nil) {
zt_start_service( zt_start_service(
NSSearchPathForDirectoriesInDomains( NSSearchPathForDirectoriesInDomains(
@@ -58,9 +54,7 @@ class ZTSDK : NSObject
} }
// Starts the ZeroTier background service // Starts the ZeroTier background service
func start_service(path: String?) func start_service(path: String?) {
{
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) { dispatch_async(queue) {
self.ztnc_start_service(path) self.ztnc_start_service(path)
@@ -70,26 +64,22 @@ class ZTSDK : NSObject
} }
// Stops the ZeroTier background service // Stops the ZeroTier background service
func stop_service() func stop_service() {
{
zt_stop_service(); zt_stop_service();
} }
// Returns whether the ZeroTier background service is running // Returns whether the ZeroTier background service is running
func service_is_running() -> Bool func service_is_running() -> Bool {
{
return zt_service_is_running(); return zt_service_is_running();
} }
// Joins a ZeroTier network // Joins a ZeroTier network
func join_network(nwid: String) func join_network(nwid: String) {
{
zt_join_network(nwid); zt_join_network(nwid);
} }
// Leaves a ZeroTier network // Leaves a ZeroTier network
func leave_network(nwid: String) func leave_network(nwid: String) {
{
zt_leave_network(nwid); zt_leave_network(nwid);
} }