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);
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)
Log.d("TEST", "listen_err = " + err);
Log.d("ZT-TEST", "listen_err = " + err);
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)
{
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);
int sock = zt.socket(SDK.AF_INET, SDK.SOCK_STREAM, 0);
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
while(true)
{
// TX
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
@@ -83,12 +85,14 @@ public class MainActivity extends AppCompatActivity {
Arrays.fill(buffer, (byte)0);
if((err = zt.read(sock, buffer, buffer.length)) > 0) {
String bufStr = new String(buffer).substring(0, err);
Log.d("TEST", "RX: " + bufStr + " --- " + err + " bytes");
}
Log.d("ZT-TEST", "RX: " + bufStr + " --- " + err + " bytes");
}
}
// SOCKS5 Proxy test
// zt.stop_service();
}
// SOCKS5 Proxy ZT-TEST
if(mode==3)
{
zt.join_network(nwid);
@@ -98,18 +102,18 @@ public class MainActivity extends AppCompatActivity {
Log.d("ZTSDK", "Setting up connection to SDK proxy server");
SocketAddress proxyAddr = new InetSocketAddress("127.0.0.1", proxyPort);
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 SocketAddress remoteAddr = new InetSocketAddress("10.9.9.100", 8080);
// Wait for address to be assigned
ArrayList<String> addresses = zt.get_addresses(nwid);
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")) {
try {
Log.d("TEST", "waiting for address");
Log.d("ZT-TEST", "waiting for address");
Thread.sleep(100);
} catch (java.lang.InterruptedException e) {
}
@@ -123,36 +127,36 @@ public class MainActivity extends AppCompatActivity {
s.connect(remoteAddr, 1000);
}
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();
}
// UDP Echo test
// UDP Echo ZT-TEST
if(mode==4)
{
// Remote server address (will be populated by recvfrom()
ZTAddress remoteServer = new ZTAddress();
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";
zt.join_network(nwid);
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)
Log.d("TEST", "bind_err = " + err + "\n");
Log.d("ZT-TEST", "bind_err = " + err + "\n");
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);
if(addresses.size() < 0) {
Log.d("TEST", "unable to obtain ZT address");
Log.d("ZT-TEST", "unable to obtain ZT address");
return;
}
else {
Log.d("TEST", "IPV4 = " + addresses.get(0));
Log.d("ZT-TEST", "IPV4 = " + addresses.get(0));
}
String bufStr;
@@ -166,16 +170,16 @@ public class MainActivity extends AppCompatActivity {
// RX
if((err = zt.recvfrom(sock, buffer, 32, 0, remoteServer)) > 0) {
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
String msg = "Welcome response from android\n";
err = zt.sendto(sock, msg.getBytes(), msg.length(), 0, remoteServer);
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);
}
}

View File

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

View File

@@ -16,6 +16,7 @@ void enable_intercept();
// ZT SERVICE CONTROLS
void start_service(const char * path);
void stop_service();
void start_service_and_rpc(const char * path, const char * nwid);
void zt_join_network(const char *nwid);
void zt_leave_network(const char *nwid);

View File

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

View File

@@ -26,7 +26,7 @@
* 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_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); }
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
// 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;
}
// 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)
zts_terminate();
zts_stop_service();
// TODO: Also terminate SOCKS5 Proxy
// zts_stop_proxy_server();
}

View File

@@ -39,6 +39,10 @@ extern "C" void start_service(const char * 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
// This will allow direct API calls
extern "C" void start_service_and_rpc(const char * path, const char * nwid) {