From c3591cc570cb3daca88876748b7269c680965c23 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 22 Jun 2016 13:19:01 -0700 Subject: [PATCH] updated integrations page --- docs/osx_zt_sdk.md | 29 ++++++++---------- .../Example_OSX_App.xcodeproj/project.pbxproj | 2 ++ .../UserInterfaceState.xcuserstate | Bin 24789 -> 24070 bytes .../Example_OSX_App/ViewController.swift | 17 ++++++++++ .../UserInterfaceState.xcuserstate | Bin 51187 -> 55436 bytes .../ZeroTierSDK_OSX/ZeroTierSDK_OSX.h | 2 +- integrations/README.md | 18 +++++------ make-mac.mk | 10 +++--- 8 files changed, 47 insertions(+), 31 deletions(-) diff --git a/docs/osx_zt_sdk.md b/docs/osx_zt_sdk.md index 10970c9..dd02acf 100644 --- a/docs/osx_zt_sdk.md +++ b/docs/osx_zt_sdk.md @@ -46,24 +46,12 @@ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { }); ``` -**Step 5: Pick a shim for your app** - -This integration allows for the following shim combinations: -- `Hook of BSD-like sockets`: Use BSD-like sockets as you normally would. -- `Proxy of NSStream`: Create NSStream. Configure stream for SOCKS5 Proxy. Use stream. -- `Changeling of BSD-like sockets`: Call `start_changeling()` and then use BSD-like sockets as you normally would. -- `Direct Call`: Consult [SDK-iOS-Bridging-Header.h](netcon/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h). - -If functional interposition isn't available for the API or library you've chosen to use, ZeroTier offers a SOCKS5 proxy server which can allow connectivity to your virtual network as long as your client API supports the SOCKS5 protocol. This proxy service will run alongside the tap service and can be turned on by compiling with the `-DUSE_SOCKS_PROXY` flag in *Build Settings->Other C Flags*. By default, the proxy service is available at `0.0.0.0:1337`. +**Step 5: Pick an [API](# API) to use** **Step 6: Join a network!** - -Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` + - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` *** - - - ## Linking into an application on Mac OSX Example: @@ -93,12 +81,21 @@ Run application **Step 3: Add its path to your *Build Settings -> Framework Search Paths***: - For example: `$(PROJECT_DIR)/../../../build/OSX_app_framework/Release` -**Step 4: Pick [API](## API)** +**Step 4: Pick an [API](# API) to use** + +**Step 5: Join a network!** + - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` *** - ## API +This integration allows for the following shim combinations: +- `Hook of BSD-like sockets`: Use BSD-like sockets as you normally would. +- `Proxy of NSStream`: Create NSStream. Configure stream for SOCKS5 Proxy. Use stream. +- `Changeling of BSD-like sockets`: Call `start_changeling()` and then use BSD-like sockets as you normally would. +- `Direct Call`: Consult [SDK-iOS-Bridging-Header.h](netcon/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h). + +If functional interposition isn't available for the API or library you've chosen to use, ZeroTier offers a SOCKS5 proxy server which can allow connectivity to your virtual network as long as your client API supports the SOCKS5 protocol. This proxy service will run alongside the tap service and can be turned on by compiling with the `-DUSE_SOCKS_PROXY` flag in *Build Settings->Other C Flags*. By default, the proxy service is available at `0.0.0.0:1337`. #### NSStream and SOCKS Proxy diff --git a/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.pbxproj b/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.pbxproj index c60eaaa..98a6af0 100644 --- a/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.pbxproj +++ b/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ /* Begin PBXFileReference section */ 7CA571031D1B0D9500720883 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZeroTierSDK_OSX.framework; path = ../../../build/OSX_app_framework/Debug/ZeroTierSDK_OSX.framework; sourceTree = ""; }; + 7CA571081D1B1DCB00720883 /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZeroTierSDK_OSX.h; path = ../../ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h; sourceTree = ""; }; 7CFCB42D1D1AFEE800D3E66C /* Example_OSX_App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example_OSX_App.app; sourceTree = BUILT_PRODUCTS_DIR; }; 7CFCB4301D1AFEE800D3E66C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7CFCB4321D1AFEE800D3E66C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -73,6 +74,7 @@ 7CFCB42F1D1AFEE800D3E66C /* Example_OSX_App */ = { isa = PBXGroup; children = ( + 7CA571081D1B1DCB00720883 /* ZeroTierSDK_OSX.h */, 7CFCB4301D1AFEE800D3E66C /* AppDelegate.swift */, 7CFCB4321D1AFEE800D3E66C /* ViewController.swift */, 7CFCB4341D1AFEE800D3E66C /* Assets.xcassets */, diff --git a/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple/Example_OSX_App/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 4e6e6fba4d44a90b65152207141d2b09b6295196..3167082d2afb305cbe373fbf5e03edafab17b34a 100644 GIT binary patch delta 11441 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 Jx6ks~{|CySuVDZH delta 11555 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 diff --git a/integrations/Apple/Example_OSX_App/Example_OSX_App/ViewController.swift b/integrations/Apple/Example_OSX_App/Example_OSX_App/ViewController.swift index 9268d00..edb4991 100644 --- a/integrations/Apple/Example_OSX_App/Example_OSX_App/ViewController.swift +++ b/integrations/Apple/Example_OSX_App/Example_OSX_App/ViewController.swift @@ -7,15 +7,32 @@ // import Cocoa +i class ViewController: NSViewController { + + var service_thread : NSThread! + func ztnc_start_service() { + let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) + print("start_service()\n") + // e5cd7a9e1c3511dd + start_service(path[0]) + } + + override func viewDidLoad() { super.viewDidLoad() + // ZeroTier Service thread + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { + self.service_thread = NSThread(target:self, selector:"ztnc_start_service", object:nil) + self.service_thread.start() + }); // Do any additional setup after loading the view. } + override var representedObject: AnyObject? { didSet { // Update the view, if already loaded. 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 bc557ffd8897077c4497896fc0b8ce14b5ab8b3a..ac30b5d59ac5c327cd40947a50cfc9084e591ea6 100644 GIT binary patch delta 27511 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 delta 24890 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 Qe0R@3-TO}b$<)C=05K+@#{d8T diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h index 8325739..ce3efcf 100644 --- a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h @@ -15,5 +15,5 @@ FOUNDATION_EXPORT double ZeroTierSDK_OSXVersionNumber; FOUNDATION_EXPORT const unsigned char ZeroTierSDK_OSXVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import - +#import diff --git a/integrations/README.md b/integrations/README.md index f4a3a95..e81fde4 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -16,22 +16,22 @@ For more support on these integrations, or if you'd like help creating a new int ### Apple ##### iOS - - [Embedding within an app](../docs/ios_zt_sdk.md) - - [Unity3D plugin](../docs/unity3d_ios_zt_sdk.md) + - [Embedding within an app](../docs/ios_zt_sdk.md) `make ios_app_framework` + - [Unity3D plugin](../docs/unity3d_ios_zt_sdk.md) `make ios_unity3d_bundle` ##### OSX - - [Embedding within an app](../docs/osx_zt_sdk.md) - - [Dynamic-linking into an app/service at runtime](../docs/osx_zt_sdk.md) - - [Unity3D plugin](../docs/unity3d_osx_zt_sdk.md) + - [Embedding within an app](../docs/osx_zt_sdk.md) `make osx_app_framework` + - [Dynamic-linking into an app/service at runtime](../docs/osx_zt_sdk.md) `make ` + - [Unity3D plugin](../docs/unity3d_osx_zt_sdk.md) `make osx_unity3d_bundle` *** ### Linux - - [Dynamic-linking into an app/service at runtime](../docs/linux_zt_sdk.md) - - [Using the SDK with Docker](../docs/docker_linux_zt_sdk.md) + - [Dynamic-linking into an app/service at runtime](../docs/linux_zt_sdk.md) `make linux_shared_lib` + - [Using the SDK with Docker](../docs/docker_linux_zt_sdk.md) `make linux_shared_lib` ### Android - - [Embedding within an app](../docs/android_zt_sdk.md) - - [Unity 3D plugin](../docs/unity3d_android_zt_sdk.md) + - [Embedding within an app](../docs/android_zt_sdk.md) `make android_jni_lib` + - [Unity 3D plugin](../docs/unity3d_android_zt_sdk.md) `make android_unity3d_plugin` *** ### Windows diff --git a/make-mac.mk b/make-mac.mk index 8d327e0..42b9e54 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -79,21 +79,21 @@ all: # TODO: CHECK if XCODE TOOLS are installed # Build frameworks for application development -OSX_app_framework: +osx_app_framework: cd integrations/Apple/ZeroTierSDK_Apple; xcodebuild -scheme ZeroTierSDK_OSX build SYMROOT="../../../build/OSX_app_framework" -iOS_app_framework: +ios_app_framework: cd integrations/Apple/ZeroTierSDK_Apple; xcodebuild -scheme ZeroTierSDK_iOS build SYMROOT="../../../build/iOS_app_framework" # Build bundles for Unity integrations -OSX_unity3d_bundle: +osx_unity3d_bundle: cd integrations/Apple/ZeroTierSDK_Apple; xcodebuild -scheme ZeroTierSDK_Unity3D_OSX build SYMROOT="../../../build/OSX_unity3d_bundle" -iOS_unity3d_bundle: +ios_unity3d_bundle: cd integrations/Apple/ZeroTierSDK_Apple; xcodebuild -scheme ZeroTierSDK_Unity3D_iOS build SYMROOT="../../../build/iOS_unity3d_bundle" # TODO: CHECK if ANDROID/GRADLE TOOLS are installed # Build JNI library for Android app integration -Android_JNI_library: +android_jni_library: cd integrations/Android/proj; ./gradlew assembleDebug # Build library for Android Unity integrations