diff options
Diffstat (limited to 'examples/java/ZeroTierHelloWorld')
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/.classpath | 10 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/.project | 17 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/.settings/org.eclipse.jdt.core.prefs | 11 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/README.md | 2 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/bin/.gitignore | 2 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/bin/MyClass.class | bin | 0 -> 1176 bytes | |||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/src/MyClass.java | 40 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/src/zerotier/Address.java | 84 | ||||
| -rw-r--r-- | examples/java/ZeroTierHelloWorld/src/zerotier/ZeroTier.java | 205 |
9 files changed, 371 insertions, 0 deletions
diff --git a/examples/java/ZeroTierHelloWorld/.classpath b/examples/java/ZeroTierHelloWorld/.classpath new file mode 100644 index 0000000..ac1a9db --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/.classpath @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> + <attributes> + <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="/Users/Joseph/op/code/zerotier/ZeroTierSDK/examples/java/ZeroTierHelloWorld/lib"/> + </attributes> + </classpathentry> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/examples/java/ZeroTierHelloWorld/.project b/examples/java/ZeroTierHelloWorld/.project new file mode 100644 index 0000000..424ba61 --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>ZeroTierHelloWorld</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/examples/java/ZeroTierHelloWorld/.settings/org.eclipse.jdt.core.prefs b/examples/java/ZeroTierHelloWorld/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/examples/java/ZeroTierHelloWorld/README.md b/examples/java/ZeroTierHelloWorld/README.md new file mode 100644 index 0000000..a670a6d --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/README.md @@ -0,0 +1,2 @@ +ZeroTierSDK Java API +======
\ No newline at end of file diff --git a/examples/java/ZeroTierHelloWorld/bin/.gitignore b/examples/java/ZeroTierHelloWorld/bin/.gitignore new file mode 100644 index 0000000..0d2fe9b --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/bin/.gitignore @@ -0,0 +1,2 @@ +/MyClass$1.class +/zerotier/ diff --git a/examples/java/ZeroTierHelloWorld/bin/MyClass.class b/examples/java/ZeroTierHelloWorld/bin/MyClass.class Binary files differnew file mode 100644 index 0000000..fff559f --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/bin/MyClass.class diff --git a/examples/java/ZeroTierHelloWorld/src/MyClass.java b/examples/java/ZeroTierHelloWorld/src/MyClass.java new file mode 100644 index 0000000..d71377d --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/src/MyClass.java @@ -0,0 +1,40 @@ +// Hello World example for the ZeroTierSDK + +import zerotier.*; + +public class MyClass { + + public native int loadsymbols(); + public native void startOneService(); + + static { + System.loadLibrary("zt"); + } + + public static void main(String[] args) { + + System.out.println("Welcome to the Machine"); + + final ZeroTier z = new ZeroTier(); + + new Thread(new Runnable() { + public void run() { + // Calls to JNI code + z.start("/Users/Joseph/op/code/zerotier/ZeroTierSDK/zt1"); + } + }).start(); + + //while(!z.running()) { } + + while(true) + { + try { + System.out.println("Welcome to the Machine"); + Thread.sleep(3000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } +}
\ No newline at end of file diff --git a/examples/java/ZeroTierHelloWorld/src/zerotier/Address.java b/examples/java/ZeroTierHelloWorld/src/zerotier/Address.java new file mode 100644 index 0000000..2400c91 --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/src/zerotier/Address.java @@ -0,0 +1,84 @@ +package zerotier; + +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.util.regex.Pattern; + +/* + +The ZTAddress object is merely a convenience object for moving address information +across the JNI memory border. + +*/ + +public class Address +{ + // int -> byte array + static public byte[] toIPByteArray(long addr){ + return new byte[]{(byte)addr,(byte)(addr>>>8),(byte)(addr>>>16),(byte)(addr>>>24)}; + } + + // byte array -> int + long toIPInt(String _addr) { + long result = 0; + for(String part: _addr.split(Pattern.quote("."))) { + result = result << 8; + result |= Integer.parseInt(part); + } + return result; + } + + public int port; + public int Port() { + return port; + } + + public long _rawAddr; + public String Address() + { + try { + return InetAddress.getByAddress(toIPByteArray(_rawAddr)).getHostAddress(); + } catch (UnknownHostException e) { + // should never happen + return null; + } + } + + public String toString() { + return Address() + ":" + Port(); + } + + public Address() + { + port = -1; + _rawAddr = -1; + } + + public Address(String _addr, int _port) + { + _rawAddr = toIPInt(_addr); + port = _port; + } + + public void ZTAddress(InetSocketAddress ins) + { + port = ins.getPort(); + _rawAddr = toIPInt(ins.getAddress().getHostAddress()); + } + + public InetSocketAddress ToInetSocketAddress() throws IllegalArgumentException { + InetSocketAddress sock_addr = null; + try { + sock_addr = new InetSocketAddress(Address(), port); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + return sock_addr; + } + + public boolean isValid() { + return port != -1 && !Address().startsWith("-1.-1.-1.-1/-1"); + } +}
\ No newline at end of file diff --git a/examples/java/ZeroTierHelloWorld/src/zerotier/ZeroTier.java b/examples/java/ZeroTierHelloWorld/src/zerotier/ZeroTier.java new file mode 100644 index 0000000..b312f25 --- /dev/null +++ b/examples/java/ZeroTierHelloWorld/src/zerotier/ZeroTier.java @@ -0,0 +1,205 @@ +/* + * 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 <http://www.gnu.org/licenses/>. + * + * -- + * + * 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.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.zip.ZipError; + +public class ZeroTier { + + public static String Version() + { + return "1.2.2"; + } + + // Socket families + public static int AF_UNIX = 1; + public static int AF_INET = 2; + + // Socket types + public static int SOCK_STREAM = 1; + public static int SOCK_DGRAM = 2; + + // fcntl flags + public static int O_APPEND = 1024; + public static int O_NONBLOCK = 2048; + public static int O_ASYNC = 8192; + public static int O_DIRECT = 65536; + public static int O_NOATIME = 262144; + + // fcntl cmds + public static int F_GETFL = 3; + public static int F_SETFL = 4; + + // Loads JNI code + static { System.loadLibrary("zt"); } + + // ZeroTier service controls + public native void ztjni_start(String homeDir); + public void start(String homeDir) { + ztjni_start(homeDir); + } + + public native void ztjni_join(String nwid); + public void join(String nwid) { + ztjni_join(nwid); + } + + public native void ztjni_leave(String nwid); + public void leave(String nwid) { + ztjni_leave(nwid); + } + + public native ArrayList<String> ztjni_get_addresses(String nwid); + public ArrayList<String> get_addresses(String nwid) { + int err = -1; + ArrayList<String> addresses; + while (err < 0) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + addresses = ztjni_get_addresses(nwid); + if (addresses.size() > 0) { + return addresses; + } + } + return null; + } + + public native boolean ztjni_running(); + public boolean running() { + return ztjni_running(); + } + + public native int ztjni_socket(int family, int type, int protocol); + public int socket(int family, int type, int protocol) { + return ztjni_socket(family, type, protocol); + } + + public native int ztjni_connect(int fd, String addr, int port); + + public int connect(int sock, Address zaddr, String nwid) { + return connect(sock, zaddr.Address(), zaddr.Port(), nwid); + } + + public int connect(int sock, String addr, int port, String nwid) + { + int err = -1; + ArrayList<String> addresses; + while (err < 0) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + addresses = ztjni_get_addresses(nwid); + if (addresses.size() > 0) { + if(!addresses.get(0).startsWith("-1.-1.-1.-1/-1")) { + err = ztjni_connect(sock, addr, port); + } + } + } + return err; + } + + public native int ztjni_bind(int fd, String addr, int port); + + public int bind(int sock, Address zaddr, String nwid) { + return bind(sock, zaddr.Address(), zaddr.Port(), nwid); + } + public int bind(int sock, String addr, int port, String nwid) { + int err = -1; + ArrayList<String> addresses; + while (err < 0) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + addresses = ztjni_get_addresses(nwid); + if (addresses.size() > 0) { + if(!addresses.get(0).startsWith("-1.-1.-1.-1/-1")) { + err = ztjni_bind(sock, addr, port); + } + } + } + return err; + } + + public native int ztjni_accept4(int fd, String addr, int port); + public int accept4(int fd, String addr, int port) { + return ztjni_accept4(fd,addr,port); + } + + public native int ztjni_accept(int fd, zerotier.Address addr); + public int accept(int fd, zerotier.Address addr) { + return ztjni_accept(fd, addr); + } + + public native int ztjni_listen(int fd, int backlog); + public int listen(int fd, int backlog) { + return ztjni_listen(fd,backlog); + } + + public native int ztjni_close(int fd); + public int close(int fd) { + return ztjni_close(fd); + } + + public native int ztjni_read(int fd, byte[] buf, int len); + public int read(int fd, byte[] buf, int len) { + return ztjni_read(fd, buf, len); + } + + public native int ztjni_write(int fd, byte[] buf, int len); + public int write(int fd, byte[] buf, int len) { + return ztjni_write(fd, buf, len); + } + + public native int ztjni_sendto(int fd, byte[] buf, int len, int flags, zerotier.Address addr); + public int sendto(int fd, byte[] buf, int len, int flags, zerotier.Address addr){ + return ztjni_sendto(fd,buf,len,flags,addr); + } + + public native int ztjni_send(int fd, byte[] buf, int len, int flags); + public int send(int fd, byte[] buf, int len, int flags) { + return ztjni_send(fd, buf, len, flags); + } + + public native int ztjni_recvfrom(int fd, byte[] buf, int len, int flags, zerotier.Address addr); + public int recvfrom(int fd, byte[] buf, int len, int flags, zerotier.Address addr){ + return ztjni_recvfrom(fd,buf,len,flags,addr); + } + + public native int ztjni_fcntl(int sock, int cmd, int flag); + public int fcntl(int sock, int cmd, int flag) { + return ztjni_fcntl(sock, F_SETFL, O_NONBLOCK); + } +}
\ No newline at end of file |
