From 6a17e0f9d524f7fa1c790306535e199335ed81ad Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 6 Jul 2016 14:09:33 -0500 Subject: [PATCH] osx demo app tweaks --- .../UserInterfaceState.xcuserstate | Bin 59329 -> 58901 bytes .../UserInterfaceState.xcuserstate | Bin 38999 -> 41406 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 23 +++++ .../Base.lproj/Main.storyboard | 7 ++ .../Example_OSX_App-Bridging-Header.h | 15 +-- .../Example_OSX_App/ViewController.swift | 86 +++++++++++++++++- src/SDK_RPC.c | 4 +- src/SDK_Sockets.c | 3 +- src/SDK_XcodeWrapper.cpp | 19 ++-- 9 files changed, 137 insertions(+), 20 deletions(-) create mode 100644 integrations/apple/example_app/Example_OSX_App.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index bf2c8bb92122e20404c5893b81b1d021b5241baf..970787159c9265af708e8f5510c14dc9fc96ecd9 100644 GIT binary patch delta 26899 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 Pw6wo%h5YUR>stQ<;f6z= delta 27814 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 diff --git a/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 0db74a7eacc2b568bb27a77d8917f81d62245a66..39c8cf1732ace1b1790986cceb7d43e88ad95c13 100644 GIT binary patch literal 41406 zcmdSC2V4|q^EkfG?%v+*?g1xVigb{2aQ%+XaR-Xh6zrPwfK!PGgadooC%sxyO&9Dj ziRrzV-c6#WnZzU-O^j)#SM!_Q<={@y7~gN+_y6~OKLK{1XP$Xx=9y<^o_S`QI@?;k z-8$VK0udxZ5j3G781)6}3n!<}_jGw%JK86wb~K&sY3}w;Np*KM&uN9njj7!oouLG} zaNYJ{)K)@CsE9BkoQNPYh>=7lkws(^IfRzTB`S$g#Au?57(n=WXeT;|PU0M*i|`WNL=Ulu5Qqzji-;?TmBd=&dg2D+M&efDZsH!|UgAFDe&PY* zLE<6eVd6RBdEy1)MdBsmW#Sd$RpK?`b>cl@FYz&Pi1>{7ocNOXmN-g$NBl(mO#DLp zju0XdgE+(^H3~%$XgG>Nu_y^8qmjsfENC>ULKDzLGzm>cXQ37}2eqQJQ9J5FUet{i zqD5#iT7p)f^U(R|Qgj(wjn<;;(GBQEbQ9WuHlj^vE4mxqgYHF-qQ}tl=mqp5dI`OT zK0+U(PtbmJ0DX!MqC@Bh^dtHS{fvG=zoI`$M3N*$(j-TQkP&1g8AZmEBgh0Yg-j*W z$aFG;%qH_l9a%t@koDwrat3)8=^{PkT(X1gB)iETauKr>>>0qt;TlP<_;TYAdy!x}SQKdW?FNdX3siy-vMBy-5wHc2OTt zA5#0MkEjFGr_|@vVd@L&2#sixrf8a0&?2ew2Qa-a$W0KS#erzfA9>U#EA|d+2xR_vnx4kLge8 zFX^x7@93ZC-{@lsO2H~PMX(}V5v7Pxj8LR1(iEABJcU7FQxqx66{8hZiW)_OVxnTY zVy0r2VveF+(WO|ZSgtr%ak1i3#cIXXiW?Lg6k8Nq6?Z7^RNSMuSMj7`hvF&4(~4&l zFDPDA>{Pt2cti1l;zPwg#Yc*d6`v^fD?V2oR(zp2qWDJfyW$VUpNeCOzZimH7$u`( z!kGvrl8IuXnc++VlgK17$xJ$9V2q53F*6pXh$&{Om@&*)rkbf?YMDl60yB}B#7tw{ zjE9-UbTa2KU5uAmz$|8#FqpZ3xsbV>xq?~4T*s_su4isxb}?@=?=bH(A21&?pD+iR zL(CV<5#}4_TjmGmN9I@NH|7}gmy%M_N|lmT1}TG;p~^62lrmZwr;Jx7DU+4y$_!<; zGDoRX>Xl}tMOmOMRF*2slul)Za-4F!vO(FXoS>YjoTQwrY*BiYvy`)yUS+qkM~Ri^ zD$i4{Qm$6sq`X;qi}F_GHs$Tghm;R1A5lK4d`$Vc@(JaW%2$-HDqmB+r`)T2U-^OZ zbLC;>7s{WMKP!Jx(JFO9r?s@1ABs+(1}sBTqlQ{Aq* zLv_FEN!1S3Q>v#`�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 AnE(I) literal 38999 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 S; + + + + + + + + diff --git a/integrations/apple/example_app/Example_OSX_App/Base.lproj/Main.storyboard b/integrations/apple/example_app/Example_OSX_App/Base.lproj/Main.storyboard index 0a00bd1..e5fe78e 100644 --- a/integrations/apple/example_app/Example_OSX_App/Base.lproj/Main.storyboard +++ b/integrations/apple/example_app/Example_OSX_App/Base.lproj/Main.storyboard @@ -767,6 +767,9 @@ + + + @@ -775,6 +778,9 @@ + + + @@ -950,6 +956,7 @@ + diff --git a/integrations/apple/example_app/Example_OSX_App/Example_OSX_App-Bridging-Header.h b/integrations/apple/example_app/Example_OSX_App/Example_OSX_App-Bridging-Header.h index d2012ca..311657b 100644 --- a/integrations/apple/example_app/Example_OSX_App/Example_OSX_App-Bridging-Header.h +++ b/integrations/apple/example_app/Example_OSX_App/Example_OSX_App-Bridging-Header.h @@ -19,15 +19,16 @@ void zt_leave_network(const char *nwid); // Direct Call ZT API // These functions will provide direct access to ZT-enabled sockets with no hassle +int zts_init_rpc(const char *path, const char *nwid); int zts_connect(CONNECT_SIG); -int zt_bind(BIND_SIG); -int zt_accept(ACCEPT_SIG); -int zt_listen(LISTEN_SIG); +int zts_bind(BIND_SIG); +int zts_accept(ACCEPT_SIG); +int zts_listen(LISTEN_SIG); int zts_socket(SOCKET_SIG); -int zt_setsockopt(SETSOCKOPT_SIG); -int zt_getsockopt(GETSOCKOPT_SIG); -int zt_close(CLOSE_SIG); -int zt_getsockname(GETSOCKNAME_SIG); +int zts_setsockopt(SETSOCKOPT_SIG); +int zts_getsockopt(GETSOCKOPT_SIG); +int zts_close(CLOSE_SIG); +int zts_getsockname(GETSOCKNAME_SIG); #endif /* Example_OSX_Bridging_Header_h */ diff --git a/integrations/apple/example_app/Example_OSX_App/ViewController.swift b/integrations/apple/example_app/Example_OSX_App/ViewController.swift index 723aeb5..af0a4ed 100644 --- a/integrations/apple/example_app/Example_OSX_App/ViewController.swift +++ b/integrations/apple/example_app/Example_OSX_App/ViewController.swift @@ -23,30 +23,108 @@ class ViewController: NSViewController { @IBOutlet weak var txtRX: NSScrollView! @IBOutlet weak var btnSend: NSButton! - + var serverPort:Int32 = 4545 + var serverAddr:String = "10.147.18.5" + + @IBAction func txtAddrChanged(sender: AnyObject) { + if(sender.value != nil) { + serverAddr = sender.value + } + } + + @IBAction func txtPortChanged(sender: AnyObject) { + serverPort = sender.intValue! + } + + // Join a ZeroTier network @IBAction func UI_JoinNetwork(sender: AnyObject) { zt_join_network(txtNWID.stringValue); } + // Leave a ZeroTier network @IBAction func UI_LeaveNetwork(sender: AnyObject) { zt_leave_network(txtNWID.stringValue); } + // Select an API + var selectedShim:Int32 = 0 @IBAction func UI_SelectAPI(sender: AnyObject) { + selectedShim = sender.intValue // 0 = BSD-style, 1 = SOCKS5 Proxy, etc } + // Select a protocol + // Protocol { TCP / UDP } + var selectedProtocol:Int32 = 0 @IBAction func UI_SelectProtocol(sender: AnyObject) { - } + switch sender.intValue + { + case 0: + print("Selected TCP (SOCK_STREAM)\n"); + selectedProtocol = SOCK_STREAM + case 1: + print("Selected UDP (SOCK_DGRAM)\n"); + selectedProtocol = SOCK_DGRAM + default: + break; + } } + // Connect to remote host on ZeroTier virtual network @IBAction func UI_Connect(sender: AnyObject) { + // TCP + if(selectedProtocol == SOCK_STREAM) + { + let sd = zts_socket(AF_INET, SOCK_STREAM, 0) + var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)), + sin_family: UInt8(AF_INET), + 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_fd = zts_connect(sd, UnsafePointer([addr]), UInt32(addr.sin_len)) + print("connect_fd = \(connect_fd),\(errno)") + + if connect_fd < 0 { + let err = errno + print("Error connecting IPv4 socket \(err)") + return + } + } + + // UDP + if(selectedProtocol == SOCK_DGRAM) + { + + } } @IBAction func UI_Bind(sender: AnyObject) { } @IBAction func UI_SendData(sender: AnyObject) { + } + /* + // Mode { Client / Server } + @IBOutlet weak var ModeControl: UISegmentedControl! + var selectedMode:UInt16 = 0 + @IBAction func ModeControlSelected(sender: AnyObject) { + switch sender.selectedSegmentIndex + { + case 0: + print("Selected client\n"); + selectedMode = 0 + case 1: + print("Selected server\n"); + selectedMode = 1 + default: + break; + } + } + + */ var service_thread : NSThread! @@ -67,7 +145,9 @@ class ViewController: NSViewController { self.service_thread = NSThread(target:self, selector:"ztnc_start_service", object:nil) self.service_thread.start() }); - // Do any additional setup after loading the view. + + // Set RPC path for this thread + zts_init_rpc("/Users/Joseph/utest3/nc_","e5cd7a9e1c2e194f"); } override var representedObject: AnyObject? { diff --git a/src/SDK_RPC.c b/src/SDK_RPC.c index a47eb41..a0b8573 100644 --- a/src/SDK_RPC.c +++ b/src/SDK_RPC.c @@ -107,7 +107,7 @@ int get_retval(int rpc_sock) int load_symbols_rpc() { -#if defined(SDK_INTERCEPT) || defined(__IOS__) || defined(__UNITY_3D__) +#if defined(SDK_BUNDLED) || defined(__IOS__) || defined(__UNITY_3D__) realsocket = dlsym(RTLD_NEXT, "socket"); realconnect = dlsym(RTLD_NEXT, "connect"); if(!realconnect || !realsocket) @@ -157,7 +157,9 @@ int rpc_send_command(char *path, int cmd, int forfd, void *data, int len) memcpy(CANARY+CANARY_SZ, padding, sizeof(padding)); uint64_t canary_num; // ephemeral RPC socket used only for this command + printf("calling rpc_join"); int rpc_sock = rpc_join(path); + printf("fin\n"); // Generate token int fdrand = open("/dev/urandom", O_RDONLY); if(read(fdrand, &CANARY, CANARY_SZ) < 0) { diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index 1f835e2..c32d4b0 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -88,7 +88,7 @@ int (*realclose)(CLOSE_SIG); dwr(MSG_DEBUG, "zt_init_rpc\n"); // Just double check we have if(!realconnect) { - //load_symbols(); + load_symbols_rpc(); } if(!api_netpath) { @@ -353,6 +353,7 @@ int (*realclose)(CLOSE_SIG); #endif #endif /* -1 is passed since we we're generating the new socket in this call */ + printf("path = %s\n", api_netpath); int err = rpc_send_command(api_netpath, RPC_SOCKET, -1, &rpc_st, sizeof(struct socket_st)); dwr(MSG_DEBUG," socket() = %d\n", err); return err; diff --git a/src/SDK_XcodeWrapper.cpp b/src/SDK_XcodeWrapper.cpp index 9b06bfd..3c8a136 100755 --- a/src/SDK_XcodeWrapper.cpp +++ b/src/SDK_XcodeWrapper.cpp @@ -32,30 +32,33 @@ extern "C" void zt_leave_network(const char * nwid){ } // Explicit ZT API wrappers -extern "C" int zt_socket(SOCKET_SIG) { +extern "C" void zts_init_rpc(const char *path, const char *nwid) { + zt_init_rpc(path, nwid); +} +extern "C" int zts_socket(SOCKET_SIG) { return zt_socket(socket_family, socket_type, protocol); } extern "C" int zts_connect(CONNECT_SIG) { return zt_connect(__fd, __addr, __len); } -extern "C" int zt_bind(BIND_SIG){ +extern "C" int zts_bind(BIND_SIG){ return zt_bind(sockfd, addr, addrlen); } -extern "C" int zt_accept(ACCEPT_SIG) { +extern "C" int zts_accept(ACCEPT_SIG) { return zt_accept(sockfd, addr, addrlen); } -extern "C" int zt_listen(LISTEN_SIG) { +extern "C" int zts_listen(LISTEN_SIG) { return zt_listen(sockfd, backlog); } -extern "C" int zt_setsockopt(SETSOCKOPT_SIG) { +extern "C" int zts_setsockopt(SETSOCKOPT_SIG) { return zt_setsockopt(socket, level, option_name, option_value, option_len); } -extern "C" int zt_getsockopt(GETSOCKOPT_SIG) { +extern "C" int zts_getsockopt(GETSOCKOPT_SIG) { return zt_getsockopt(sockfd, level, optname, optval, optlen); } -extern "C" int zt_close(CLOSE_SIG) { +extern "C" int zts_close(CLOSE_SIG) { return zt_close(fd); } -extern "C" int zt_getsockname(GETSOCKNAME_SIG) { +extern "C" int zts_getsockname(GETSOCKNAME_SIG) { return zt_getsockname(sockfd, addr, addrlen); }