From 27c26b61b27bdb9068a9b7d331b69462060b22b6 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 20 Jul 2016 14:20:45 -0700 Subject: [PATCH] API usability update, normalized zt_ naming convention --- docs/img/api_diagram.png | Bin 0 -> 313928 bytes docs/zt_sdk_intro.md | 5 +- .../android_jni_lib/java/jni/Application.mk | 6 +- .../app/src/main/java/ZeroTier/SDK.java | 56 +++- .../joseph/example_app/MainActivity.java | 12 +- .../app/src/main/jniLibs/README.md | 57 ++-- .../xcdebugger/Breakpoints_v2.xcbkptlist | 4 +- .../OSX/Example_OSX_App/ViewController.swift | 12 +- .../iOS/Example_iOS_App/ViewController.swift | 12 +- .../docker/docker_demo/XXXXXXXXXXXXXXXX.conf | 0 make-mac.mk | 3 + src/SDK.h | 82 +++-- src/SDK_Apple-Bridging-Header.h | 20 +- src/SDK_Intercept.c | 30 +- src/SDK_JNI_Java_Wapper.java | 48 +-- src/SDK_RPC.c | 1 - src/SDK_RPC.h | 11 +- src/SDK_ServiceSetup.cpp | 117 +++---- src/SDK_ServiceSetup.hpp | 23 +- src/SDK_Sockets.c | 312 +++++++++++------- src/SDK_XcodeWrapper.cpp | 41 ++- src/SDK_XcodeWrapper.hpp | 2 - tests/docker/XXXXXXXXXXXXXXXX.conf | 0 23 files changed, 476 insertions(+), 378 deletions(-) create mode 100644 docs/img/api_diagram.png delete mode 100644 integrations/docker/docker_demo/XXXXXXXXXXXXXXXX.conf delete mode 100644 tests/docker/XXXXXXXXXXXXXXXX.conf diff --git a/docs/img/api_diagram.png b/docs/img/api_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..98793d0ddbf78bd41ed294b5acf6267e9f0a9473 GIT binary patch literal 313928 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%0ANw#6nAWx%-k_z(3 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�As~O$3dv_5-B^eFFo;#rKbj&_a{FG5 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

?#HX^T)fT<ht52PBdoZNjC| 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 literal 0 HcmV?d00001 diff --git a/docs/zt_sdk_intro.md b/docs/zt_sdk_intro.md index fae1f84..f12ba46 100644 --- a/docs/zt_sdk_intro.md +++ b/docs/zt_sdk_intro.md @@ -34,4 +34,7 @@ We've built a special background service that pairs the ZeroTier protocol with a - Provides an integrated SOCKS5 server alongside the ZeroTier service to proxy connections from an application to resources on a ZeroTier network. For instance, a developer which has built an iOS app using the NSStreams API could add ZeroTier to their application and simply use the SOCKS5 support build into NSStreams to reach resources on their network. An Android developer could do the same using the SOCKS5 support provided in the `Socket` API. **Direct Call** -- Directly call the `zt_/zts_` API specified in [SDK.h](src/SDK.h). For this to work, just use one of the provided headers that specify the interface for your system/architecture and then either dynamically-load our library into your app or compile it right in. \ No newline at end of file +- Directly call the `zt_` API specified in [SDK.h](src/SDK.h). For this to work, just use one of the provided headers that specify the interface for your system/architecture and then either dynamically-load our library into your app or compile it right in. + +*** +![Image](docs/img/api_diagram.png) diff --git a/integrations/android/android_jni_lib/java/jni/Application.mk b/integrations/android/android_jni_lib/java/jni/Application.mk index c84a3a1..ef759b7 100644 --- a/integrations/android/android_jni_lib/java/jni/Application.mk +++ b/integrations/android/android_jni_lib/java/jni/Application.mk @@ -7,10 +7,10 @@ APP_PLATFORM := android-14 # Architectures # APP_ABI := all -APP_ABI += arm64-v8a +#APP_ABI += arm64-v8a #APP_ABI += armeabi APP_ABI += armeabi-v7a #APP_ABI += mips #APP_ABI += mips64 -APP_ABI += x86 -APP_ABI += x86_64 +#APP_ABI += x86 +#APP_ABI += x86_64 diff --git a/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java b/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java index 241cad3..d633a7e 100644 --- a/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java +++ b/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java @@ -1,3 +1,29 @@ +/* + * ZeroTier One - Network Virtualization Everywhere + * Copyright (C) 2011-2015 ZeroTier, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * -- + * + * ZeroTier may be used and distributed under the terms of the GPLv3, which + * are available at: http://www.gnu.org/licenses/gpl-3.0.html + * + * If you would like to embed ZeroTier into a commercial application or + * redistribute it in a modified binary form, please contact ZeroTier Networks + * LLC. Start here: http://www.zerotier.com/ + */ package ZeroTier; import java.net.SocketAddress; @@ -16,21 +42,21 @@ public class SDK { static { System.loadLibrary("ZeroTierOneJNI"); } // ZeroTier service controls - public native void startOneService(String homeDir); - public native void joinNetwork(String nwid); - public native void leaveNetwork(String nwid); - public native boolean isRunning(); + public native void zt_start_service(String homeDir); + public native void zt_join_network(String nwid); + public native void zt_leave_network(String nwid); + public native boolean zt_running(); // Direct-call API - // --- These calls skip the intercept and interface directly via the RPC mechanism --- - public native int ztjniSocket(int family, int type, int protocol); - public native int ztjniConnect(int fd, String addr, int port); - public native int ztjniBind(int fd, String addr, int port); - public native int ztjniAccept4(int fd, String addr, int port); - public native int ztjniAccept(int fd, String addr, int port, int flags); - public native int ztjniListen(int fd, int backlog); - //public native int ztjniGetsockopt(int fd, int type, int protocol); - //public native int ztjniSetsockopt(int fd, int type, int protocol); - //public native int ztjniGetsockname(int fd, int type, int protocol); - public native int ztjniClose(int fd); + // --- These calls skip the intercept and interface directly via the RPC mechanism + public native int zt_socket(int family, int type, int protocol); + public native int zt_connect(int fd, String addr, int port); + public native int zt_bind(int fd, String addr, int port); + public native int zt_accept4(int fd, String addr, int port); + public native int zt_accept(int fd, String addr, int port, int flags); + public native int zt_listen(int fd, int backlog); + //public native int zt_getsockopt(int fd, int type, int protocol); + //public native int zt_setsockopt(int fd, int type, int protocol); + //public native int zt_getsockname(int fd, int type, int protocol); + public native int zt_close(int fd); } \ No newline at end of file diff --git a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java index 17de8c7..65a4524 100644 --- a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java +++ b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java @@ -25,15 +25,15 @@ public class MainActivity extends AppCompatActivity { new Thread(new Runnable() { public void run() { // Calls to JNI code - zt.startOneService(homeDir); + zt.zt_start_service(homeDir); } }).start(); - while(!zt.isRunning()) { } - zt.joinNetwork("XXXXXXXXXXXXXXXX"); + while(!zt.zt_running()) { } + zt.zt_join_network("XXXXXXXXXXXXXXXX"); // Create ZeroTier socket - int sock = zt.ztjniSocket(zt.AF_INET, zt.SOCK_STREAM, 0); + int sock = zt.zt_socket(zt.AF_INET, zt.SOCK_STREAM, 0); try { Thread.sleep(10000); @@ -41,8 +41,8 @@ public class MainActivity extends AppCompatActivity { catch(java.lang.InterruptedException e) { } // Connect to remote host - Log.d("","ztjniConnect()\n"); - int err = zt.ztjniConnect(sock, "10.9.9.203", 8080); + Log.d("","zt_connect()\n"); + int err = zt.zt_connect(sock, "10.9.9.203", 8080); // Set up example proxy connection to SDK proxy server /* diff --git a/integrations/android/example_app/app/src/main/jniLibs/README.md b/integrations/android/example_app/app/src/main/jniLibs/README.md index c0c5624..8eba259 100644 --- a/integrations/android/example_app/app/src/main/jniLibs/README.md +++ b/integrations/android/example_app/app/src/main/jniLibs/README.md @@ -3,14 +3,13 @@ Android + ZeroTier SDK Welcome! -Imagine a flat, encrypted, no-configuration LAN for all of the instances of your Android app. +Imagine a flat, encrypted, no-configuration LAN for all of the instances of your Android app. This short tutorial will show you how to enable ZeroTier functionality for your Android app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works. In this example we aim to set up a minimal [Android Studio](https://developer.android.com/studio/index.html) project which contains all of the components necessary to enable ZeroTier for your app. -This short tutorial will show you how to enable ZeroTier functionality for your Android app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](https://www.zerotier.com/blog) for a discussion of shims available for your app/technology. +*NOTE: For Android JNI libraries to build you'll need to install [Android Studio](https://developer.android.com/studio/index.html) the [Android NDK](https://developer.android.com/ndk/index.html). Currently only Android NDK r10e is supported and can be found [here for OSX](http://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip) and [here for Linux](http://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip). You'll need to tell our project where you put it by putting the path in [this file](android/proj/local.properties), you'll need to install the Android Build-Tools (this can typically be done through the editor the first time you start it up), and finally you should probably upgrade your Gradle plugin if it asks you to. If you don't have these things installed and configured we will detect that and just skip those builds automatically.* -In this example we aim to set up a minimal [Android Studio](https://developer.android.com/studio/index.html) project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the code, look in the [sdk/android](https://github.com/zerotier/ZeroTierOne/tree/dev/sdk/integrations/android/example_app) folder in the source tree. Otherwise, let's get started! - -*NOTE: For Android JNI libraries to build you'll need to install [Android Studio](https://developer.android.com/studio/index.html) the [Android NDK](https://developer.android.com/ndk/index.html). Currently only Android NDK r10e is supported and can be found [here for OSX](http://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip) and [here for Linux](http://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip). You'll need to tell our project where you put it by putting the path in [this file](Android/proj/local.properties), you'll need to install the Android Build-Tools (this can typically be done through the editor the first time you start it up), and finally you should probably upgrade your Gradle plugin if it asks you to. If you don't have these things installed and configured we will detect that and just skip those builds automatically.* +If you want to skip these steps and just take a look at the project, go [here](example_app). +*** **Step 1: Select build targets** - Specify the target architectures you want to build in [Application.mk](android/java/jni/Application.mk). By default it will build `arm64-v8a`, `armeabi`, `armeabi-v7a`, `mips`, `mips64`, `x86`, and `x86_64`. @@ -18,7 +17,16 @@ In this example we aim to set up a minimal [Android Studio](https://developer.an - `make android_jni_lib` - The resultant `build/android_jni_lib_YOUR_ARCH/libZeroTierOneJNI.so` is what you want to import into your own project to provide the API to your app. Select your architecture and copy the shared library into your project's JNI directory, possibly `/src/main/jniLibs/YOUR_ARCH/`. Selecting only the architectures you need will *significantly* reduce overall build time. -**Step 3: App Code Modifications** +**Step 3: App permissions** + + - In order for your application to write the auth keys and network files to the internal storage you'll need to set a few permissions in your `AndroidManifest.xml` file at the same scope level as ``: + +``` + + +``` + +**Step 4: App Code Modifications** - Create new package called `ZeroTierSDK` in your project and add a new file called `ZeroTierSDK.java` containing: ``` @@ -32,36 +40,33 @@ public class ZeroTierSDK { } ``` - - And now, start the service in your app with: + - Start the service ``` +final SDK zt = new SDK(); +final String homeDir = getApplicationContext().getFilesDir() + "/zerotier"; + new Thread(new Runnable() { - public void run() { - ZeroTierSDK wrapper = new ZeroTierSDK(); - wrapper.startOneService(); // Calls to JNI code - } + public void run() { + // Calls to JNI code + zt.startOneService(homeDir); + } }).start(); ``` -**Step 4: App permissions** - - - In order for your application to write the auth keys and network files to the internal storage you'll need to set a few permissions in your `AndroidManifest.xml` file at the same scope level as ``: + - Join network and perform network call ``` - - +while(!zt.isRunning()) { } +zt.joinNetwork("XXXXXXXXXXXXXXXX"); + +// Create ZeroTier socket +int sock = zt.ztjniSocket(zt.AF_INET, zt.SOCK_STREAM, 0); + +// Connect to remote host +int err = zt.ztjniConnect(sock, "10.9.9.203", 8080); ``` -**Step 5: Pick an API** - - - 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. By default, the proxy service is available at `0.0.0.0:1337`. - -**Step 6: Join a network!** - - - Simply call `wrapper.joinNetwork("XXXXXXXXXXXXXXXX")` - - - *** *Note for the curious on JNI naming conventions: In order to reference a symbol in the JNI library you need to structure the package and class in your Android Studio project in a very particular way. For example, in the ZeroTierSDK we define a function called `Java_ZeroTier_SDK_startOneService`, the name can be broken down as follows: `Java_PACKAGENAME_CLASSNAME_startOneService`, so as we've defined it, you must create a package called `ZeroTier` and add a class called `SDK`.* diff --git a/integrations/apple/example_app/OSX/Example_OSX_App.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/integrations/apple/example_app/OSX/Example_OSX_App.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index eec5470..3c19311 100644 --- a/integrations/apple/example_app/OSX/Example_OSX_App.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/integrations/apple/example_app/OSX/Example_OSX_App.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -46,7 +46,9 @@ startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "50" - endingLineNumber = "50"> + endingLineNumber = "50" + landmarkName = "zt_join_network(const char * nwid)" + landmarkType = "7"> ([addr]), UInt32(addr.sin_len)) + let connect_err = zt_connect(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) print("connect_err = \(connect_err),\(errno)") if connect_err < 0 { @@ -119,7 +119,7 @@ class ViewController: NSViewController { // TCP if(selectedProtocol == SOCK_STREAM) { - sock = zts_socket(AF_INET, SOCK_STREAM, 0) + sock = zt_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, @@ -128,7 +128,7 @@ class ViewController: NSViewController { inet_pton(AF_INET, serverAddr, &(addr.sin_addr)); - let bind_err = zts_bind(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) + let bind_err = zt_bind(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) print("bind_err = \(bind_err),\(errno)") @@ -139,13 +139,13 @@ class ViewController: NSViewController { } // Put socket into listening state - zts_listen(sock, 1); + zt_listen(sock, 1); // Accept connection var len:socklen_t = 0; var legIntPtr = withUnsafeMutablePointer(&len, { $0 }) while(accepted_sock < 0) { - accepted_sock = zts_accept(sock, UnsafeMutablePointer([addr]), legIntPtr) + accepted_sock = zt_accept(sock, UnsafeMutablePointer([addr]), legIntPtr) } print("accepted connection") } diff --git a/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift b/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift index 6bfb3dd..7b2ab14 100644 --- a/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift +++ b/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift @@ -94,7 +94,7 @@ class ViewController: UIViewController { // TCP if(selectedProtocol == SOCK_STREAM) { - sock = zts_socket(AF_INET, SOCK_STREAM, 0) + sock = zt_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, @@ -103,7 +103,7 @@ class ViewController: UIViewController { inet_pton(AF_INET, serverAddr, &(addr.sin_addr)); - let connect_err = zts_connect(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) + let connect_err = zt_connect(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) print("connect_err = \(connect_err),\(errno)") if connect_err < 0 { @@ -135,7 +135,7 @@ class ViewController: UIViewController { // TCP if(selectedProtocol == SOCK_STREAM) { - sock = zts_socket(AF_INET, SOCK_STREAM, 0) + sock = zt_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, @@ -144,7 +144,7 @@ class ViewController: UIViewController { inet_pton(AF_INET, serverAddr, &(addr.sin_addr)); - let bind_err = zts_bind(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) + let bind_err = zt_bind(sock, UnsafePointer([addr]), UInt32(addr.sin_len)) print("bind_err = \(bind_err),\(errno)") @@ -155,13 +155,13 @@ class ViewController: UIViewController { } // Put socket into listening state - zts_listen(sock, 1); + zt_listen(sock, 1); // Accept connection var len:socklen_t = 0; var legIntPtr = withUnsafeMutablePointer(&len, { $0 }) while(accepted_sock < 0) { - accepted_sock = zts_accept(sock, UnsafeMutablePointer([addr]), legIntPtr) + accepted_sock = zt_accept(sock, UnsafeMutablePointer([addr]), legIntPtr) } print("accepted connection") } diff --git a/integrations/docker/docker_demo/XXXXXXXXXXXXXXXX.conf b/integrations/docker/docker_demo/XXXXXXXXXXXXXXXX.conf deleted file mode 100644 index e69de29..0000000 diff --git a/make-mac.mk b/make-mac.mk index de91150..2d722a5 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -163,6 +163,9 @@ clean: # example android app project -cd $(INT)/android/example_app; ./gradlew clean +clean_for_production: + -find . -type f \( -name '*.identity'\) -delete + # For authors # Copies documentation to all of the relevant directories to make viewing in the repo a little easier diff --git a/src/SDK.h b/src/SDK.h index 72052f6..f8c6ece 100644 --- a/src/SDK.h +++ b/src/SDK.h @@ -32,8 +32,8 @@ #include #include "SDK_Signatures.h" -// For defining the Android direct-call API #if defined(__ANDROID__) + // For defining the Android direct-call API #include #endif @@ -49,6 +49,9 @@ extern void zt_init_rpc(const char *path, const char *nwid); extern char *api_netpath; extern char *debug_logfile; +// Function pointers to original system calls +// - These are used when we detect that either the intercept is not +// available or that ZeroTier hasn't administered the given socket #if defined(__linux__) extern int (*realaccept4)(ACCEPT4_SIG); #if !defined(__ANDROID__) @@ -71,48 +74,57 @@ extern char *debug_logfile; extern int (*realsetsockopt)(SETSOCKOPT_SIG); extern int (*realgetsockopt)(GETSOCKOPT_SIG); extern int (*realclose)(CLOSE_SIG); - extern int (*realgetsockname)(GETSOCKNAME_SIG); - -ssize_t zt_sendto(SENDTO_SIG); -ssize_t zt_sendmsg(SENDMSG_SIG); -ssize_t zt_recvfrom(RECVFROM_SIG); -ssize_t zt_recvmsg(RECVMSG_SIG); + extern int (*realgetsockname)(GETSOCKNAME_SIG); + +// Direct call +// - Skips intercept +// - Uses RPC +// - Depending on the target, the API will be exposed as zt_* in +// the specific way needed for that platform, but will be implemented +// in terms of zts_* +int zts_socket(SOCKET_SIG); +int zts_connect(CONNECT_SIG); +int zts_bind(BIND_SIG); +#if defined(__linux__) + int zts_accept4(ACCEPT4_SIG); +#endif +int zts_accept(ACCEPT_SIG); +int zts_listen(LISTEN_SIG); +int zts_setsockopt(SETSOCKOPT_SIG); +int zts_getsockopt(GETSOCKOPT_SIG); +int zts_getsockname(GETSOCKNAME_SIG); +int zts_close(CLOSE_SIG); +ssize_t zts_sendto(SENDTO_SIG); +ssize_t zts_sendmsg(SENDMSG_SIG); +ssize_t zts_recvfrom(RECVFROM_SIG); +ssize_t zts_recvmsg(RECVMSG_SIG); #if defined(__UNITY_3D__) - ssize_t zt_recv(int fd, void *buf, int len); - ssize_t zt_send(int fd, void *buf, int len); - int zt_set_nonblock(int fd); -#endif - + ssize_t zts_recv(int fd, void *buf, int len); + ssize_t zts_send(int fd, void *buf, int len); + int zts_set_nonblock(int fd); +#endif + + // Android JNI Direct-call API +// - Implemented in terms of zt_* direct calls #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniSocket(JNIEnv *env, jobject thisObj, jint family, jint type, jint protocol); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniConnect(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniBind(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniAccept(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniAccept4(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port, jint flags); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniListen(JNIEnv *env, jobject thisObj, jint fd, int backlog); - //JNIEXPORT void JNICALL Java_ZeroTier_SDK_ztjniSetsockopt(JNIEnv *env, jobject thisObj); - //JNIEXPORT void JNICALL Java_ZeroTier_SDK_ztjniGetsockopt(JNIEnv *env, jobject thisObj); - //JNIEXPORT void JNICALL Java_ZeroTier_SDK_ztjniGetsockname(JNIEnv *env, jobject thisObj); - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniClose(JNIEnv *env, jobject thisObj, jint fd); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1socket(JNIEnv *env, jobject thisObj, jint family, jint type, jint protocol); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1connect(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1bind(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1accept(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1accept4(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port, jint flags); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1listen(JNIEnv *env, jobject thisObj, jint fd, int backlog); + //JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1setsockopt(JNIEnv *env, jobject thisObj); + //JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1getsockopt(JNIEnv *env, jobject thisObj); + //JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1getsockname(JNIEnv *env, jobject thisObj); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1close(JNIEnv *env, jobject thisObj, jint fd); #endif -int zt_socket(SOCKET_SIG); -int zt_connect(CONNECT_SIG); -int zt_bind(BIND_SIG); -#if defined(__linux__) - int zt_accept4(ACCEPT4_SIG); -#endif -int zt_accept(ACCEPT_SIG); -int zt_listen(LISTEN_SIG); -int zt_setsockopt(SETSOCKOPT_SIG); -int zt_getsockopt(GETSOCKOPT_SIG); -int zt_getsockname(GETSOCKNAME_SIG); -int zt_close(CLOSE_SIG); - +// Prototypes for redefinition of syscalls +// - Implemented in SDK_Intercept.c #if defined(SDK_INTERCEPT) int socket(SOCKET_SIG); int connect(CONNECT_SIG); diff --git a/src/SDK_Apple-Bridging-Header.h b/src/SDK_Apple-Bridging-Header.h index 6d73ce5..04114bb 100644 --- a/src/SDK_Apple-Bridging-Header.h +++ b/src/SDK_Apple-Bridging-Header.h @@ -20,16 +20,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 zts_bind(BIND_SIG); -int zts_accept(ACCEPT_SIG); -int zts_listen(LISTEN_SIG); -int zts_socket(SOCKET_SIG); -int zts_setsockopt(SETSOCKOPT_SIG); -int zts_getsockopt(GETSOCKOPT_SIG); -int zts_close(CLOSE_SIG); -int zts_getsockname(GETSOCKNAME_SIG); +int zt_init_rpc(const char *path, const char *nwid); +int zt_connect(CONNECT_SIG); +int zt_bind(BIND_SIG); +int zt_accept(ACCEPT_SIG); +int zt_listen(LISTEN_SIG); +int zt_socket(SOCKET_SIG); +int zt_setsockopt(SETSOCKOPT_SIG); +int zt_getsockopt(GETSOCKOPT_SIG); +int zt_close(CLOSE_SIG); +int zt_getsockname(GETSOCKNAME_SIG); #endif /* Example_OSX_Bridging_Header_h */ diff --git a/src/SDK_Intercept.c b/src/SDK_Intercept.c index e3561d9..0e8dbc6 100644 --- a/src/SDK_Intercept.c +++ b/src/SDK_Intercept.c @@ -173,7 +173,7 @@ char *api_netpath; dwr(MSG_DEBUG, "sendto(%d, %d)\n", sockfd, len); //if (!check_intercept_enabled()) return realsendto(sockfd, buf, len, flags, addr, addr_len); - return zt_sendto(sockfd, buf, len, flags, addr, addr_len); + return zts_sendto(sockfd, buf, len, flags, addr, addr_len); } #endif @@ -188,7 +188,7 @@ char *api_netpath; dwr(MSG_DEBUG, "sendmsg()\n"); //if(!check_intercept_enabled()) return realsendmsg(socket, message, flags); - zt_sendmsg(socket, message, flags); + zts_sendmsg(socket, message, flags); } #endif @@ -204,7 +204,7 @@ char *api_netpath; dwr(MSG_DEBUG, "recvfrom(%d)\n", socket); if(!check_intercept_enabled()) return realrecvfrom(socket, buffer, length, flags, address, address_len); - return zt_recvfrom(socket, buffer, length, flags, address, address_len); + return zts_recvfrom(socket, buffer, length, flags, address, address_len); } #endif @@ -219,7 +219,7 @@ char *api_netpath; dwr(MSG_DEBUG, "recvmsg(%d)\n", socket); //if(!check_intercept_enabled()) return realrecvmsg(socket, message, flags); - return zt_recvmsg(socket, message, flags); + return zts_recvmsg(socket, message, flags); } #endif @@ -244,7 +244,7 @@ char *api_netpath; return 0; if(realsetsockopt(socket, level, option_name, option_value, option_len) < 0) perror("setsockopt():\n"); - return zt_setsockopt(socket, level, option_name, option_value, option_len); + return zts_setsockopt(socket, level, option_name, option_value, option_len); } // ------------------------------------------------------------------------------ @@ -258,7 +258,7 @@ char *api_netpath; dwr(MSG_DEBUG, "getsockopt(%d)\n", sockfd); if (!check_intercept_enabled() || !connected_to_service(sockfd)) return realgetsockopt(sockfd, level, optname, optval, optlen); - return zt_getsockopt(sockfd, level, optname, optval, optlen); + return zts_getsockopt(sockfd, level, optname, optval, optlen); } // ------------------------------------------------------------------------------ @@ -289,7 +289,7 @@ char *api_netpath; dwr(MSG_DEBUG,"realsocket() = %d\n", err); return err; } - return zt_socket(socket_family, socket_type, protocol); + return zts_socket(socket_family, socket_type, protocol); } // ------------------------------------------------------------------------------ @@ -352,7 +352,7 @@ char *api_netpath; || connaddr->sin_family == AF_UNIX)) { return realconnect(__fd, __addr, __len); } - return zt_connect(__fd, __addr, __len); + return zts_connect(__fd, __addr, __len); } // ------------------------------------------------------------------------------ @@ -410,7 +410,7 @@ char *api_netpath; errno = ENOTSOCK; return -1; } - return zt_bind(sockfd, addr, addrlen); + return zts_bind(sockfd, addr, addrlen); } // ------------------------------------------------------------------------------ @@ -421,7 +421,7 @@ char *api_netpath; #if defined(__linux__) int accept4(ACCEPT4_SIG) { dwr(MSG_DEBUG,"accept4(%d):\n", sockfd); - return zt_accept4(sockfd, addr, addrlen, flags); + return zts_accept4(sockfd, addr, addrlen, flags); } #endif @@ -476,7 +476,7 @@ char *api_netpath; return(realaccept(sockfd, addr, addrlen)); } - return zt_accept(sockfd, addr, addrlen); + return zts_accept(sockfd, addr, addrlen); } // ------------------------------------------------------------------------------ @@ -514,7 +514,7 @@ char *api_netpath; if(!connected_to_service(sockfd)) { return reallisten(sockfd, backlog); } - return zt_listen(sockfd, backlog); + return zts_listen(sockfd, backlog); } // ------------------------------------------------------------------------------ @@ -527,7 +527,7 @@ char *api_netpath; if(!check_intercept_enabled()) { return realclose(fd); } - return zt_close(fd); + return zts_close(fd); } // ------------------------------------------------------------------------------ @@ -547,7 +547,7 @@ char *api_netpath; dwr(MSG_DEBUG,"getsockname(): not used by service\n"); return realgetsockname(sockfd, addr, addrlen); } - return zt_getsockname(sockfd, addr, addrlen); + return zts_getsockname(sockfd, addr, addrlen); } // ------------------------------------------------------------------------------ @@ -598,5 +598,5 @@ char *api_netpath; #endif #endif -#endif // ZT_SDK_INTERCEPT +#endif // zts_SDK_INTERCEPT diff --git a/src/SDK_JNI_Java_Wapper.java b/src/SDK_JNI_Java_Wapper.java index 7756ca6..d633a7e 100644 --- a/src/SDK_JNI_Java_Wapper.java +++ b/src/SDK_JNI_Java_Wapper.java @@ -24,29 +24,39 @@ * redistribute it in a modified binary form, please contact ZeroTier Networks * LLC. Start here: http://www.zerotier.com/ */ - package ZeroTier; + +import java.net.SocketAddress; + public class SDK { - // Loads JNI code + // Socket families + public int AF_UNIX = 1; + public int AF_INET = 2; + + // Socket types + public int SOCK_STREAM = 1; + public int SOCK_DGRAM = 2; + + // Loads JNI code static { System.loadLibrary("ZeroTierOneJNI"); } - - // ZeroTier service controls - public native void startOneService(String homeDir); - public native void joinNetwork(String nwid); - public native void leaveNetwork(String nwid); - public native boolean isRunning(); + + // ZeroTier service controls + public native void zt_start_service(String homeDir); + public native void zt_join_network(String nwid); + public native void zt_leave_network(String nwid); + public native boolean zt_running(); // Direct-call API - // --- These calls skip the intercept and interface directly via the RPC mechanism --- - public native int ztjniSocket(int family, int type, int protocol); - public native int ztjniConnect(int fd, SocketAddress addr, int addrlen); - public native int ztjniBind(int fd, SocketAddress addr, int addrlen); - public native int ztjniAccept4(int fd, SocketAddress addr, int addrlen); - public native int ztjniAccept(int fd, SocketAddress addr, int addrlen, int flags); - public native int ztjniListen(int fd, int backlog); - //public native int ztjniGetsockopt(int fd, int type, int protocol); - //public native int ztjniSetsockopt(int fd, int type, int protocol); - //public native int ztjniGetsockname(int fd, int type, int protocol); - public native int ztjniClose(int fd); + // --- These calls skip the intercept and interface directly via the RPC mechanism + public native int zt_socket(int family, int type, int protocol); + public native int zt_connect(int fd, String addr, int port); + public native int zt_bind(int fd, String addr, int port); + public native int zt_accept4(int fd, String addr, int port); + public native int zt_accept(int fd, String addr, int port, int flags); + public native int zt_listen(int fd, int backlog); + //public native int zt_getsockopt(int fd, int type, int protocol); + //public native int zt_setsockopt(int fd, int type, int protocol); + //public native int zt_getsockname(int fd, int type, int protocol); + public native int zt_close(int fd); } \ No newline at end of file diff --git a/src/SDK_RPC.c b/src/SDK_RPC.c index cfffc99..6f5ddd6 100644 --- a/src/SDK_RPC.c +++ b/src/SDK_RPC.c @@ -47,7 +47,6 @@ #include #include #include -//#include #include #include "SDK.h" diff --git a/src/SDK_RPC.h b/src/SDK_RPC.h index b61633a..0cca0e1 100644 --- a/src/SDK_RPC.h +++ b/src/SDK_RPC.h @@ -28,17 +28,8 @@ #ifndef __RPCLIB_H_ #define __RPCLIB_H_ -#include -#include -#include -#include -#include -#include -#include #include -#include -#include - + #define CANARY_SZ sizeof(uint64_t) #define PADDING_SZ 12 #define PADDING 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 diff --git a/src/SDK_ServiceSetup.cpp b/src/SDK_ServiceSetup.cpp index 2d41a9d..bf04371 100644 --- a/src/SDK_ServiceSetup.cpp +++ b/src/SDK_ServiceSetup.cpp @@ -60,9 +60,9 @@ std::string localHomeDir; // Local shortened path std::string givenHomeDir; // What the user/application provides as a suggestion std::string homeDir; // The resultant platform-specific dir we *must* use internally std::string netDir; +std::string rpcNWID; bool rpcEnabled; -std::string rpcNWID; #ifdef __cplusplus extern "C" { @@ -92,56 +92,50 @@ void zt_init_rpc(const char * path, const char * nwid); } #endif - void join_network(const char * nwid) - { - std::string confFile = zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf"; - LOGV("writing conf file = %s\n", confFile.c_str()); - if(!ZeroTier::OSUtils::mkdir(netDir)) { - LOGV("unable to create %s\n", netDir.c_str()); - } - if(!ZeroTier::OSUtils::writeFile(confFile.c_str(), "")) { - LOGV("unable to write network conf file: %s\n", confFile.c_str()); - } - // This provides the API with the RPC information - zt_init_rpc(homeDir.c_str(), nwid); + +// Basic ZT service controls +void zts_join_network(const char * nwid) { + std::string confFile = zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf"; + LOGV("writing conf file = %s\n", confFile.c_str()); + if(!ZeroTier::OSUtils::mkdir(netDir)) { + LOGV("unable to create %s\n", netDir.c_str()); } - - void leave_network(const char *nwid) { zt1Service->leave(nwid); } - void zt_join_network(const char * nwid) { join_network(nwid); } - void zt_leave_network(const char * nwid) { leave_network(nwid); } - bool zt_is_running() { return zt1Service->isRunning(); } - void zt_terminate() { zt1Service->terminate(); } + if(!ZeroTier::OSUtils::writeFile(confFile.c_str(), "")) { + LOGV("unable to write network conf file: %s\n", confFile.c_str()); + } + // Provide the API with the RPC information + zt_init_rpc(homeDir.c_str(), nwid); +} +void zts_leave_network(const char * nwid) { zt1Service->leave(nwid); } +bool zts_is_running() { return zt1Service->isRunning(); } +void zts_terminate() { zt1Service->terminate(); } // Android JNI wrapper +// JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME #if defined(__ANDROID__) - // JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME - JNIEXPORT void JNICALL Java_ZeroTier_SDK_joinNetwork(JNIEnv *env, jobject thisObj, jstring nwid) { + JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1join_1network(JNIEnv *env, jobject thisObj, jstring nwid) { const char *nwidstr; if(nwid) { nwidstr = env->GetStringUTFChars(nwid, NULL); - zt_join_network(nwidstr); + zts_join_network(nwidstr); } } - // JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME - JNIEXPORT void JNICALL Java_ZeroTier_SDK_leaveNetwork(JNIEnv *env, jobject thisObj, jstring nwid) { + JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1leave_1network(JNIEnv *env, jobject thisObj, jstring nwid) { const char *nwidstr; if(nwid) { nwidstr = env->GetStringUTFChars(nwid, NULL); - zt_leave_network(nwidstr); + zts_leave_network(nwidstr); } } - // JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME - JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_isRunning(JNIEnv *env, jobject thisObj) { + JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1running(JNIEnv *env, jobject thisObj) { if(zt1Service) - return zt1Service->isRunning(); + return zts_is_running(); return false; } - - // JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME - JNIEXPORT void JNICALL Java_ZeroTier_SDK_terminate(JNIEnv *env, jobject thisObj) { + JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1terminate(JNIEnv *env, jobject thisObj) { if(zt1Service) - zt1Service->terminate(); + zts_terminate(); } #endif @@ -156,7 +150,7 @@ void zt_init_rpc(const char * path, const char * nwid); pthread_key_create(&thr_id_key, NULL); intercept_thread_id = (int*)malloc(sizeof(int)); *intercept_thread_id = key; - pthread_create(&intercept_thread, NULL, startOneService, (void *)(intercept_thread_id)); + pthread_create(&intercept_thread, NULL, zt_start_service, (void *)(intercept_thread_id)); } void init_service_and_rpc(int key, const char * path, const char * nwid) { rpcEnabled = true; @@ -179,18 +173,15 @@ void zt_init_rpc(const char * path, const char * nwid); * Starts a new service instance */ #if defined(__ANDROID__) - // JNI naming convention: Java_PACKAGENAME_CLASSNAME_METHODNAME - JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj, jstring path) { - if(path) { + JNIEXPORT int JNICALL Java_ZeroTier_SDK_zt_1start_1service(JNIEnv *env, jobject thisObj, jstring path) { + if(path) homeDir = env->GetStringUTFChars(path, NULL); - } #else - void *startOneService(void *thread_id) { + void *zt_start_service(void *thread_id) { #endif #if defined(SDK_BUNDLED) && !defined(__ANDROID__) - // Don't intercept network calls originating from ZeroTier service - set_intercept_status(INTERCEPT_DISABLED); + set_intercept_status(INTERCEPT_DISABLED); // Ignore network calls from ZT service #endif #if defined(__UNITY_3D__) @@ -198,7 +189,7 @@ void zt_init_rpc(const char * path, const char * nwid); char current_dir[MAX_DIR_SZ]; getcwd(current_dir, MAX_DIR_SZ); chdir(service_path.c_str()); - homeDir = current_dir; // homeDir shall be current dir + homeDir = current_dir; // homeDir shall be current_dir #endif #if defined(__APPLE__) @@ -231,14 +222,8 @@ void zt_init_rpc(const char * path, const char * nwid); zt1Service = (ZeroTier::OneService *)0; // Construct path for network config and supporting service files - if (!homeDir.length()) { - #if defined(__ANDROID__) - return; - #else - return NULL; - #endif - } else { - LOGV("startOneService(): constructing path...\n"); + if (homeDir.length()) { + LOGV("start_service(): constructing path...\n"); std::vector hpsp(ZeroTier::Utils::split(homeDir.c_str(),ZT_PATH_SEPARATOR_S,"","")); std::string ptmp; if (homeDir[0] == ZT_PATH_SEPARATOR) @@ -254,6 +239,10 @@ void zt_init_rpc(const char * path, const char * nwid); } } } + else { + fprintf(stderr, "start_service(): homeDir is empty, could not construct path\n"); + return NULL; + } #if defined(__IOS__) // Go to the app's data directory so we can shorten the sun_path we bind to @@ -279,7 +268,7 @@ void zt_init_rpc(const char * path, const char * nwid); unsigned int randp = 0; ZeroTier::Utils::getSecureRandom(&randp,sizeof(randp)); int servicePort = 9000 + (randp % 1000); - + for(;;) { zt1Service = ZeroTier::OneService::newInstance(homeDir.c_str(),servicePort); switch(zt1Service->run()) { @@ -287,28 +276,26 @@ void zt_init_rpc(const char * path, const char * nwid); case ZeroTier::OneService::ONE_NORMAL_TERMINATION: break; case ZeroTier::OneService::ONE_UNRECOVERABLE_ERROR: - //fprintf(stderr,"%s: fatal error: %s" ZT_EOL_S,argv[0],zt1Service->fatalErrorMessage().c_str()); - //returnValue = 1; + fprintf(stderr,"start_service(): fatal error: %s",zt1Service->fatalErrorMessage().c_str()); break; case ZeroTier::OneService::ONE_IDENTITY_COLLISION: { delete zt1Service; zt1Service = (ZeroTier::OneService *)0; std::string oldid; - //OSUtils::readFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str(),oldid); + ZeroTier::OSUtils::readFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str(),oldid); if (oldid.length()) { - //OSUtils::writeFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret.saved_after_collision").c_str(),oldid); - //OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str()); - //OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.public").c_str()); + ZeroTier::OSUtils::writeFile((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret.saved_after_collision").c_str(),oldid); + ZeroTier::OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.secret").c_str()); + ZeroTier::OSUtils::rm((homeDir + ZT_PATH_SEPARATOR_S + "identity.public").c_str()); } - } continue; // restart! - } - break; // terminate loop -- normally we don't keep restarting - } - #if defined(__ANDROID__) - return; - #else - return NULL; - #endif + } + continue; // restart! + } + break; // terminate loop -- normally we don't keep restarting + } + delete zt1Service; + zt1Service = (ZeroTier::OneService *)0; + return NULL; } #ifdef __cplusplus diff --git a/src/SDK_ServiceSetup.hpp b/src/SDK_ServiceSetup.hpp index 3477269..a5b29f6 100644 --- a/src/SDK_ServiceSetup.hpp +++ b/src/SDK_ServiceSetup.hpp @@ -27,7 +27,6 @@ #include - #ifdef __cplusplus extern "C" { #endif @@ -49,19 +48,27 @@ extern std::string homeDir; /* If you define anything else in this file it that you wish to expose to your Android Java application you *must* follow that convention and any corresponding Java package/classes in your Android project must match this as well */ - JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj, jstring path); - JNIEXPORT void JNICALL Java_ZeroTier_SDK_joinNetwork(JNIEnv *env, jobject thisObj, jstring nwid); - JNIEXPORT void JNICALL Java_ZeroTier_SDK_leaveNetwork(JNIEnv *env, jobject thisObj, jstring nwid); - JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_isRunning(JNIEnv *env, jobject thisObj); + JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1join_1network(JNIEnv *env, jobject thisObj, jstring nwid); + JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1leave_1network(JNIEnv *env, jobject thisObj, jstring nwid); + JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1running(JNIEnv *env, jobject thisObj); #else - void *startOneService(void *thread_id); void init_service(int key, const char * path); void init_service_and_rpc(int key, const char * path, const char * nwid); void init_intercept(int key); #endif + +#if defined (__ANDROID__) + JNIEXPORT int JNICALL Java_ZeroTier_SDK_zt_1start_1service(JNIEnv *env, jobject thisObj, jstring path); +#else + void * zt_start_service(void *thread_id); +#endif + void set_intercept_status(int mode); -void join_network(const char * nwid); -void leave_network(const char * nwid); +void zts_join_network(const char * nwid); +void zts_leave_network(const char * nwid); +bool zts_is_running(); +void zts_terminate(); + #endif diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index d3555eb..d27e7b4 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -51,8 +50,6 @@ #include #include #include -#include -#include #include #include @@ -131,43 +128,47 @@ int (*realclose)(CLOSE_SIG); // const struct sockaddr *addr, socklen_t addr_len #if !defined(__ANDROID__) - ssize_t zt_sendto(SENDTO_SIG) - { - dwr(MSG_DEBUG, "zt_sendto()\n"); - if(len > ZT_UDP_DEFAULT_PAYLOAD_MTU) { - errno = EMSGSIZE; // Msg is too large - return -1; - } - int socktype = 0; - socklen_t socktype_len; - getsockopt(sockfd,SOL_SOCKET, SO_TYPE, (void*)&socktype, &socktype_len); - - if((socktype & SOCK_STREAM) || (socktype & SOCK_SEQPACKET)) { - if(addr == NULL || flags != 0) { - errno = EISCONN; + #ifdef DYNAMIC_LIB + ssize_t zt_sendto(SENDTO_SIG) // Exposed as API + #else + ssize_t zts_sendto(SENDTO_SIG) // Used as internal implementation + #endif + { + dwr(MSG_DEBUG, "zt_sendto()\n"); + if(len > ZT_UDP_DEFAULT_PAYLOAD_MTU) { + errno = EMSGSIZE; // Msg is too large return -1; } - } - - // the socket isn't connected - //int err = rpc_send_command(api_netpath, RPC_IS_CONNECTED, -1, &fd, sizeof(struct fd)); - //if(err == -1) { - // errno = ENOTCONN; - // return -1; - //} + int socktype = 0; + socklen_t socktype_len; + getsockopt(sockfd,SOL_SOCKET, SO_TYPE, (void*)&socktype, &socktype_len); - // EMSGSIZE should be returned if the message is too long to be passed atomically through - // the underlying protocol, in our case MTU? - // TODO: More efficient solution - // This connect call is used to get the address info to the stack for sending the packet - int err; - if((err = connect(sockfd, addr, addr_len)) < 0) { - dwr(MSG_DEBUG, "sendto(): unknown problem passing address info to stack\n"); - errno = EISCONN; // double-check this is correct - return -1; + if((socktype & SOCK_STREAM) || (socktype & SOCK_SEQPACKET)) { + if(addr == NULL || flags != 0) { + errno = EISCONN; + return -1; + } + } + + // the socket isn't connected + //int err = rpc_send_command(api_netpath, RPC_IS_CONNECTED, -1, &fd, sizeof(struct fd)); + //if(err == -1) { + // errno = ENOTCONN; + // return -1; + //} + + // EMSGSIZE should be returned if the message is too long to be passed atomically through + // the underlying protocol, in our case MTU? + // TODO: More efficient solution + // This connect call is used to get the address info to the stack for sending the packet + int err; + if((err = connect(sockfd, addr, addr_len)) < 0) { + dwr(MSG_DEBUG, "sendto(): unknown problem passing address info to stack\n"); + errno = EISCONN; // double-check this is correct + return -1; + } + return send(sockfd, buf, len, flags); } - return send(sockfd, buf, len, flags); - } #endif // ------------------------------------------------------------------------------ @@ -176,33 +177,37 @@ int (*realclose)(CLOSE_SIG); // int socket, const struct msghdr *message, int flags #if !defined(__ANDROID__) - ssize_t zt_sendmsg(SENDMSG_SIG) - { - dwr(MSG_DEBUG, "zt_sendmsg()\n"); - char * p, * buf; - size_t tot_len = 0; - size_t err; - struct iovec * iov = message->msg_iov; - for(int i=0; imsg_iovlen; ++i) - tot_len += iov[i].iov_len; - if(tot_len > ZT_UDP_DEFAULT_PAYLOAD_MTU) { - errno = EMSGSIZE; // Message too large to send atomically via underlying protocol, don't send - return -1; + #ifdef DYNAMIC_LIB + ssize_t zt_sendmsg(SENDMSG_SIG) + #else + ssize_t zts_sendmsg(SENDMSG_SIG) + #endif + { + dwr(MSG_DEBUG, "zt_sendmsg()\n"); + char * p, * buf; + size_t tot_len = 0; + size_t err; + struct iovec * iov = message->msg_iov; + for(int i=0; imsg_iovlen; ++i) + tot_len += iov[i].iov_len; + if(tot_len > ZT_UDP_DEFAULT_PAYLOAD_MTU) { + errno = EMSGSIZE; // Message too large to send atomically via underlying protocol, don't send + return -1; + } + buf = malloc(tot_len); + if(tot_len != 0 && buf == NULL) { + errno = ENOMEM; // Unable to allocate space for message + return -1; + } + p = buf; + for(int i=0; i < message->msg_iovlen; ++i) { + memcpy(p, iov[i].iov_base, iov[i].iov_len); + p += iov[i].iov_len; + } + err = sendto(socket, buf, tot_len, flags, message->msg_name, message->msg_namelen); + free(buf); + return err; } - buf = malloc(tot_len); - if(tot_len != 0 && buf == NULL) { - errno = ENOMEM; // Unable to allocate space for message - return -1; - } - p = buf; - for(int i=0; i < message->msg_iovlen; ++i) { - memcpy(p, iov[i].iov_base, iov[i].iov_len); - p += iov[i].iov_len; - } - err = sendto(socket, buf, tot_len, flags, message->msg_name, message->msg_namelen); - free(buf); - return err; - } #endif // ------------------------------------------------------------------------------ @@ -212,25 +217,29 @@ int (*realclose)(CLOSE_SIG); // *restrict address, socklen_t *restrict address_len #if !defined(__ANDROID__) - ssize_t zt_recvfrom(RECVFROM_SIG) - { - dwr(MSG_DEBUG,"zt_recvfrom(%d)\n", socket); - ssize_t err; - // Since this can be called for connection-oriented sockets, - // we need to check the type before we try to read the address info - /* - int sock_type; - socklen_t type_len; - realgetsockopt(socket, SOL_SOCKET, SO_TYPE, (void *) &sock_type, &type_len); - */ - //if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) { - zt_getsockname(socket, address, address_len); - //} - err = read(socket, buffer, length); - if(err < 0) - perror("read:\n"); - return err; - } + #ifdef DYNAMIC_LIB + ssize_t zt_recvfrom(RECVFROM_SIG) + #else + ssize_t zts_recvfrom(RECVFROM_SIG) + #endif + { + dwr(MSG_DEBUG,"zt_recvfrom(%d)\n", socket); + ssize_t err; + // Since this can be called for connection-oriented sockets, + // we need to check the type before we try to read the address info + /* + int sock_type; + socklen_t type_len; + realgetsockopt(socket, SOL_SOCKET, SO_TYPE, (void *) &sock_type, &type_len); + */ + //if(sock_type == SOCK_DGRAM && address != NULL && address_len != NULL) { + zts_getsockname(socket, address, address_len); + //} + err = read(socket, buffer, length); + if(err < 0) + perror("read:\n"); + return err; + } #endif // ------------------------------------------------------------------------------ @@ -239,39 +248,43 @@ int (*realclose)(CLOSE_SIG); // int socket, struct msghdr *message, int flags #if !defined(__ANDROID__) - ssize_t zt_recvmsg(RECVMSG_SIG) - { - dwr(MSG_DEBUG, "zt_recvmsg(%d)\n", socket); - ssize_t err, n, tot_len = 0; - char *buf, *p; - struct iovec *iov = message->msg_iov; - - for(int i = 0; i < message->msg_iovlen; ++i) - tot_len += iov[i].iov_len; - buf = malloc(tot_len); - if(tot_len != 0 && buf == NULL) { - errno = ENOMEM; - return -1; + #ifdef DYNAMIC_LIB + ssize_t zt_recvmsg(RECVMSG_SIG) + #else + ssize_t zts_recvmsg(RECVMSG_SIG) + #endif + { + dwr(MSG_DEBUG, "zt_recvmsg(%d)\n", socket); + ssize_t err, n, tot_len = 0; + char *buf, *p; + struct iovec *iov = message->msg_iov; + + for(int i = 0; i < message->msg_iovlen; ++i) + tot_len += iov[i].iov_len; + buf = malloc(tot_len); + if(tot_len != 0 && buf == NULL) { + errno = ENOMEM; + return -1; + } + n = err = recvfrom(socket, buf, tot_len, flags, message->msg_name, &message->msg_namelen); + p = buf; + + // According to: http://pubs.opengroup.org/onlinepubs/009695399/functions/recvmsg.html + if(err > message->msg_controllen && !( message->msg_flags & MSG_PEEK)) { + // excess data should be disgarded + message->msg_flags |= MSG_TRUNC; // Indicate that the buffer has been truncated + } + + while (n > 0) { + ssize_t count = n < iov->iov_len ? n : iov->iov_len; + memcpy (iov->iov_base, p, count); + p += count; + n -= count; + ++iov; + } + free(buf); + return err; } - n = err = recvfrom(socket, buf, tot_len, flags, message->msg_name, &message->msg_namelen); - p = buf; - - // According to: http://pubs.opengroup.org/onlinepubs/009695399/functions/recvmsg.html - if(err > message->msg_controllen && !( message->msg_flags & MSG_PEEK)) { - // excess data should be disgarded - message->msg_flags |= MSG_TRUNC; // Indicate that the buffer has been truncated - } - - while (n > 0) { - ssize_t count = n < iov->iov_len ? n : iov->iov_len; - memcpy (iov->iov_base, p, count); - p += count; - n -= count; - ++iov; - } - free(buf); - return err; - } #endif // ------------------------------------------------------------------------------ @@ -299,7 +312,11 @@ int (*realclose)(CLOSE_SIG); // int socket, int level, int option_name, const void *option_value, // socklen_t option_len + #ifdef DYNAMIC_LIB int zt_setsockopt(SETSOCKOPT_SIG) + #else + int zts_setsockopt(SETSOCKOPT_SIG) + #endif { dwr(MSG_DEBUG, "zt_setsockopt()\n"); return 0; @@ -311,7 +328,12 @@ int (*realclose)(CLOSE_SIG); // int sockfd, int level, int optname, void *optval, // socklen_t *optlen + +#ifdef DYNAMIC_LIB int zt_getsockopt(GETSOCKOPT_SIG) +#else + int zts_getsockopt(GETSOCKOPT_SIG) +#endif { dwr(MSG_DEBUG,"zt_getsockopt(%d)\n", sockfd); if(optname == SO_TYPE) { @@ -328,12 +350,17 @@ int (*realclose)(CLOSE_SIG); // int socket_family, int socket_type, int protocol #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniSocket(JNIEnv *env, jobject thisObj, jint family, jint type, jint protocol) { - return zt_socket(family, type, protocol); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1socket(JNIEnv *env, jobject thisObj, jint family, jint type, jint protocol) { + return zts_socket(family, type, protocol); } #endif - int zt_socket(SOCKET_SIG) { +#ifdef DYNAMIC_LIB + int zts_socket(SOCKET_SIG) +#else + int zts_socket(SOCKET_SIG) +#endif + { get_api_netpath(); dwr(MSG_DEBUG, "zt_socket()\n"); /* Check that type makes sense */ @@ -384,18 +411,22 @@ int (*realclose)(CLOSE_SIG); // int __fd, const struct sockaddr * __addr, socklen_t __len #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniConnect(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1connect(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { struct sockaddr_in addr; char *str; (*env)->ReleaseStringUTFChars(env, addrstr, str); addr.sin_addr.s_addr = inet_addr(str); addr.sin_family = AF_INET; addr.sin_port = htons( port ); - return zt_connect(fd, (struct sockaddr *)&addr, sizeof(addr)); + return zts_connect(fd, (struct sockaddr *)&addr, sizeof(addr)); } #endif +#ifdef DYNAMIC_LIB int zt_connect(CONNECT_SIG) +#else + int zts_connect(CONNECT_SIG) +#endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_connect(%d)\n", __fd); @@ -419,7 +450,7 @@ int (*realclose)(CLOSE_SIG); // int sockfd, const struct sockaddr *addr, socklen_t addrlen #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniBind(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1bind(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { struct sockaddr_in addr; char *str; // = env->GetStringUTFChars(addrstr, NULL); @@ -433,7 +464,11 @@ int (*realclose)(CLOSE_SIG); #endif #if !defined(__ANDROID__) + #ifdef DYNAMIC_LIB int zt_bind(BIND_SIG) + #else + int zts_bind(BIND_SIG) + #endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_bind(%d)\n", sockfd); @@ -458,7 +493,7 @@ int (*realclose)(CLOSE_SIG); // int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniAccept4(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port, jint flags) { + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1accept4(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port, jint flags) { struct sockaddr_in addr; char *str; // = env->GetStringUTFChars(addrstr, NULL); @@ -466,12 +501,16 @@ int (*realclose)(CLOSE_SIG); addr.sin_addr.s_addr = inet_addr(str); addr.sin_family = AF_INET; addr.sin_port = htons( port ); - return zt_accept4(fd, (struct sockaddr *)&addr, sizeof(addr), flags); + return zts_accept4(fd, (struct sockaddr *)&addr, sizeof(addr), flags); } #endif #if defined(__linux__) + #ifdef DYNAMIC_LIB int zt_accept4(ACCEPT4_SIG) + #else + int zts_accept4(ACCEPT4_SIG) + #endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_accept4(%d):\n", sockfd); @@ -491,7 +530,7 @@ int (*realclose)(CLOSE_SIG); // int sockfd struct sockaddr *addr, socklen_t *addrlen #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniAccept(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1accept(JNIEnv *env, jobject thisObj, jint fd, jstring addrstr, jint port) { struct sockaddr_in addr; char *str; // = env->GetStringUTFChars(addrstr, NULL); @@ -499,11 +538,15 @@ int (*realclose)(CLOSE_SIG); addr.sin_addr.s_addr = inet_addr(str); addr.sin_family = AF_INET; addr.sin_port = htons( port ); - return zt_accept(fd, (struct sockaddr *)&addr, sizeof(addr)); + return zts_accept(fd, (struct sockaddr *)&addr, sizeof(addr)); } #endif +#ifdef DYNAMIC_LIB int zt_accept(ACCEPT_SIG) +#else + int zts_accept(ACCEPT_SIG) +#endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_accept(%d):\n", sockfd); @@ -529,12 +572,16 @@ int (*realclose)(CLOSE_SIG); // int sockfd, int backlog #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniListen(JNIEnv *env, jobject thisObj, jint fd, int backlog) { - return zt_listen(fd, backlog); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1listen(JNIEnv *env, jobject thisObj, jint fd, int backlog) { + return zts_listen(fd, backlog); } #endif +#ifdef DYNAMIC_LIB int zt_listen(LISTEN_SIG) +#else + int zts_listen(LISTEN_SIG) +#endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_listen(%d):\n", sockfd); @@ -557,12 +604,17 @@ int (*realclose)(CLOSE_SIG); // int fd #if defined(__ANDROID__) - JNIEXPORT jint JNICALL Java_ZeroTier_SDK_ztjniClose(JNIEnv *env, jobject thisObj, jint fd) { - return zt_close(fd); + JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1close(JNIEnv *env, jobject thisObj, jint fd) { + return zts_close(fd); } #endif - int zt_close(CLOSE_SIG) { +#ifdef DYNAMIC_LIB + int zt_close(CLOSE_SIG) +#else + int zts_close(CLOSE_SIG) +#endif + { get_api_netpath(); dwr(MSG_DEBUG, "zt_close(%d)\n", fd); return realclose(fd); @@ -573,7 +625,11 @@ int (*realclose)(CLOSE_SIG); // ------------------------------------------------------------------------------ // int sockfd, struct sockaddr *addr, socklen_t *addrlen +#ifdef DYNAMIC_LIB int zt_getsockname(GETSOCKNAME_SIG) +#else + int zts_getsockname(GETSOCKNAME_SIG) +#endif { get_api_netpath(); dwr(MSG_DEBUG,"zt_getsockname(%d):\n", sockfd); diff --git a/src/SDK_XcodeWrapper.cpp b/src/SDK_XcodeWrapper.cpp index 0eb7ca9..9d6176a 100755 --- a/src/SDK_XcodeWrapper.cpp +++ b/src/SDK_XcodeWrapper.cpp @@ -28,7 +28,6 @@ #include "SDK.h" #include "SDK_XcodeWrapper.hpp" #include "SDK_Signatures.h" -#include #define INTERCEPT_ENABLED 111 #define INTERCEPT_DISABLED 222 @@ -49,12 +48,12 @@ extern "C" void start_service_and_rpc(const char * path, const char * nwid) { // Joins a ZeroTier virtual network extern "C" void zt_join_network(const char * nwid){ - join_network(nwid); + zts_join_network(nwid); } // Leaves a ZeroTier virtual network extern "C" void zt_leave_network(const char * nwid){ - leave_network(nwid); + zts_leave_network(nwid); } // Explicit ZT API wrappers @@ -65,30 +64,30 @@ extern "C" void zt_leave_network(const char * nwid){ } #endif -extern "C" int zts_socket(SOCKET_SIG) { - return zt_socket(socket_family, socket_type, protocol); +extern "C" int zt_socket(SOCKET_SIG) { + return zts_socket(socket_family, socket_type, protocol); } -extern "C" int zts_connect(CONNECT_SIG) { - return zt_connect(__fd, __addr, __len); +extern "C" int zt_connect(CONNECT_SIG) { + return zts_connect(__fd, __addr, __len); } -extern "C" int zts_bind(BIND_SIG){ - return zt_bind(sockfd, addr, addrlen); +extern "C" int zt_bind(BIND_SIG){ + return zts_bind(sockfd, addr, addrlen); } -extern "C" int zts_accept(ACCEPT_SIG) { - return zt_accept(sockfd, addr, addrlen); +extern "C" int zt_accept(ACCEPT_SIG) { + return zts_accept(sockfd, addr, addrlen); } -extern "C" int zts_listen(LISTEN_SIG) { - return zt_listen(sockfd, backlog); +extern "C" int zt_listen(LISTEN_SIG) { + return zts_listen(sockfd, backlog); } -extern "C" int zts_setsockopt(SETSOCKOPT_SIG) { - return zt_setsockopt(socket, level, option_name, option_value, option_len); +extern "C" int zt_setsockopt(SETSOCKOPT_SIG) { + return zts_setsockopt(socket, level, option_name, option_value, option_len); } -extern "C" int zts_getsockopt(GETSOCKOPT_SIG) { - return zt_getsockopt(sockfd, level, optname, optval, optlen); +extern "C" int zt_getsockopt(GETSOCKOPT_SIG) { + return zts_getsockopt(sockfd, level, optname, optval, optlen); } -extern "C" int zts_close(CLOSE_SIG) { - return zt_close(fd); +extern "C" int zt_close(CLOSE_SIG) { + return zts_close(fd); } -extern "C" int zts_getsockname(GETSOCKNAME_SIG) { - return zt_getsockname(sockfd, addr, addrlen); +extern "C" int zt_getsockname(GETSOCKNAME_SIG) { + return zts_getsockname(sockfd, addr, addrlen); } diff --git a/src/SDK_XcodeWrapper.hpp b/src/SDK_XcodeWrapper.hpp index 9ee032d..ef9d3a4 100755 --- a/src/SDK_XcodeWrapper.hpp +++ b/src/SDK_XcodeWrapper.hpp @@ -28,6 +28,4 @@ #ifndef SDK_XCODE_WRAPPER_HPP #define SDK_XCODE_WRAPPER_HPP -#include - #endif /* SDK_XCODE_WRAPPER_HPP */ diff --git a/tests/docker/XXXXXXXXXXXXXXXX.conf b/tests/docker/XXXXXXXXXXXXXXXX.conf deleted file mode 100644 index e69de29..0000000