summaryrefslogtreecommitdiff
path: root/examples/java/ZeroTierHelloWorld/src/zerotier/Address.java
diff options
context:
space:
mode:
Diffstat (limited to 'examples/java/ZeroTierHelloWorld/src/zerotier/Address.java')
-rw-r--r--examples/java/ZeroTierHelloWorld/src/zerotier/Address.java84
1 files changed, 84 insertions, 0 deletions
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