Exposed stop_service() to java-land

This commit is contained in:
Joseph Henry
2016-08-17 10:22:31 -07:00
parent ca55570e24
commit 15985ebcd6
8 changed files with 60 additions and 32 deletions

View File

@@ -0,0 +1,19 @@
//
// ZeroTierSDK_iOS.h
// ZeroTierSDK_iOS
//
// Created by Joseph Henry on 6/15/16.
// Copyright © 2016 ZeroTier Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for ZeroTierSDK_iOS.
FOUNDATION_EXPORT double ZeroTierSDK_iOSVersionNumber;
//! Project version string for ZeroTierSDK_iOS.
FOUNDATION_EXPORT const unsigned char ZeroTierSDK_iOSVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <ZeroTierSDK_iOS/PublicHeader.h>

View File

@@ -46,36 +46,38 @@ public class MainActivity extends AppCompatActivity {
int sock = zt.socket(SDK.AF_INET, SDK.SOCK_STREAM, 0); int sock = zt.socket(SDK.AF_INET, SDK.SOCK_STREAM, 0);
if((err = zt.bind(sock, "0.0.0.0", 8080, nwid)) < 0) if((err = zt.bind(sock, "0.0.0.0", 8080, nwid)) < 0)
Log.d("TEST", "bind_err = " + err + "\n"); Log.d("ZT-TEST", "bind_err = " + err + "\n");
if((err = zt.listen(sock,1)) < 0) if((err = zt.listen(sock,1)) < 0)
Log.d("TEST", "listen_err = " + err); Log.d("ZT-TEST", "listen_err = " + err);
if((err = zt.accept(sock,null)) < 0) if((err = zt.accept(sock,null)) < 0)
Log.d("TEST", "accept_err = " + err); Log.d("ZT-TEST", "accept_err = " + err);
Log.d("TEST", "Waiting to accept connection..."); Log.d("ZT-TEST", "Waiting to accept connection...");
// ... // ...
} }
// TCP Echo test (CLIENT) // TCP Echo ZT-TEST (CLIENT)
if(mode==2) if(mode==2)
{ {
Log.d("TEST", "\n\nStarting TCP Echo Test\n\n"); Log.d("ZT-TEST", "\n\nStarting TCP Echo ZT-TEST\n\n");
zt.join_network(nwid); zt.join_network(nwid);
int sock = zt.socket(SDK.AF_INET, SDK.SOCK_STREAM, 0); int sock = zt.socket(SDK.AF_INET, SDK.SOCK_STREAM, 0);
String msg = "Welcome to the machine!"; String msg = "Welcome to the machine!";
err = zt.connect(sock, "28.206.65.211", 8080, nwid); err = zt.connect(sock, "28.206.65.211", 8099, nwid);
Log.d("TEST", "err = " + err + "\n"); Log.d("ZT-TEST", "err = " + err + "\n");
return;
// ECHO // ECHO
while(true) while(true)
{ {
// TX // TX
if((err = zt.write(sock, msg.getBytes(), msg.length())) > 0) { if((err = zt.write(sock, msg.getBytes(), msg.length())) > 0) {
Log.d("TEST", "TX: " + msg + " --- " + err + " bytes"); Log.d("ZT-TEST", "TX: " + msg + " --- " + err + " bytes");
} }
// RX // RX
@@ -83,12 +85,14 @@ public class MainActivity extends AppCompatActivity {
Arrays.fill(buffer, (byte)0); Arrays.fill(buffer, (byte)0);
if((err = zt.read(sock, buffer, buffer.length)) > 0) { if((err = zt.read(sock, buffer, buffer.length)) > 0) {
String bufStr = new String(buffer).substring(0, err); String bufStr = new String(buffer).substring(0, err);
Log.d("TEST", "RX: " + bufStr + " --- " + err + " bytes"); Log.d("ZT-TEST", "RX: " + bufStr + " --- " + err + " bytes");
} }
} }
// zt.stop_service();
} }
// SOCKS5 Proxy test // SOCKS5 Proxy ZT-TEST
if(mode==3) if(mode==3)
{ {
zt.join_network(nwid); zt.join_network(nwid);
@@ -98,18 +102,18 @@ public class MainActivity extends AppCompatActivity {
Log.d("ZTSDK", "Setting up connection to SDK proxy server"); Log.d("ZTSDK", "Setting up connection to SDK proxy server");
SocketAddress proxyAddr = new InetSocketAddress("127.0.0.1", proxyPort); SocketAddress proxyAddr = new InetSocketAddress("127.0.0.1", proxyPort);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxyAddr); Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxyAddr);
Log.d("TEST", "toString() = " + proxy.toString()); Log.d("ZT-TEST", "toString() = " + proxy.toString());
final Socket s = new Socket(proxy); final Socket s = new Socket(proxy);
final SocketAddress remoteAddr = new InetSocketAddress("10.9.9.100", 8080); final SocketAddress remoteAddr = new InetSocketAddress("10.9.9.100", 8080);
// Wait for address to be assigned // Wait for address to be assigned
ArrayList<String> addresses = zt.get_addresses(nwid); ArrayList<String> addresses = zt.get_addresses(nwid);
for(int i=0; i<addresses.size(); i++) { for(int i=0; i<addresses.size(); i++) {
Log.d("TEST", "Address = " + addresses.get(i)); Log.d("ZT-TEST", "Address = " + addresses.get(i));
} }
while(addresses.size() > 0 && addresses.get(0).equals("-1.-1.-1.-1/-1")) { while(addresses.size() > 0 && addresses.get(0).equals("-1.-1.-1.-1/-1")) {
try { try {
Log.d("TEST", "waiting for address"); Log.d("ZT-TEST", "waiting for address");
Thread.sleep(100); Thread.sleep(100);
} catch (java.lang.InterruptedException e) { } catch (java.lang.InterruptedException e) {
} }
@@ -123,36 +127,36 @@ public class MainActivity extends AppCompatActivity {
s.connect(remoteAddr, 1000); s.connect(remoteAddr, 1000);
} }
catch(java.io.IOException e) { catch(java.io.IOException e) {
Log.d("TEST", "Unable to establish connection to SOCKS5 Proxy server\n"); Log.d("ZT-TEST", "Unable to establish connection to SOCKS5 Proxy server\n");
} }
} }
}).start(); }).start();
} }
// UDP Echo test // UDP Echo ZT-TEST
if(mode==4) if(mode==4)
{ {
// Remote server address (will be populated by recvfrom() // Remote server address (will be populated by recvfrom()
ZTAddress remoteServer = new ZTAddress(); ZTAddress remoteServer = new ZTAddress();
ZTAddress bindAddr = new ZTAddress("0.0.0.0", 8080); ZTAddress bindAddr = new ZTAddress("0.0.0.0", 8080);
Log.d("TEST", "\n\nStarting UDP Echo Test\n\n"); Log.d("ZT-TEST", "\n\nStarting UDP Echo ZT-TEST\n\n");
nwid = "8056c2e21c000001"; nwid = "8056c2e21c000001";
zt.join_network(nwid); zt.join_network(nwid);
int sock = zt.socket(SDK.AF_INET, SDK.SOCK_DGRAM, 0); int sock = zt.socket(SDK.AF_INET, SDK.SOCK_DGRAM, 0);
Log.d("TEST", "binding..."); Log.d("ZT-TEST", "binding...");
if((err = zt.bind(sock, bindAddr, nwid)) < 0) if((err = zt.bind(sock, bindAddr, nwid)) < 0)
Log.d("TEST", "bind_err = " + err + "\n"); Log.d("ZT-TEST", "bind_err = " + err + "\n");
if((err = zt.listen(sock, 0)) < 0) if((err = zt.listen(sock, 0)) < 0)
Log.d("TEST", "listen_err = " + err); Log.d("ZT-TEST", "listen_err = " + err);
ArrayList<String> addresses = zt.get_addresses(nwid); ArrayList<String> addresses = zt.get_addresses(nwid);
if(addresses.size() < 0) { if(addresses.size() < 0) {
Log.d("TEST", "unable to obtain ZT address"); Log.d("ZT-TEST", "unable to obtain ZT address");
return; return;
} }
else { else {
Log.d("TEST", "IPV4 = " + addresses.get(0)); Log.d("ZT-TEST", "IPV4 = " + addresses.get(0));
} }
String bufStr; String bufStr;
@@ -166,16 +170,16 @@ public class MainActivity extends AppCompatActivity {
// RX // RX
if((err = zt.recvfrom(sock, buffer, 32, 0, remoteServer)) > 0) { if((err = zt.recvfrom(sock, buffer, 32, 0, remoteServer)) > 0) {
bufStr = new String(buffer).substring(0, err); bufStr = new String(buffer).substring(0, err);
Log.d("TEST", "read (" + err + ") bytes from " + remoteServer.Address() + " : " + remoteServer.Port() + ", msg = " + bufStr); Log.d("ZT-TEST", "read (" + err + ") bytes from " + remoteServer.Address() + " : " + remoteServer.Port() + ", msg = " + bufStr);
// TX // TX
String msg = "Welcome response from android\n"; String msg = "Welcome response from android\n";
err = zt.sendto(sock, msg.getBytes(), msg.length(), 0, remoteServer); err = zt.sendto(sock, msg.getBytes(), msg.length(), 0, remoteServer);
if (err < 0) if (err < 0)
Log.d("TEST", "sendto_err = " + err); Log.d("ZT-TEST", "sendto_err = " + err);
} }
} }
//Log.d("TEST", "leaving network"); //Log.d("ZT-TEST", "leaving network");
//zt.leave_network(nwid); //zt.leave_network(nwid);
} }
} }

View File

@@ -94,7 +94,7 @@ void zts_leave_network(const char * nwid);
bool zts_is_running(); bool zts_is_running();
void zts_get_addresses(const char * nwid, char * addrstr); void zts_get_addresses(const char * nwid, char * addrstr);
int zts_get_device_id(); int zts_get_device_id();
void zts_terminate(); void zts_stop_service();
bool zts_is_relayed(); bool zts_is_relayed();
// ZT Intercept/RPC Controls // ZT Intercept/RPC Controls
void set_intercept_status(int mode); /* TODO: Rethink this */ void set_intercept_status(int mode); /* TODO: Rethink this */
@@ -134,12 +134,12 @@ ssize_t zts_recvmsg(RECVMSG_SIG);
#if defined(__ANDROID__) #if defined(__ANDROID__)
// Exported JNI : ZT SERVICE CONTROLS // Exported JNI : ZT SERVICE CONTROLS
JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1start_1service(JNIEnv *env, jobject thisObj, jstring path); JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1start_1service(JNIEnv *env, jobject thisObj, jstring path);
JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1stop_service();
JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1join_1network(JNIEnv *env, jobject thisObj, jstring nwid); 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 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); JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1running(JNIEnv *env, jobject thisObj);
JNIEXPORT jobject JNICALL Java_ZeroTier_SDK_zt_1get_1addresses(JNIEnv *env, jobject thisObj, jstring nwid); JNIEXPORT jobject JNICALL Java_ZeroTier_SDK_zt_1get_1addresses(JNIEnv *env, jobject thisObj, jstring nwid);
JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1is_1relayed(); JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1is_1relayed();
JNIEXPORT jboolean JNICALL Java_ZeroTier_SDK_zt_1terminate_service();
// Exported JNI : SOCKS5 PROXY SERVER CONTROLS // Exported JNI : SOCKS5 PROXY SERVER CONTROLS
JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1start_1proxy_1server(JNIEnv *env, jobject thisObj, jstring nwid, jobject zaddr); JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1start_1proxy_1server(JNIEnv *env, jobject thisObj, jstring nwid, jobject zaddr);
JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1stop_1proxy_1server(JNIEnv *env, jobject thisObj, jstring nwid); JNIEXPORT jint JNICALL Java_ZeroTier_SDK_zt_1stop_1proxy_1server(JNIEnv *env, jobject thisObj, jstring nwid);

View File

@@ -16,6 +16,7 @@ void enable_intercept();
// ZT SERVICE CONTROLS // ZT SERVICE CONTROLS
void start_service(const char * path); void start_service(const char * path);
void stop_service();
void start_service_and_rpc(const char * path, const char * nwid); void start_service_and_rpc(const char * path, const char * nwid);
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);

View File

@@ -46,7 +46,7 @@
#define SDK_DEBUG_H #define SDK_DEBUG_H
// Set during make (e.g. make SDK_DEBUG=2) // Set during make (e.g. make SDK_DEBUG=2)
#define DEBUG_LEVEL 2 #define DEBUG_LEVEL 4
#define MSG_ERROR 1 // Errors #define MSG_ERROR 1 // Errors
#define MSG_TRANSFER 2 // RX/TX specific statements #define MSG_TRANSFER 2 // RX/TX specific statements

View File

@@ -26,7 +26,7 @@
* LLC. Start here: http://www.zerotier.com/ * LLC. Start here: http://www.zerotier.com/
*/ */
#define DEBUG_LEVEL 2 // Set this to adjust what you'd like to see in the debug traces #define DEBUG_LEVEL 4 // Set this to adjust what you'd like to see in the debug traces
#define MSG_ERROR 1 // Errors #define MSG_ERROR 1 // Errors
#define MSG_TRANSFER 2 // RX/TX specific statements #define MSG_TRANSFER 2 // RX/TX specific statements

View File

@@ -109,7 +109,7 @@ void zts_join_network(const char * nwid) {
} }
void zts_leave_network(const char * nwid) { zt1Service->leave(nwid); } void zts_leave_network(const char * nwid) { zt1Service->leave(nwid); }
bool zts_is_running() { return zt1Service->isRunning(); } bool zts_is_running() { return zt1Service->isRunning(); }
void zts_terminate() { zt1Service->terminate(); } void zts_stop_service() { zt1Service->terminate(); }
// FIXME: Re-implemented to make it play nicer with the C-linkage required for Xcode integrations // FIXME: Re-implemented to make it play nicer with the C-linkage required for Xcode integrations
// Now only returns first assigned address per network. Shouldn't normally be a problem // Now only returns first assigned address per network. Shouldn't normally be a problem
@@ -187,9 +187,9 @@ int zts_get_proxy_server_address(const char * nwid, struct sockaddr_storage * ad
return false; return false;
} }
// Shuts down ZeroTier service and SOCKS5 Proxy server // Shuts down ZeroTier service and SOCKS5 Proxy server
JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1terminate_1service(JNIEnv *env, jobject thisObj) { JNIEXPORT void JNICALL Java_ZeroTier_SDK_zt_1stop_1service(JNIEnv *env, jobject thisObj) {
if(zt1Service) if(zt1Service)
zts_terminate(); zts_stop_service();
// TODO: Also terminate SOCKS5 Proxy // TODO: Also terminate SOCKS5 Proxy
// zts_stop_proxy_server(); // zts_stop_proxy_server();
} }

View File

@@ -39,6 +39,10 @@ extern "C" void start_service(const char * path) {
init_service(INTERCEPT_DISABLED, path); init_service(INTERCEPT_DISABLED, path);
} }
extern "C" void stop_service() {
zts_stop_service();
}
// Starts a ZeroTier service at the specified path and initializes the RPC mechanism // Starts a ZeroTier service at the specified path and initializes the RPC mechanism
// This will allow direct API calls // This will allow direct API calls
extern "C" void start_service_and_rpc(const char * path, const char * nwid) { extern "C" void start_service_and_rpc(const char * path, const char * nwid) {