From d063f583eecbcd98837cbbb98a79ac604664625b Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 13:52:29 -0700
Subject: Added VirtualNetworkRoute class and added it to VirtualNetworkConfig
---
java/jni/ZT_jniutils.cpp | 104 ++++++++++++++++++++-
java/jni/ZT_jniutils.h | 2 +
.../src/com/zerotier/sdk/VirtualNetworkConfig.java | 8 ++
java/src/com/zerotier/sdk/VirtualnetworkRoute.java | 55 +++++++++++
4 files changed, 168 insertions(+), 1 deletion(-)
create mode 100644 java/src/com/zerotier/sdk/VirtualnetworkRoute.java
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 512bf839..5f54751d 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -609,6 +609,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
jfieldID portErrorField = NULL;
jfieldID netconfRevisionField = NULL;
jfieldID assignedAddressesField = NULL;
+ jfieldID routesField = NULL;
vnetConfigClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkConfig");
if(vnetConfigClass == NULL)
@@ -716,6 +717,13 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
return NULL;
}
+ routesField = lookup.findField(vnetConfigClass, "routes", "[Lcom/zerotier/sdk/VirtualNetworkRoute");
+ if(env->ExceptionCheck() || routesField == NULL)
+ {
+ LOGE("Error getting routes field");
+ return NULL;
+ }
+
env->SetLongField(vnetConfigObj, nwidField, vnetConfig.nwid);
env->SetLongField(vnetConfigObj, macField, vnetConfig.mac);
jstring nameStr = env->NewStringUTF(vnetConfig.name);
@@ -773,6 +781,34 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
env->SetObjectField(vnetConfigObj, assignedAddressesField, assignedAddrArrayObj);
+ jclass virtualNetworkRouteClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkRoute");
+ if(env->ExceptionCheck() || virtualNetworkRouteClass == NULL)
+ {
+ LOGE("Error finding VirtualNetworkRoute class");
+ return NULL;
+ }
+
+ jobjectArray routesArrayObj = env->NewObjectArray(
+ vnetConfig.routeCount, virtualNetworkRouteClass, NULL);
+ if(env->ExceptionCheck() || routesArrayObj == NULL)
+ {
+ LOGE("Error creating VirtualNetworkRoute[] array");
+ return NULL;
+ }
+
+ for(unsigned int i = 0; i < vnetConfig.routeCount; ++i)
+ {
+ jobject routeObj = newVirtualNetworkRoute(env, vnetConfig.routes[i]);
+ env->SetObjectArrayElement(routesArrayObj, i, routeObj);
+ if(env->ExceptionCheck())
+ {
+ LOGE("Error assigning VirtualNetworkRoute to array");
+ return NULL;
+ }
+ }
+
+ env->SetObjectField(vnetConfigObj, routesField, routesArrayObj);
+
return vnetConfigObj;
}
@@ -831,6 +867,72 @@ jobject newVersion(JNIEnv *env, int major, int minor, int rev)
return versionObj;
}
+jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route)
+{
+ jclass virtualNetworkRouteClass = NULL;
+ jmethodID routeConstructor = NULL;
+
+ virtualNetworkRouteClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkRoute");
+ if(env->ExceptionCheck() || virtualNetworkRouteClass == NULL)
+ {
+ return NULL;
+ }
+
+ routeConstructor = lookup.findMethod(virtualNetworkRouteClass, "", "()V");
+ if(env->ExceptionCheck() || routeConstructor == NULL)
+ {
+ return NULL;
+ }
+
+ jobject routeObj = env->NewObject(virtualNetworkRouteClass, routeConstructor);
+ if(env->ExceptionCheck() || routeObj == NULL)
+ {
+ return NULL;
+ }
+
+ jfieldID targetField = NULL;
+ jfieldID viaField = NULL;
+ jfieldID flagsField = NULL;
+ jfieldID metricField = NULL;
+
+ targetField = lookup.findField(virtualNetworkRouteClass, "target",
+ "Ljava/net/InetSocketAddress");
+ if(env->ExceptionCheck() || targetField == NULL)
+ {
+ return NULL;
+ }
+
+ viaField = lookup.findField(virtualNetworkRouteClass, "via",
+ "Ljava/net/InetSocketAddress");
+ if(env->ExceptionCheck() || targetField == NULL)
+ {
+ return NULL;
+ }
+
+ flagsField = lookup.findField(virtualNetworkRouteClass, "flags", "I");
+ if(env->ExceptionCheck() || flagsField == NULL)
+ {
+ return NULL;
+ }
+
+ metricField = lookup.findField(virtualNetworkRouteClass, "metric", "I");
+ if(env->ExceptionCheck() || metricField == NULL)
+ {
+ return NULL;
+ }
+
+ jobject targetObj = newInetSocketAddress(env, route.target);
+ jobject viaObj = newInetSocketAddress(env, route.via);
+
+ env->SetObjectField(routeObj, targetField, targetObj);
+ env->SetObjectField(routeObj, viaField, viaObj);
+ env->SetIntField(routeObj, flagsField, (jint)route.flags);
+ env->SetIntField(routeObj, metricField, (jint)route.metric);
+
+ return routeObj;
+}
+
#ifdef __cplusplus
}
-#endif
\ No newline at end of file
+#endif
+
diff --git a/java/jni/ZT_jniutils.h b/java/jni/ZT_jniutils.h
index 34dfc471..4dec7201 100644
--- a/java/jni/ZT_jniutils.h
+++ b/java/jni/ZT_jniutils.h
@@ -42,6 +42,8 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &config);
jobject newVersion(JNIEnv *env, int major, int minor, int rev);
+jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route);
+
#ifdef __cplusplus
}
#endif
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
index fbcbd3a4..0999525c 100644
--- a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
+++ b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
@@ -50,6 +50,7 @@ public final class VirtualNetworkConfig implements Comparable.
+ *
+ * --
+ *
+ * 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 com.zerotier.sdk;
+
+import java.net.InetSocketAddress;
+
+class VirtualNetworkRoute
+{
+ private VirtualNetworkRoute() {}
+
+ /**
+ * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
+ */
+ public InetSocketAddress target;
+
+ /**
+ * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
+ */
+ public InetSocketAddress via;
+
+ /**
+ * Route flags
+ */
+ public int flags;
+
+ /**
+ * Route metric (not currently used)
+ */
+ public int metric;
+}
--
cgit v1.2.3
From 8682c90c7d7dc900bcf0589fd67a98ad773f52f8 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 14:10:07 -0700
Subject: ensure routes are also equal when checking for equality on
VirtualNetworkConfig objects
---
java/src/com/zerotier/sdk/VirtualNetworkConfig.java | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
(limited to 'java')
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
index 0999525c..64512dad 100644
--- a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
+++ b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
@@ -61,13 +61,24 @@ public final class VirtualNetworkConfig implements Comparable
Date: Mon, 5 Sep 2016 14:27:44 -0700
Subject: fix capitalization on file
---
java/src/com/zerotier/sdk/VirtualNetworkRoute.java | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 java/src/com/zerotier/sdk/VirtualNetworkRoute.java
(limited to 'java')
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
new file mode 100644
index 00000000..ce4d1b49
--- /dev/null
+++ b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
@@ -0,0 +1,55 @@
+/*
+ * 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 com.zerotier.sdk;
+
+import java.net.InetSocketAddress;
+
+class VirtualNetworkRoute
+{
+ private VirtualNetworkRoute() {}
+
+ /**
+ * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
+ */
+ public InetSocketAddress target;
+
+ /**
+ * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
+ */
+ public InetSocketAddress via;
+
+ /**
+ * Route flags
+ */
+ public int flags;
+
+ /**
+ * Route metric (not currently used)
+ */
+ public int metric;
+}
--
cgit v1.2.3
From 9f717e79ea6be730e1cb7cd237c8112d6601c97e Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 14:42:36 -0700
Subject: Fixing filename again....
---
java/jni/Android.mk | 5 +++--
java/src/com/zerotier/sdk/VirtualNetworkRoute.java | 2 +-
java/src/com/zerotier/sdk/VirtualnetworkRoute.java | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index c563879c..6b5d4a4b 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -11,14 +11,14 @@ LOCAL_LDLIBS := -llog
# ZeroTierOne SDK source files
LOCAL_SRC_FILES := \
$(ZT1)/ext/lz4/lz4.c \
- $(ZT1)/ext/json-parser/json.c \
$(ZT1)/ext/http-parser/http_parser.c \
$(ZT1)/node/C25519.cpp \
+ $(ZT1)/node/Capability.cpp \
$(ZT1)/node/CertificateOfMembership.cpp \
- $(ZT1)/node/DeferredPackets.cpp \
$(ZT1)/node/Identity.cpp \
$(ZT1)/node/IncomingPacket.cpp \
$(ZT1)/node/InetAddress.cpp \
+ $(ZT1)/node/Membership.cpp \
$(ZT1)/node/Multicaster.cpp \
$(ZT1)/node/Network.cpp \
$(ZT1)/node/NetworkConfig.cpp \
@@ -32,6 +32,7 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/SelfAwareness.cpp \
$(ZT1)/node/SHA512.cpp \
$(ZT1)/node/Switch.cpp \
+ $(ZT1)/node/Tag.cpp \
$(ZT1)/node/Topology.cpp \
$(ZT1)/node/Utils.cpp \
$(ZT1)/osdep/Http.cpp \
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
index ce4d1b49..32376cb9 100644
--- a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
+++ b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
@@ -29,7 +29,7 @@ package com.zerotier.sdk;
import java.net.InetSocketAddress;
-class VirtualNetworkRoute
+public class VirtualNetworkRoute
{
private VirtualNetworkRoute() {}
diff --git a/java/src/com/zerotier/sdk/VirtualnetworkRoute.java b/java/src/com/zerotier/sdk/VirtualnetworkRoute.java
index ce4d1b49..32376cb9 100644
--- a/java/src/com/zerotier/sdk/VirtualnetworkRoute.java
+++ b/java/src/com/zerotier/sdk/VirtualnetworkRoute.java
@@ -29,7 +29,7 @@ package com.zerotier.sdk;
import java.net.InetSocketAddress;
-class VirtualNetworkRoute
+public class VirtualNetworkRoute
{
private VirtualNetworkRoute() {}
--
cgit v1.2.3
From 598ca48ed6aa22246b5daee7fb03aa48ee2cdad1 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 16:12:06 -0700
Subject: Attempting to fix VirtualNetworkRoute having 2 entries in git. Yay
non case sensitive filesystems
---
java/src/com/zerotier/sdk/VirtualNetworkRoute.java | 55 ----------------------
java/src/com/zerotier/sdk/VirtualnetworkRoute.java | 55 ----------------------
2 files changed, 110 deletions(-)
delete mode 100644 java/src/com/zerotier/sdk/VirtualNetworkRoute.java
delete mode 100644 java/src/com/zerotier/sdk/VirtualnetworkRoute.java
(limited to 'java')
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
deleted file mode 100644
index 32376cb9..00000000
--- a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 com.zerotier.sdk;
-
-import java.net.InetSocketAddress;
-
-public class VirtualNetworkRoute
-{
- private VirtualNetworkRoute() {}
-
- /**
- * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
- */
- public InetSocketAddress target;
-
- /**
- * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
- */
- public InetSocketAddress via;
-
- /**
- * Route flags
- */
- public int flags;
-
- /**
- * Route metric (not currently used)
- */
- public int metric;
-}
diff --git a/java/src/com/zerotier/sdk/VirtualnetworkRoute.java b/java/src/com/zerotier/sdk/VirtualnetworkRoute.java
deleted file mode 100644
index 32376cb9..00000000
--- a/java/src/com/zerotier/sdk/VirtualnetworkRoute.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 com.zerotier.sdk;
-
-import java.net.InetSocketAddress;
-
-public class VirtualNetworkRoute
-{
- private VirtualNetworkRoute() {}
-
- /**
- * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
- */
- public InetSocketAddress target;
-
- /**
- * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
- */
- public InetSocketAddress via;
-
- /**
- * Route flags
- */
- public int flags;
-
- /**
- * Route metric (not currently used)
- */
- public int metric;
-}
--
cgit v1.2.3
From dcf1f70868407ef38c9ec97772141d003ad20e93 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 16:12:29 -0700
Subject: re-adding file
---
java/src/com/zerotier/sdk/VirtualNetworkRoute.java | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 java/src/com/zerotier/sdk/VirtualNetworkRoute.java
(limited to 'java')
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
new file mode 100644
index 00000000..738c4158
--- /dev/null
+++ b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
@@ -0,0 +1,55 @@
+/*
+ * 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 com.zerotier.sdk;
+
+import java.net.InetSocketAddress;
+
+public final class VirtualNetworkRoute
+{
+ private VirtualNetworkRoute() {}
+
+ /**
+ * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
+ */
+ public InetSocketAddress target;
+
+ /**
+ * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
+ */
+ public InetSocketAddress via;
+
+ /**
+ * Route flags
+ */
+ public int flags;
+
+ /**
+ * Route metric (not currently used)
+ */
+ public int metric;
+}
--
cgit v1.2.3
From 43b3ec4b1afa3c3833f1f61ec10c9f22bd5e7359 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 5 Sep 2016 16:19:04 -0700
Subject: forgot a semicolon in a JNI java type specifier.
---
java/jni/ZT_jniutils.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 5f54751d..d7d205a7 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -710,14 +710,16 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
return NULL;
}
- assignedAddressesField = lookup.findField(vnetConfigClass, "assignedAddresses", "[Ljava/net/InetSocketAddress;");
+ assignedAddressesField = lookup.findField(vnetConfigClass, "assignedAddresses",
+ "[Ljava/net/InetSocketAddress;");
if(env->ExceptionCheck() || assignedAddressesField == NULL)
{
LOGE("Error getting assignedAddresses field");
return NULL;
}
- routesField = lookup.findField(vnetConfigClass, "routes", "[Lcom/zerotier/sdk/VirtualNetworkRoute");
+ routesField = lookup.findField(vnetConfigClass, "routes",
+ "[Lcom/zerotier/sdk/VirtualNetworkRoute;");
if(env->ExceptionCheck() || routesField == NULL)
{
LOGE("Error getting routes field");
--
cgit v1.2.3
From 407ad659eab4314764310e2c9d274e73147f6034 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Tue, 6 Sep 2016 17:59:01 -0700
Subject: Reflect changes to strut ZT_PeerPhysicalPath
---
java/jni/ZT_jniutils.cpp | 9 ---------
java/src/com/zerotier/sdk/PeerPhysicalPath.java | 8 --------
2 files changed, 17 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index d7d205a7..f73c408b 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -371,7 +371,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp)
jfieldID addressField = NULL;
jfieldID lastSendField = NULL;
jfieldID lastReceiveField = NULL;
- jfieldID activeField = NULL;
jfieldID preferredField = NULL;
jmethodID ppp_constructor = NULL;
@@ -404,13 +403,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp)
return NULL;
}
- activeField = lookup.findField(pppClass, "active", "Z");
- if(env->ExceptionCheck() || activeField == NULL)
- {
- LOGE("Error finding active field");
- return NULL;
- }
-
preferredField = lookup.findField(pppClass, "preferred", "Z");
if(env->ExceptionCheck() || preferredField == NULL)
{
@@ -441,7 +433,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp)
env->SetObjectField(pppObject, addressField, addressObject);
env->SetLongField(pppObject, lastSendField, ppp.lastSend);
env->SetLongField(pppObject, lastReceiveField, ppp.lastReceive);
- env->SetBooleanField(pppObject, activeField, ppp.active);
env->SetBooleanField(pppObject, preferredField, ppp.preferred);
if(env->ExceptionCheck()) {
diff --git a/java/src/com/zerotier/sdk/PeerPhysicalPath.java b/java/src/com/zerotier/sdk/PeerPhysicalPath.java
index d64ea56b..3f9a8612 100644
--- a/java/src/com/zerotier/sdk/PeerPhysicalPath.java
+++ b/java/src/com/zerotier/sdk/PeerPhysicalPath.java
@@ -37,7 +37,6 @@ public final class PeerPhysicalPath {
private long lastSend;
private long lastReceive;
private boolean fixed;
- private boolean active;
private boolean preferred;
private PeerPhysicalPath() {}
@@ -70,13 +69,6 @@ public final class PeerPhysicalPath {
return fixed;
}
- /**
- * Is path active?
- */
- public final boolean isActive() {
- return active;
- }
-
/**
* Is path preferred?
*/
--
cgit v1.2.3
From dccca7df1a893dacc50a605d707917f579d05db9 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 8 Sep 2016 17:45:40 -0700
Subject: another couple of missing semicolons
---
java/jni/ZT_jniutils.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index f73c408b..495efa12 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -889,14 +889,14 @@ jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route)
jfieldID metricField = NULL;
targetField = lookup.findField(virtualNetworkRouteClass, "target",
- "Ljava/net/InetSocketAddress");
+ "Ljava/net/InetSocketAddress;");
if(env->ExceptionCheck() || targetField == NULL)
{
return NULL;
}
viaField = lookup.findField(virtualNetworkRouteClass, "via",
- "Ljava/net/InetSocketAddress");
+ "Ljava/net/InetSocketAddress;");
if(env->ExceptionCheck() || targetField == NULL)
{
return NULL;
--
cgit v1.2.3
From 5fadd8bdd25577cf8fd626a2a2decbedf28c0dd6 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 19 Sep 2016 12:54:19 -0700
Subject: ZT_PEER_ROLE_RELAY -> ZT_PEER_ROLE_UPSTREAM in JNI glue
---
java/jni/ZT_jniutils.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 495efa12..411a836a 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -162,7 +162,7 @@ jobject createPeerRole(JNIEnv *env, ZT_PeerRole role)
case ZT_PEER_ROLE_LEAF:
fieldName = "PEER_ROLE_LEAF";
break;
- case ZT_PEER_ROLE_RELAY:
+ case ZT_PEER_ROLE_UPSTREAM:
fieldName = "PEER_ROLE_RELAY";
break;
case ZT_PEER_ROLE_ROOT:
--
cgit v1.2.3
From d87f0293e3bdbb013ce2b48d5518a22e3ecd8c71 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 19 Sep 2016 13:40:53 -0700
Subject: Don't print a few error messages when they don't matter.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
java/jni/ZT_jniutils.cpp | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 411a836a..6faa91a4 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -313,11 +313,20 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr)
return NULL;
}
- jobject inetAddressObject = newInetAddress(env, addr);
+ jobject inetAddressObject = NULL;
+
+ if(addr.ss_family != 0)
+ {
+ inetAddressObject = newInetAddress(env, addr);
- if(env->ExceptionCheck() || inetAddressObject == NULL)
+ if(env->ExceptionCheck() || inetAddressObject == NULL)
+ {
+ LOGE("Error creating new inet address");
+ return NULL;
+ }
+ }
+ else
{
- LOGE("Error creating new inet address");
return NULL;
}
@@ -350,10 +359,9 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr)
break;
default:
{
- LOGE("ERROR: addr.ss_family is not set or unknown");
break;
}
- };
+ }
jobject inetSocketAddressObject = env->NewObject(inetSocketAddressClass, inetSocketAddress_constructor, inetAddressObject, port);
--
cgit v1.2.3
From 0564bb3b35117c7367469dd5582a5a4093078586 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 21 Sep 2016 14:09:46 -0700
Subject: added missing copyright/license info from ZT_jniutils
---
java/jni/ZT_jniutils.cpp | 18 ++++++++++++++++++
java/jni/ZT_jniutils.h | 18 ++++++++++++++++++
2 files changed, 36 insertions(+)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 6faa91a4..7ecc7256 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -1,3 +1,21 @@
+/*
+ * ZeroTier One - Network Virtualization Everywhere
+ * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/
+ *
+ * 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 .
+ */
+
#include "ZT_jniutils.h"
#include "ZT_jnilookup.h"
#include
diff --git a/java/jni/ZT_jniutils.h b/java/jni/ZT_jniutils.h
index 4dec7201..e35d4f42 100644
--- a/java/jni/ZT_jniutils.h
+++ b/java/jni/ZT_jniutils.h
@@ -1,3 +1,21 @@
+/*
+ * ZeroTier One - Network Virtualization Everywhere
+ * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/
+ *
+ * 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 .
+ */
+
#ifndef ZT_jniutils_h_
#define ZT_jniutils_h_
#include
--
cgit v1.2.3
From 40d3993ceb64f924167572c3add7300abb434562 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 21 Sep 2016 14:12:20 -0700
Subject: java code still needed to reflect PEER_ROLE_RELAY rename to
PEER_ROLE_UPSTREAM
---
java/jni/ZT_jniutils.cpp | 2 +-
java/src/com/zerotier/sdk/PeerRole.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 7ecc7256..27ca7374 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -181,7 +181,7 @@ jobject createPeerRole(JNIEnv *env, ZT_PeerRole role)
fieldName = "PEER_ROLE_LEAF";
break;
case ZT_PEER_ROLE_UPSTREAM:
- fieldName = "PEER_ROLE_RELAY";
+ fieldName = "PEER_ROLE_UPSTREAM";
break;
case ZT_PEER_ROLE_ROOT:
fieldName = "PEER_ROLE_ROOTS";
diff --git a/java/src/com/zerotier/sdk/PeerRole.java b/java/src/com/zerotier/sdk/PeerRole.java
index d7d55f05..f281c1b6 100644
--- a/java/src/com/zerotier/sdk/PeerRole.java
+++ b/java/src/com/zerotier/sdk/PeerRole.java
@@ -34,9 +34,9 @@ public enum PeerRole {
PEER_ROLE_LEAF,
/**
- * relay node
+ * upstream node
*/
- PEER_ROLE_RELAY,
+ PEER_ROLE_UPSTREAM,
/**
* root server
--
cgit v1.2.3
From 8809c6d1221c8e617ad707ab0e4f670d615876ab Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 13 Oct 2016 14:34:54 -0700
Subject: link atomic library. seems to be required in the latest Android NDK
---
java/jni/Android.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index 6b5d4a4b..5e020950 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -5,7 +5,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := ZeroTierOneJNI
LOCAL_C_INCLUDES := $(ZT1)/include
LOCAL_C_INCLUDES += $(ZT1)/node
-LOCAL_LDLIBS := -llog
+LOCAL_LDLIBS := -llog -latomic
# LOCAL_CFLAGS := -g
# ZeroTierOne SDK source files
--
cgit v1.2.3
From 3a3fe272bbe8355a0048de312f3c333a2950a5fe Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 13 Oct 2016 15:18:07 -0700
Subject: add Revocation.cpp to android build
---
java/jni/Android.mk | 1 +
1 file changed, 1 insertion(+)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index 5e020950..73eb2c46 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -28,6 +28,7 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/Path.cpp \
$(ZT1)/node/Peer.cpp \
$(ZT1)/node/Poly1305.cpp \
+ $(ZT1)/node/Revocation.cpp \
$(ZT1)/node/Salsa20.cpp \
$(ZT1)/node/SelfAwareness.cpp \
$(ZT1)/node/SHA512.cpp \
--
cgit v1.2.3
From e1c930f1b7a44d2a1c37d4b9b6f348c2ed7260fc Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 9 Nov 2016 16:33:01 -0800
Subject: update JNI wrapper to reflect removal of lastMulticastFrame and
lastUnicastFrame from ZT_Peer struct
---
java/jni/ZT_jniutils.cpp | 18 ------------------
java/src/com/zerotier/sdk/Peer.java | 16 ----------------
2 files changed, 34 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 27ca7374..6b882c6d 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -475,8 +475,6 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
jclass peerClass = NULL;
jfieldID addressField = NULL;
- jfieldID lastUnicastFrameField = NULL;
- jfieldID lastMulticastFrameField = NULL;
jfieldID versionMajorField = NULL;
jfieldID versionMinorField = NULL;
jfieldID versionRevField = NULL;
@@ -500,20 +498,6 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
return NULL;
}
- lastUnicastFrameField = lookup.findField(peerClass, "lastUnicastFrame", "J");
- if(env->ExceptionCheck() || lastUnicastFrameField == NULL)
- {
- LOGE("Error finding lastUnicastFrame field of Peer object");
- return NULL;
- }
-
- lastMulticastFrameField = lookup.findField(peerClass, "lastMulticastFrame", "J");
- if(env->ExceptionCheck() || lastMulticastFrameField == NULL)
- {
- LOGE("Error finding lastMulticastFrame field of Peer object");
- return NULL;
- }
-
versionMajorField = lookup.findField(peerClass, "versionMajor", "I");
if(env->ExceptionCheck() || versionMajorField == NULL)
{
@@ -571,8 +555,6 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
}
env->SetLongField(peerObject, addressField, (jlong)peer.address);
- env->SetLongField(peerObject, lastUnicastFrameField, (jlong)peer.lastUnicastFrame);
- env->SetLongField(peerObject, lastMulticastFrameField, (jlong)peer.lastMulticastFrame);
env->SetIntField(peerObject, versionMajorField, peer.versionMajor);
env->SetIntField(peerObject, versionMinorField, peer.versionMinor);
env->SetIntField(peerObject, versionRevField, peer.versionRev);
diff --git a/java/src/com/zerotier/sdk/Peer.java b/java/src/com/zerotier/sdk/Peer.java
index fb2d1065..eb3d7130 100644
--- a/java/src/com/zerotier/sdk/Peer.java
+++ b/java/src/com/zerotier/sdk/Peer.java
@@ -34,8 +34,6 @@ import java.util.ArrayList;
*/
public final class Peer {
private long address;
- private long lastUnicastFrame;
- private long lastMulticastFrame;
private int versionMajor;
private int versionMinor;
private int versionRev;
@@ -52,20 +50,6 @@ public final class Peer {
return address;
}
- /**
- * Time we last received a unicast frame from this peer
- */
- public final long lastUnicastFrame() {
- return lastUnicastFrame;
- }
-
- /**
- * Time we last received a multicast rame from this peer
- */
- public final long lastMulticastFrame() {
- return lastMulticastFrame;
- }
-
/**
* Remote major version or -1 if not known
*/
--
cgit v1.2.3
From 3c5e28a27da5aed59fa64b9fe955a2eda70feb38 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Tue, 22 Nov 2016 13:03:36 -0800
Subject: use new ZT_Node_Callbacks struct in JNI
---
java/jni/com_zerotierone_sdk_Node.cpp | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 4d9a2102..d0228d13 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -56,7 +56,11 @@ namespace {
, eventListener(NULL)
, frameListener(NULL)
, configListener(NULL)
- {}
+ , callbacks(NULL)
+ {
+ callbacks = (ZT_Node_Callbacks*)malloc(sizeof(ZT_Node_Callbacks));
+ memset(callbacks, 0, sizeof(ZT_Node_Callbacks));
+ }
~JniRef()
{
@@ -69,6 +73,9 @@ namespace {
env->DeleteGlobalRef(eventListener);
env->DeleteGlobalRef(frameListener);
env->DeleteGlobalRef(configListener);
+
+ free(callbacks);
+ callbacks = NULL;
}
uint64_t id;
@@ -83,6 +90,8 @@ namespace {
jobject eventListener;
jobject frameListener;
jobject configListener;
+
+ ZT_Node_Callbacks *callbacks;
};
@@ -602,17 +611,18 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
}
ref->eventListener = env->NewGlobalRef(tmp);
+ ref->callbacks->dataStoreGetFunction = &DataStoreGetFunction;
+ ref->callbacks->dataStorePutFunction = &DataStorePutFunction;
+ ref->callbacks->wirePacketSendFunction = &WirePacketSendFunction;
+ ref->callbacks->virtualNetworkFrameFunction = &VirtualNetworkFrameFunctionCallback;
+ ref->callbacks->virtualNetworkConfigFunction = &VirtualNetworkConfigFunctionCallback;
+ ref->callbacks->eventCallback = &EventCallback;
+
ZT_ResultCode rc = ZT_Node_new(
&node,
ref,
- (uint64_t)now,
- &DataStoreGetFunction,
- &DataStorePutFunction,
- &WirePacketSendFunction,
- &VirtualNetworkFrameFunctionCallback,
- &VirtualNetworkConfigFunctionCallback,
- NULL,
- &EventCallback);
+ ref->callbacks,
+ (uint64_t)now);
if(rc != ZT_RESULT_OK)
{
--
cgit v1.2.3
From e41d71cd19b4179c0b061d1121527788f388c6e2 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 5 Jan 2017 13:56:07 -0800
Subject: add implementations of compareTo() and equals() for
VirtualNetworkRoute().
Android app was relying on these, but since they didn't exist, they didn't function properly
---
java/src/com/zerotier/sdk/VirtualNetworkRoute.java | 51 +++++++++++++++++++++-
1 file changed, 49 insertions(+), 2 deletions(-)
(limited to 'java')
diff --git a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
index 738c4158..b89dce7b 100644
--- a/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
+++ b/java/src/com/zerotier/sdk/VirtualNetworkRoute.java
@@ -29,9 +29,14 @@ package com.zerotier.sdk;
import java.net.InetSocketAddress;
-public final class VirtualNetworkRoute
+public final class VirtualNetworkRoute implements Comparable
{
- private VirtualNetworkRoute() {}
+ private VirtualNetworkRoute() {
+ target = null;
+ via = null;
+ flags = 0;
+ metric = 0;
+ }
/**
* Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
@@ -52,4 +57,46 @@ public final class VirtualNetworkRoute
* Route metric (not currently used)
*/
public int metric;
+
+
+ @Override
+ public int compareTo(VirtualNetworkRoute other) {
+ return target.toString().compareTo(other.target.toString());
+ }
+
+ public boolean equals(VirtualNetworkRoute other) {
+ boolean targetEquals;
+ if (target == null && other.target == null) {
+ targetEquals = true;
+ }
+ else if (target == null && other.target != null) {
+ targetEquals = false;
+ }
+ else if (target != null && other.target == null) {
+ targetEquals = false;
+ }
+ else {
+ targetEquals = target.equals(other.target);
+ }
+
+
+ boolean viaEquals;
+ if (via == null && other.via == null) {
+ viaEquals = true;
+ }
+ else if (via == null && other.via != null) {
+ viaEquals = false;
+ }
+ else if (via != null && other.via == null) {
+ viaEquals = false;
+ }
+ else {
+ viaEquals = via.equals(other.via);
+ }
+
+ return viaEquals &&
+ viaEquals &&
+ flags == other.flags &&
+ metric == other.metric;
+ }
}
--
cgit v1.2.3
From f149dd9401b1cd3f9b32a59bcdd8abe65af3bc77 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Fri, 13 Jan 2017 11:36:48 -0800
Subject: fix Android NDK build
---
java/jni/Android.mk | 6 ++--
java/jni/ZT_jniutils.cpp | 20 ++++++------
java/jni/com_zerotierone_sdk_Node.cpp | 58 ++++++++++++++++++-----------------
3 files changed, 44 insertions(+), 40 deletions(-)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index 73eb2c46..e5d501f8 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -35,9 +35,9 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/Switch.cpp \
$(ZT1)/node/Tag.cpp \
$(ZT1)/node/Topology.cpp \
- $(ZT1)/node/Utils.cpp \
- $(ZT1)/osdep/Http.cpp \
- $(ZT1)/osdep/OSUtils.cpp
+ $(ZT1)/node/Utils.cpp
+# $(ZT1)/osdep/Http.cpp \
+# $(ZT1)/osdep/OSUtils.cpp
# JNI Files
LOCAL_SRC_FILES += \
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 6b882c6d..e355271c 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-
+
#include "ZT_jniutils.h"
#include "ZT_jnilookup.h"
#include
@@ -30,7 +30,7 @@ extern "C" {
jobject createResultObject(JNIEnv *env, ZT_ResultCode code)
{
jclass resultClass = NULL;
-
+
jobject resultObject = NULL;
resultClass = lookup.findClass("com/zerotier/sdk/ResultCode");
@@ -67,14 +67,14 @@ jobject createResultObject(JNIEnv *env, ZT_ResultCode code)
}
jfieldID enumField = lookup.findStaticField(resultClass, fieldName.c_str(), "Lcom/zerotier/sdk/ResultCode;");
- if(env->ExceptionCheck() || enumField == NULL)
+ if(env->ExceptionCheck() || enumField == NULL)
{
LOGE("Error on FindStaticField");
return NULL;
}
resultObject = env->GetStaticObjectField(resultClass, enumField);
- if(env->ExceptionCheck() || resultObject == NULL)
+ if(env->ExceptionCheck() || resultObject == NULL)
{
LOGE("Error on GetStaticObjectField");
}
@@ -154,6 +154,8 @@ jobject createEvent(JNIEnv *env, ZT_Event event)
case ZT_EVENT_TRACE:
fieldName = "EVENT_TRACE";
break;
+ case ZT_EVENT_USER_MESSAGE:
+ break;
}
jfieldID enumField = lookup.findStaticField(eventClass, fieldName.c_str(), "Lcom/zerotier/sdk/Event;");
@@ -332,7 +334,7 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr)
}
jobject inetAddressObject = NULL;
-
+
if(addr.ss_family != 0)
{
inetAddressObject = newInetAddress(env, addr);
@@ -468,7 +470,7 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp)
return pppObject;
}
-jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
+jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
{
LOGV("newPeer called");
@@ -570,7 +572,7 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
jobjectArray arrayObject = env->NewObjectArray(
peer.pathCount, peerPhysicalPathClass, NULL);
- if(env->ExceptionCheck() || arrayObject == NULL)
+ if(env->ExceptionCheck() || arrayObject == NULL)
{
LOGE("Error creating PeerPhysicalPath[] array");
return NULL;
@@ -709,7 +711,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
return NULL;
}
- assignedAddressesField = lookup.findField(vnetConfigClass, "assignedAddresses",
+ assignedAddressesField = lookup.findField(vnetConfigClass, "assignedAddresses",
"[Ljava/net/InetSocketAddress;");
if(env->ExceptionCheck() || assignedAddressesField == NULL)
{
@@ -717,7 +719,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
return NULL;
}
- routesField = lookup.findField(vnetConfigClass, "routes",
+ routesField = lookup.findField(vnetConfigClass, "routes",
"[Lcom/zerotier/sdk/VirtualNetworkRoute;");
if(env->ExceptionCheck() || routesField == NULL)
{
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index d0228d13..eb62d985 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -139,8 +139,8 @@ namespace {
}
return env->CallIntMethod(
- ref->configListener,
- configListenerCallbackMethod,
+ ref->configListener,
+ configListenerCallbackMethod,
(jlong)nwid, operationObject, networkConfigObject);
}
@@ -203,7 +203,7 @@ namespace {
void EventCallback(ZT_Node *node,
void *userData,
- enum ZT_Event event,
+ enum ZT_Event event,
const void *data)
{
LOGV("EventCallback");
@@ -291,6 +291,8 @@ namespace {
}
}
break;
+ case ZT_EVENT_USER_MESSAGE:
+ break;
}
}
@@ -348,7 +350,7 @@ namespace {
objectName, buffer, bufferIndex, objectSizeObj);
long retval = (long)env->CallLongMethod(
- ref->dataStoreGetListener, dataStoreGetCallbackMethod,
+ ref->dataStoreGetListener, dataStoreGetCallbackMethod,
nameStr, bufferObj, (jlong)bufferIndex, objectSizeObj);
if(retval > 0)
@@ -463,7 +465,7 @@ namespace {
LOGE("Couldn't find onSendPacketRequested method");
return -2;
}
-
+
jobject localAddressObj = NULL;
if(memcmp(localAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
{
@@ -496,7 +498,7 @@ namespace {
}
}
-JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
lookup.setJavaVM(vm);
return JNI_VERSION_1_6;
@@ -641,7 +643,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
ZeroTier::Mutex::Lock lock(nodeMapMutex);
ref->node = node;
nodeMap.insert(std::make_pair(ref->id, ref));
-
+
return resultObject;
}
@@ -659,7 +661,7 @@ JNIEXPORT void JNICALL Java_com_zerotier_sdk_Node_node_1delete(
NodeMap::iterator found;
{
- ZeroTier::Mutex::Lock lock(nodeMapMutex);
+ ZeroTier::Mutex::Lock lock(nodeMapMutex);
found = nodeMap.find(nodeId);
}
@@ -685,9 +687,9 @@ JNIEXPORT void JNICALL Java_com_zerotier_sdk_Node_node_1delete(
* Signature: (JJJJJII[B[J)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame(
- JNIEnv *env, jobject obj,
- jlong id,
- jlong in_now,
+ JNIEnv *env, jobject obj,
+ jlong id,
+ jlong in_now,
jlong in_nwid,
jlong in_sourceMac,
jlong in_destMac,
@@ -697,7 +699,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame(
jlongArray out_nextBackgroundTaskDeadline)
{
uint64_t nodeId = (uint64_t) id;
-
+
ZT_Node *node = findNode(nodeId);
if(node == NULL)
{
@@ -752,9 +754,9 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame(
* Signature: (JJLjava/net/InetSocketAddress;I[B[J)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
- JNIEnv *env, jobject obj,
+ JNIEnv *env, jobject obj,
jlong id,
- jlong in_now,
+ jlong in_now,
jobject in_localAddress,
jobject in_remoteAddress,
jbyteArray in_packetData,
@@ -820,7 +822,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
jmethodID inetSock_getPort = lookup.findMethod(
InetSocketAddressClass, "getPort", "()I");
- if(env->ExceptionCheck() || inetSock_getPort == NULL)
+ if(env->ExceptionCheck() || inetSock_getPort == NULL)
{
LOGE("Couldn't find getPort method on InetSocketAddress");
return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL);
@@ -844,10 +846,10 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
}
unsigned int addrSize = env->GetArrayLength(remoteAddressArray);
-
+
sockaddr_storage localAddress = {};
-
+
if(localAddrObj == NULL)
{
localAddress = ZT_SOCKADDR_NULL;
@@ -939,7 +941,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
localData,
packetLength,
&nextBackgroundTaskDeadline);
- if(rc != ZT_RESULT_OK)
+ if(rc != ZT_RESULT_OK)
{
LOGE("ZT_Node_processWirePacket returned: %d", rc);
}
@@ -959,7 +961,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
* Signature: (JJ[J)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processBackgroundTasks(
- JNIEnv *env, jobject obj,
+ JNIEnv *env, jobject obj,
jlong id,
jlong in_now,
jlongArray out_nextBackgroundTaskDeadline)
@@ -1032,7 +1034,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_leave(
uint64_t nwid = (uint64_t)in_nwid;
ZT_ResultCode rc = ZT_Node_leave(node, nwid, NULL);
-
+
return createResultObject(env, rc);
}
@@ -1042,8 +1044,8 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_leave(
* Signature: (JJJJ)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastSubscribe(
- JNIEnv *env, jobject obj,
- jlong id,
+ JNIEnv *env, jobject obj,
+ jlong id,
jlong in_nwid,
jlong in_multicastGroup,
jlong in_multicastAdi)
@@ -1072,8 +1074,8 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastSubscribe(
* Signature: (JJJJ)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastUnsubscribe(
- JNIEnv *env, jobject obj,
- jlong id,
+ JNIEnv *env, jobject obj,
+ jlong id,
jlong in_nwid,
jlong in_multicastGroup,
jlong in_multicastAdi)
@@ -1141,7 +1143,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_status
{
return NULL;
}
-
+
nodeStatusConstructor = lookup.findMethod(
nodeStatusClass, "", "()V");
if(nodeStatusConstructor == NULL)
@@ -1225,7 +1227,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_networkConfig(
}
ZT_VirtualNetworkConfig *vnetConfig = ZT_Node_networkConfig(node, nwid);
-
+
jobject vnetConfigObject = newNetworkConfig(env, *vnetConfig);
ZT_Node_freeQueryResult(node, vnetConfig);
@@ -1267,7 +1269,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_zerotier_sdk_Node_peers(
}
ZT_PeerList *peerList = ZT_Node_peers(node);
-
+
if(peerList == NULL)
{
LOGE("ZT_Node_peers returned NULL");
@@ -1306,7 +1308,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_zerotier_sdk_Node_peers(
{
jobject peerObj = newPeer(env, peerList->peers[i]);
env->SetObjectArrayElement(peerArrayObj, i, peerObj);
- if(env->ExceptionCheck())
+ if(env->ExceptionCheck())
{
LOGE("Error assigning Peer object to array");
break;
--
cgit v1.2.3
From 923d3f1fe8f4b61b95043813b79e73e2974a54de Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 26 Jan 2017 15:01:32 -0800
Subject: remove references to deleted source files in Android NDK build files
---
java/jni/Android.mk | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index e5d501f8..774c2015 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -10,8 +10,6 @@ LOCAL_LDLIBS := -llog -latomic
# ZeroTierOne SDK source files
LOCAL_SRC_FILES := \
- $(ZT1)/ext/lz4/lz4.c \
- $(ZT1)/ext/http-parser/http_parser.c \
$(ZT1)/node/C25519.cpp \
$(ZT1)/node/Capability.cpp \
$(ZT1)/node/CertificateOfMembership.cpp \
@@ -36,8 +34,7 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/Tag.cpp \
$(ZT1)/node/Topology.cpp \
$(ZT1)/node/Utils.cpp
-# $(ZT1)/osdep/Http.cpp \
-# $(ZT1)/osdep/OSUtils.cpp
+
# JNI Files
LOCAL_SRC_FILES += \
--
cgit v1.2.3
From 9ae49b5b85092ad3d6d9128a084c93f2a70661f9 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 13 Feb 2017 10:51:36 -0800
Subject: Update JNI with new root terminology
---
java/jni/ZT_jniutils.cpp | 8 ++++----
java/src/com/zerotier/sdk/PeerRole.java | 8 ++++----
2 files changed, 8 insertions(+), 8 deletions(-)
(limited to 'java')
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index e355271c..7bdc7611 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -182,11 +182,11 @@ jobject createPeerRole(JNIEnv *env, ZT_PeerRole role)
case ZT_PEER_ROLE_LEAF:
fieldName = "PEER_ROLE_LEAF";
break;
- case ZT_PEER_ROLE_UPSTREAM:
- fieldName = "PEER_ROLE_UPSTREAM";
+ case ZT_PEER_ROLE_MOON:
+ fieldName = "PEER_ROLE_MOON";
break;
- case ZT_PEER_ROLE_ROOT:
- fieldName = "PEER_ROLE_ROOTS";
+ case ZT_PEER_ROLE_PLANET:
+ fieldName = "PEER_ROLE_PLANET";
break;
}
diff --git a/java/src/com/zerotier/sdk/PeerRole.java b/java/src/com/zerotier/sdk/PeerRole.java
index f281c1b6..fce183d9 100644
--- a/java/src/com/zerotier/sdk/PeerRole.java
+++ b/java/src/com/zerotier/sdk/PeerRole.java
@@ -34,12 +34,12 @@ public enum PeerRole {
PEER_ROLE_LEAF,
/**
- * upstream node
+ * moon root
*/
- PEER_ROLE_UPSTREAM,
+ PEER_ROLE_MOON,
/**
- * root server
+ * planetary root
*/
- PEER_ROLE_ROOT
+ PEER_ROLE_PLANET
}
\ No newline at end of file
--
cgit v1.2.3
From 06c866ceb448dd41b2e7ec2eed353a5cbfc1ff79 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 23 Feb 2017 12:47:07 -0800
Subject: Android JNI fix
---
java/jni/Android.mk | 1 +
1 file changed, 1 insertion(+)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index 774c2015..ebd89376 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -13,6 +13,7 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/C25519.cpp \
$(ZT1)/node/Capability.cpp \
$(ZT1)/node/CertificateOfMembership.cpp \
+ $(ZT1)/node/CertificateOfOwnership.cpp \
$(ZT1)/node/Identity.cpp \
$(ZT1)/node/IncomingPacket.cpp \
$(ZT1)/node/InetAddress.cpp \
--
cgit v1.2.3
From 1520534660698698d9db064e1d9f7b3f0ae9913c Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Thu, 9 Mar 2017 17:48:40 -0800
Subject: fix some rediculousness in NDK-14
Apparently having -fPIC on the command line multiple times turns it back off
---
java/jni/Application.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'java')
diff --git a/java/jni/Application.mk b/java/jni/Application.mk
index 6950c0e6..19891cc8 100644
--- a/java/jni/Application.mk
+++ b/java/jni/Application.mk
@@ -1,5 +1,5 @@
# NDK_TOOLCHAIN_VERSION := clang3.5
-APP_STL := gnustl_static
-APP_CPPFLAGS := -O3 -fPIC -fPIE -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1
+APP_STL := c++_static
+APP_CPPFLAGS := -O3 -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1
APP_PLATFORM := android-14
APP_ABI := all
--
cgit v1.2.3
From 855361b5b88297eba3e62a9bdfa3e0933b962e81 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Tue, 28 Mar 2017 17:49:00 -0700
Subject: fix native end of JNI code for new thread data ptr
---
java/jni/com_zerotierone_sdk_Node.cpp | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index eb62d985..47bbc40e 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -98,6 +98,7 @@ namespace {
int VirtualNetworkConfigFunctionCallback(
ZT_Node *node,
void *userData,
+ void *threadData,
uint64_t nwid,
void **,
enum ZT_VirtualNetworkConfigOperation operation,
@@ -146,6 +147,7 @@ namespace {
void VirtualNetworkFrameFunctionCallback(ZT_Node *node,
void *userData,
+ void *threadData,
uint64_t nwid,
void**,
uint64_t sourceMac,
@@ -203,6 +205,7 @@ namespace {
void EventCallback(ZT_Node *node,
void *userData,
+ void *threadData,
enum ZT_Event event,
const void *data)
{
@@ -298,6 +301,7 @@ namespace {
long DataStoreGetFunction(ZT_Node *node,
void *userData,
+ void *threadData,
const char *objectName,
void *buffer,
unsigned long bufferSize,
@@ -371,6 +375,7 @@ namespace {
int DataStorePutFunction(ZT_Node *node,
void *userData,
+ void *threadData,
const char *objectName,
const void *buffer,
unsigned long bufferSize,
@@ -437,6 +442,7 @@ namespace {
int WirePacketSendFunction(ZT_Node *node,
void *userData,
+ void *threadData,
const struct sockaddr_storage *localAddress,
const struct sockaddr_storage *remoteAddress,
const void *buffer,
@@ -623,6 +629,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
ZT_ResultCode rc = ZT_Node_new(
&node,
ref,
+ NULL,
ref->callbacks,
(uint64_t)now);
@@ -731,6 +738,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame(
ZT_ResultCode rc = ZT_Node_processVirtualNetworkFrame(
node,
+ NULL,
now,
nwid,
sourceMac,
@@ -935,6 +943,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
ZT_ResultCode rc = ZT_Node_processWirePacket(
node,
+ NULL,
now,
&localAddress,
&remoteAddress,
@@ -983,7 +992,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processBackgroundTasks(
uint64_t now = (uint64_t)in_now;
uint64_t nextBackgroundTaskDeadline = 0;
- ZT_ResultCode rc = ZT_Node_processBackgroundTasks(node, now, &nextBackgroundTaskDeadline);
+ ZT_ResultCode rc = ZT_Node_processBackgroundTasks(node, NULL, now, &nextBackgroundTaskDeadline);
jlong *outDeadline = (jlong*)env->GetPrimitiveArrayCritical(out_nextBackgroundTaskDeadline, NULL);
outDeadline[0] = (jlong)nextBackgroundTaskDeadline;
@@ -1010,7 +1019,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_join(
uint64_t nwid = (uint64_t)in_nwid;
- ZT_ResultCode rc = ZT_Node_join(node, nwid, NULL);
+ ZT_ResultCode rc = ZT_Node_join(node, nwid, NULL, NULL);
return createResultObject(env, rc);
}
@@ -1033,7 +1042,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_leave(
uint64_t nwid = (uint64_t)in_nwid;
- ZT_ResultCode rc = ZT_Node_leave(node, nwid, NULL);
+ ZT_ResultCode rc = ZT_Node_leave(node, nwid, NULL, NULL);
return createResultObject(env, rc);
}
@@ -1063,7 +1072,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastSubscribe(
unsigned long multicastAdi = (unsigned long)in_multicastAdi;
ZT_ResultCode rc = ZT_Node_multicastSubscribe(
- node, nwid, multicastGroup, multicastAdi);
+ node, NULL, nwid, multicastGroup, multicastAdi);
return createResultObject(env, rc);
}
--
cgit v1.2.3
From de4b9e9a16eecab6b731c7b51cb2d08e112a3044 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 29 Mar 2017 12:52:29 -0700
Subject: Added path checking interface for Java
---
java/jni/com_zerotierone_sdk_Node.cpp | 178 +++++++++++++++++++++++++++++
java/src/com/zerotier/sdk/Node.java | 5 +-
java/src/com/zerotier/sdk/PathChecker.java | 45 ++++++++
3 files changed, 227 insertions(+), 1 deletion(-)
create mode 100644 java/src/com/zerotier/sdk/PathChecker.java
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 47bbc40e..307add39 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -56,6 +56,7 @@ namespace {
, eventListener(NULL)
, frameListener(NULL)
, configListener(NULL)
+ , pathChecker(NULL)
, callbacks(NULL)
{
callbacks = (ZT_Node_Callbacks*)malloc(sizeof(ZT_Node_Callbacks));
@@ -73,6 +74,7 @@ namespace {
env->DeleteGlobalRef(eventListener);
env->DeleteGlobalRef(frameListener);
env->DeleteGlobalRef(configListener);
+ env->DeleteGlobalRef(pathChecker);
free(callbacks);
callbacks = NULL;
@@ -90,6 +92,7 @@ namespace {
jobject eventListener;
jobject frameListener;
jobject configListener;
+ jobject pathChecker;
ZT_Node_Callbacks *callbacks;
};
@@ -487,6 +490,165 @@ namespace {
return retval;
}
+ int PathCheckFunction(ZT_Node *node,
+ void *userPtr,
+ void *threadPtr,
+ uint64_t address,
+ const struct sockaddr_storage *localAddress,
+ const struct sockaddr_storage *remoteAddress)
+ {
+ JniRef *ref = (JniRef*)userPtr;
+ assert(ref->node == node);
+
+ if(ref->pathChecker == NULL) {
+ return true;
+ }
+
+ JNIEnv *env = NULL;
+ ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+ jclass pathCheckerClass = env->GetObjectClass(ref->pathChecker);
+ if(pathCheckerClass == NULL)
+ {
+ LOGE("Couldn't find class for PathChecker instance");
+ return true;
+ }
+
+ jmethodID pathCheckCallbackMethod = lookup.findMethod(pathCheckerClass,
+ "onPathCheck", "(JLjava/net/InetSocketAddress;Ljava/net/InetSocketAddress;)Z");
+ if(pathCheckCallbackMethod == NULL)
+ {
+ LOGE("Couldn't find onPathCheck method implementation");
+ return true;
+ }
+
+ jobject localAddressObj = NULL;
+ jobject remoteAddressObj = NULL;
+
+ if(memcmp(localAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
+ {
+ localAddressObj = newInetSocketAddress(env, *localAddress);
+ }
+ if(memcmp(remoteAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
+ {
+ remoteAddressObj = newInetSocketAddress(env, *remoteAddress);
+ }
+
+ return env->CallBooleanMethod(ref->pathChecker, pathCheckCallbackMethod, address, localAddressObj, remoteAddressObj);
+ }
+
+ int PathLookupFunction(ZT_Node *node,
+ void *userPtr,
+ void *threadPtr,
+ uint64_t address,
+ int ss_family,
+ struct sockaddr_storage *result)
+ {
+ JniRef *ref = (JniRef*)userPtr;
+ assert(ref->node == node);
+
+ if(ref->pathChecker == NULL) {
+ return false;
+ }
+
+ JNIEnv *env = NULL;
+ ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+ jclass pathCheckerClass = env->GetObjectClass(ref->pathChecker);
+ if(pathCheckerClass == NULL)
+ {
+ LOGE("Couldn't find class for PathChecker instance");
+ return false;
+ }
+
+ jmethodID pathLookupMethod = lookup.findMethod(pathCheckerClass,
+ "onPathLookup", "(JI)Ljava/net/InetSocketAddress;");
+ if(pathLookupMethod == NULL) {
+ return false;
+ }
+
+ jobject sockAddressObject = env->CallObjectMethod(ref->pathChecker, pathLookupMethod, address, ss_family);
+ if(sockAddressObject == NULL)
+ {
+ LOGE("Unable to call onPathLookup implementation");
+ return false;
+ }
+
+ jclass inetSockAddressClass = env->GetObjectClass(sockAddressObject);
+ if(inetSockAddressClass == NULL)
+ {
+ LOGE("Unable to find InetSocketAddress class");
+ return false;
+ }
+
+ jmethodID getAddressMethod = lookup.findMethod(inetSockAddressClass, "getAddress", "()Ljava/net/InetAddress;");
+ if(getAddressMethod == NULL)
+ {
+ LOGE("Unable to find InetSocketAddress.getAddress() method");
+ return false;
+ }
+
+ jmethodID getPortMethod = lookup.findMethod(inetSockAddressClass, "getPort", "()I");
+ if(getPortMethod == NULL)
+ {
+ LOGE("Unable to find InetSocketAddress.getPort() method");
+ return false;
+ }
+
+ jint port = env->CallIntMethod(sockAddressObject, getPortMethod);
+ jobject addressObject = env->CallObjectMethod(sockAddressObject, getAddressMethod);
+
+ jclass inetAddressClass = lookup.findClass("java/net/InetAddress");
+ if(inetAddressClass == NULL)
+ {
+ LOGE("Unable to find InetAddress class");
+ return false;
+ }
+
+ getAddressMethod = lookup.findMethod(inetAddressClass, "getAddress", "()[B");
+ if(getAddressMethod == NULL)
+ {
+ LOGE("Unable to find InetAddress.getAddress() method");
+ return false;
+ }
+
+ jbyteArray addressBytes = (jbyteArray)env->CallObjectMethod(addressObject, getAddressMethod);
+ if(addressBytes == NULL)
+ {
+ LOGE("Unable to call InetAddress.getBytes()");
+ return false;
+ }
+
+ int addressSize = env->GetArrayLength(addressBytes);
+ if(addressSize == 4)
+ {
+ // IPV4
+ sockaddr_in *addr = (sockaddr_in*)result;
+ addr->sin_family = AF_INET;
+ addr->sin_port = htons(port);
+
+ void *data = env->GetPrimitiveArrayCritical(addressBytes, NULL);
+ memcpy(&addr->sin_addr, data, 4);
+ env->ReleasePrimitiveArrayCritical(addressBytes, data, 0);
+ }
+ else if (addressSize == 16)
+ {
+ // IPV6
+ sockaddr_in6 *addr = (sockaddr_in6*)result;
+ addr->sin6_family = AF_INET6;
+ addr->sin6_port = htons(port);
+ void *data = env->GetPrimitiveArrayCritical(addressBytes, NULL);
+ memcpy(&addr->sin6_addr, data, 16);
+ env->ReleasePrimitiveArrayCritical(addressBytes, data, 0);
+ }
+ else
+ {
+ return false;
+ }
+
+ return true;
+ }
+
typedef std::map NodeMap;
static NodeMap nodeMap;
ZeroTier::Mutex nodeMapMutex;
@@ -619,12 +781,28 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
}
ref->eventListener = env->NewGlobalRef(tmp);
+ fid = lookup.findField(
+ cls, "pathChecker", "Lcom/zerotier/sdk/PathChecker;");
+ if(fid == NULL)
+ {
+ return NULL;
+ }
+
+ tmp = env->GetObjectField(obj, fid);
+ if(tmp == NULL)
+ {
+ return NULL;
+ }
+ ref->pathChecker = env->NewGlobalRef(tmp);
+
ref->callbacks->dataStoreGetFunction = &DataStoreGetFunction;
ref->callbacks->dataStorePutFunction = &DataStorePutFunction;
ref->callbacks->wirePacketSendFunction = &WirePacketSendFunction;
ref->callbacks->virtualNetworkFrameFunction = &VirtualNetworkFrameFunctionCallback;
ref->callbacks->virtualNetworkConfigFunction = &VirtualNetworkConfigFunctionCallback;
ref->callbacks->eventCallback = &EventCallback;
+ ref->callbacks->pathCheckFunction = &PathCheckFunction;
+ ref->callbacks->pathLookupFunction = &PathLookupFunction;
ZT_ResultCode rc = ZT_Node_new(
&node,
diff --git a/java/src/com/zerotier/sdk/Node.java b/java/src/com/zerotier/sdk/Node.java
index 4bc6e184..7b111f74 100644
--- a/java/src/com/zerotier/sdk/Node.java
+++ b/java/src/com/zerotier/sdk/Node.java
@@ -74,6 +74,7 @@ public class Node {
private final EventListener eventListener;
private final VirtualNetworkFrameListener frameListener;
private final VirtualNetworkConfigListener configListener;
+ private final PathChecker pathChecker;
/**
* Create a new ZeroTier One node
@@ -95,7 +96,8 @@ public class Node {
PacketSender sender,
EventListener eventListener,
VirtualNetworkFrameListener frameListener,
- VirtualNetworkConfigListener configListener) throws NodeException
+ VirtualNetworkConfigListener configListener,
+ PathChecker pathChecker) throws NodeException
{
this.nodeId = now;
@@ -105,6 +107,7 @@ public class Node {
this.eventListener = eventListener;
this.frameListener = frameListener;
this.configListener = configListener;
+ this.pathChecker = pathChecker;
ResultCode rc = node_init(now);
if(rc != ResultCode.RESULT_OK)
diff --git a/java/src/com/zerotier/sdk/PathChecker.java b/java/src/com/zerotier/sdk/PathChecker.java
new file mode 100644
index 00000000..3e02f112
--- /dev/null
+++ b/java/src/com/zerotier/sdk/PathChecker.java
@@ -0,0 +1,45 @@
+/*
+ * ZeroTier One - Network Virtualization Everywhere
+ * Copyright (C) 2011-2017 ZeroTier, Inc. https://www.zerotier.com/
+ */
+
+package com.zerotier.sdk;
+
+import java.net.InetSocketAddress;
+
+public interface PathChecker {
+ /**
+ * Callback to check whether a path should be used for ZeroTier traffic
+ *
+ * This function must return true if the path should be used.
+ *
+ * If no path check function is specified, ZeroTier will still exclude paths
+ * that overlap with ZeroTier-assigned and managed IP address blocks. But the
+ * use of a path check function is recommended to ensure that recursion does
+ * not occur in cases where addresses are assigned by the OS or managed by
+ * an out of band mechanism like DHCP. The path check function should examine
+ * all configured ZeroTier interfaces and check to ensure that the supplied
+ * addresses will not result in ZeroTier traffic being sent over a ZeroTier
+ * interface (recursion).
+ *
+ * Obviously this is not required in configurations where this can't happen,
+ * such as network containers or embedded.
+ *
+ * @param ztAddress ZeroTier address or 0 for none/any
+ * @param localAddress Local interface address
+ * @param remoteAddress remote address
+ */
+ boolean onPathCheck(long ztAddress, InetSocketAddress localAddress, InetSocketAddress remoteAddress);
+
+ /**
+ * Function to get physical addresses for ZeroTier peers
+ *
+ * If provided this function will be occasionally called to get physical
+ * addresses that might be tried to reach a ZeroTier address.
+ *
+ * @param ztAddress ZeroTier address (least significant 40 bits)
+ * @param ss_family desired address family or -1 for any
+ * @return address and port of ztAddress or null
+ */
+ InetSocketAddress onPathLookup(long ztAddress, int ss_family);
+}
--
cgit v1.2.3
From 1c5fdb8a0a20654cdec57347647034357e0f92a4 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 29 Mar 2017 13:28:06 -0700
Subject: fix path checker initialization
---
java/jni/com_zerotierone_sdk_Node.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 307add39..ac0453ba 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -785,15 +785,15 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
cls, "pathChecker", "Lcom/zerotier/sdk/PathChecker;");
if(fid == NULL)
{
+ LOGE("no path checker?");
return NULL;
}
tmp = env->GetObjectField(obj, fid);
- if(tmp == NULL)
+ if(tmp != NULL)
{
- return NULL;
+ ref->pathChecker = env->NewGlobalRef(tmp);
}
- ref->pathChecker = env->NewGlobalRef(tmp);
ref->callbacks->dataStoreGetFunction = &DataStoreGetFunction;
ref->callbacks->dataStorePutFunction = &DataStorePutFunction;
--
cgit v1.2.3
From 5f611dad51f8244b59a63ecdf48a2126c5995d74 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 29 Mar 2017 13:29:02 -0700
Subject: added orbit/deorbit methods to java Node implementation
---
java/jni/com_zerotierone_sdk_Node.cpp | 48 +++++++++++++++++++++++++++++++++++
java/src/com/zerotier/sdk/Node.java | 38 +++++++++++++++++++++++++++
2 files changed, 86 insertions(+)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index ac0453ba..defbe7f2 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -1285,6 +1285,54 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastUnsubscribe(
return createResultObject(env, rc);
}
+/*
+ * Class: com_zerotier_sdk_Node
+ * Method: orbit
+ * Signature: (JJJ)Lcom/zerotier/sdk/ResultCode;
+ */
+JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_orbit(
+ JNIEnv *env, jobject obj,
+ jlong id,
+ jlong in_moonWorldId,
+ jlong in_moonSeed)
+{
+ uint64_t nodeId = (uint64_t)id;
+ ZT_Node *node = findNode(nodeId);
+ if(node == NULL)
+ {
+ return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL);
+ }
+
+ uint64_t moonWorldId = (uint64_t)in_moonWorldId;
+ uint64_t moonSeed = (uint64_t)in_moonSeed;
+
+ ZT_ResultCode rc = ZT_Node_orbit(node, NULL, moonWorldId, moonSeed);
+ return createResultObject(env, rc);
+}
+
+/*
+ * Class: com_zerotier_sdk_Node
+ * Method: deorbit
+ * Signature: (JJ)L/com/zerotier/sdk/ResultCode;
+ */
+JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_deorbit(
+ JNIEnv *env, jobject obj,
+ jlong id,
+ jlong in_moonWorldId)
+{
+ uint64_t nodeId = (uint64_t)id;
+ ZT_Node *node = findNode(nodeId);
+ if(node == NULL)
+ {
+ return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL);
+ }
+
+ uint64_t moonWorldId = (uint64_t)in_moonWorldId;
+
+ ZT_ResultCode rc = ZT_Node_deorbit(node, NULL, moonWorldId);
+ return createResultObject(env, rc);
+}
+
/*
* Class: com_zerotier_sdk_Node
* Method: address
diff --git a/java/src/com/zerotier/sdk/Node.java b/java/src/com/zerotier/sdk/Node.java
index 7b111f74..8e7d44e7 100644
--- a/java/src/com/zerotier/sdk/Node.java
+++ b/java/src/com/zerotier/sdk/Node.java
@@ -89,6 +89,7 @@ public class Node {
* @param eventListener User written instance of the {@link EventListener} interface to receive status updates and non-fatal error notices. This instance must be unique per Node object.
* @param frameListener
* @param configListener User written instance of the {@link VirtualNetworkConfigListener} interface to be called when virtual LANs are created, deleted, or their config parameters change. This instance must be unique per Node object.
+ * @param pathChecker User written instance of the {@link PathChecker} interface. Not required and can be null.
*/
public Node(long now,
DataStoreGetListener getListener,
@@ -321,6 +322,34 @@ public class Node {
return multicastUnsubscribe(nodeId, nwid, multicastGroup, multicastAdi);
}
+ /**
+ * Add or update a moon
+ *
+ * Moons are persisted in the data store in moons.d/, so this can persist
+ * across invocations if the contents of moon.d are scanned and orbit is
+ * called for each on startup.
+ *
+ * @param moonWorldId Moon's world ID
+ * @param moonSeed If non-zero, the ZeroTier address of any member of the moon to query for moon definition
+ * @return Error if moon was invalid or failed to be added
+ */
+ public ResultCode orbit(
+ long moonWorldId,
+ long moonSeed) {
+ return orbit(nodeId, moonWorldId, moonSeed);
+ }
+
+ /**
+ * Remove a moon (does nothing if not present)
+ *
+ * @param moonWorldId World ID of moon to remove
+ * @return Error if anything bad happened
+ */
+ public ResultCode deorbit(
+ long moonWorldId) {
+ return deorbit(nodeId, moonWorldId);
+ }
+
/**
* Get this node's 40-bit ZeroTier address
*
@@ -423,6 +452,15 @@ public class Node {
long multicastGroup,
long multicastAdi);
+ private native ResultCode orbit(
+ long nodeId,
+ long moonWorldId,
+ long moonSeed);
+
+ private native ResultCode deorbit(
+ long nodeId,
+ long moonWorldId);
+
private native long address(long nodeId);
private native NodeStatus status(long nodeId);
--
cgit v1.2.3
From 952834f7f365206c1a1a349adfefc313f00060bb Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Tue, 23 May 2017 14:56:29 -0700
Subject: Let Android Studio determine debug/release build
---
java/jni/Application.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'java')
diff --git a/java/jni/Application.mk b/java/jni/Application.mk
index 19891cc8..f5a87ac7 100644
--- a/java/jni/Application.mk
+++ b/java/jni/Application.mk
@@ -1,5 +1,5 @@
# NDK_TOOLCHAIN_VERSION := clang3.5
APP_STL := c++_static
-APP_CPPFLAGS := -O3 -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1
+APP_CPPFLAGS := -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1
APP_PLATFORM := android-14
APP_ABI := all
--
cgit v1.2.3
From d8f1c3dff73277000b1c4fe0f8e6dc169576a880 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 12 Jul 2017 11:34:53 -0700
Subject: Update JNI code to reflect new ZeroTier API
---
java/jni/Android.mk | 1 +
java/jni/com_zerotierone_sdk_Node.cpp | 420 +++++++++------------
java/jni/com_zerotierone_sdk_Node.h | 2 +-
.../src/com/zerotier/sdk/DataStoreGetListener.java | 8 +-
java/src/com/zerotier/sdk/PacketSender.java | 4 +-
java/src/com/zerotier/sdk/PathChecker.java | 4 +-
6 files changed, 193 insertions(+), 246 deletions(-)
(limited to 'java')
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index ebd89376..3c5b555c 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -34,6 +34,7 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/Switch.cpp \
$(ZT1)/node/Tag.cpp \
$(ZT1)/node/Topology.cpp \
+ $(ZT1)/node/Trace.cpp \
$(ZT1)/node/Utils.cpp
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index defbe7f2..94466db1 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -210,107 +210,202 @@ namespace {
void *userData,
void *threadData,
enum ZT_Event event,
- const void *data)
- {
+ const void *data) {
LOGV("EventCallback");
- JniRef *ref = (JniRef*)userData;
- if(ref->node != node && event != ZT_EVENT_UP)
- {
+ JniRef *ref = (JniRef *) userData;
+ if (ref->node != node && event != ZT_EVENT_UP) {
LOGE("Nodes not equal. ref->node %p, node %p. Event: %d", ref->node, node, event);
return;
}
JNIEnv *env = NULL;
- ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+ ref->jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
jclass eventListenerClass = env->GetObjectClass(ref->eventListener);
- if(eventListenerClass == NULL)
- {
+ if (eventListenerClass == NULL) {
LOGE("Couldn't class for EventListener instance");
return;
}
jmethodID onEventMethod = lookup.findMethod(eventListenerClass,
- "onEvent", "(Lcom/zerotier/sdk/Event;)V");
- if(onEventMethod == NULL)
- {
+ "onEvent", "(Lcom/zerotier/sdk/Event;)V");
+ if (onEventMethod == NULL) {
LOGE("Couldn't find onEvent method");
return;
}
jmethodID onTraceMethod = lookup.findMethod(eventListenerClass,
- "onTrace", "(Ljava/lang/String;)V");
- if(onTraceMethod == NULL)
- {
+ "onTrace", "(Ljava/lang/String;)V");
+ if (onTraceMethod == NULL) {
LOGE("Couldn't find onTrace method");
return;
}
jobject eventObject = createEvent(env, event);
- if(eventObject == NULL)
- {
+ if (eventObject == NULL) {
return;
}
- switch(event)
- {
- case ZT_EVENT_UP:
- {
- LOGD("Event Up");
- env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
- break;
+ switch (event) {
+ case ZT_EVENT_UP: {
+ LOGD("Event Up");
+ env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ break;
+ }
+ case ZT_EVENT_OFFLINE: {
+ LOGD("Event Offline");
+ env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ break;
+ }
+ case ZT_EVENT_ONLINE: {
+ LOGD("Event Online");
+ env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ break;
+ }
+ case ZT_EVENT_DOWN: {
+ LOGD("Event Down");
+ env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ break;
+ }
+ case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: {
+ LOGV("Identity Collision");
+ // call onEvent()
+ env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ }
+ break;
+ case ZT_EVENT_TRACE: {
+ LOGV("Trace Event");
+ // call onTrace()
+ if (data != NULL) {
+ const char *message = (const char *) data;
+ jstring messageStr = env->NewStringUTF(message);
+ env->CallVoidMethod(ref->eventListener, onTraceMethod, messageStr);
+ }
+ }
+ break;
+ case ZT_EVENT_USER_MESSAGE:
+ break;
}
- case ZT_EVENT_OFFLINE:
- {
- LOGD("Event Offline");
- env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
- break;
+ }
+
+ void StatePutFunction(
+ ZT_Node *node,
+ void *userData,
+ void *threadData,
+ enum ZT_StateObjectType type,
+ const uint64_t id[2],
+ const void *buffer,
+ int bufferLength) {
+ char p[4096] = {0};
+ bool secure = false;
+ switch (type) {
+ case ZT_STATE_OBJECT_IDENTITY_PUBLIC:
+ snprintf(p, sizeof(p), "identity.public");
+ break;
+ case ZT_STATE_OBJECT_IDENTITY_SECRET:
+ snprintf(p, sizeof(p), "identity.secret");
+ secure = true;
+ break;
+ case ZT_STATE_OBJECT_PLANET:
+ snprintf(p, sizeof(p), "planet");
+ break;
+ case ZT_STATE_OBJECT_MOON:
+ snprintf(p, sizeof(p), "moons.d/%.16llx", (unsigned long long)id[0]);
+ break;
+ case ZT_STATE_OBJECT_NETWORK_CONFIG:
+ snprintf(p, sizeof(p), "networks.d/%.16llx", (unsigned long long)id[0]);
+ break;
+ case ZT_STATE_OBJECT_PEER:
+ snprintf(p, sizeof(p), "peers.d/%.10llx", (unsigned long long)id[0]);
+ break;
+ default:
+ return;
}
- case ZT_EVENT_ONLINE:
+
+ JniRef *ref = (JniRef*)userData;
+ JNIEnv *env = NULL;
+ ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+
+ jclass dataStorePutClass = env->GetObjectClass(ref->dataStorePutListener);
+ if (dataStorePutClass == NULL)
{
- LOGD("Event Online");
- env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
- break;
+ LOGE("Couldn't find class for DataStorePutListener instance");
+ return;
}
- case ZT_EVENT_DOWN:
+
+ jmethodID dataStorePutCallbackMethod = lookup.findMethod(
+ dataStorePutClass,
+ "onDataStorePut",
+ "(Ljava/lang/String;[BZ)I");
+ if(dataStorePutCallbackMethod == NULL)
{
- LOGD("Event Down");
- env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
- break;
+ LOGE("Couldn't find onDataStorePut method");
+ return;
}
- case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION:
+
+ jmethodID deleteMethod = lookup.findMethod(dataStorePutClass,
+ "onDelete", "(Ljava/lang/String;)I");
+ if(deleteMethod == NULL)
{
- LOGV("Identity Collision");
- // call onEvent()
- env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject);
+ LOGE("Couldn't find onDelete method");
+ return;
}
- break;
- case ZT_EVENT_TRACE:
- {
- LOGV("Trace Event");
- // call onTrace()
- if(data != NULL)
+
+ jstring nameStr = env->NewStringUTF(p);
+
+ if (bufferLength >= 0) {
+ LOGD("JNI: Write file: %s", p);
+ // set operation
+ jbyteArray bufferObj = env->NewByteArray(bufferLength);
+ if(env->ExceptionCheck() || bufferObj == NULL)
{
- const char* message = (const char*)data;
- jstring messageStr = env->NewStringUTF(message);
- env->CallVoidMethod(ref->eventListener, onTraceMethod, messageStr);
+ LOGE("Error creating byte array buffer!");
+ return;
}
- }
- break;
- case ZT_EVENT_USER_MESSAGE:
- break;
+
+ env->SetByteArrayRegion(bufferObj, 0, bufferLength, (jbyte*)buffer);
+
+ env->CallIntMethod(ref->dataStorePutListener,
+ dataStorePutCallbackMethod,
+ nameStr, bufferObj, secure);
+ } else {
+ LOGD("JNI: Delete file: %s", p);
+ env->CallIntMethod(ref->dataStorePutListener, deleteMethod, nameStr);
}
}
- long DataStoreGetFunction(ZT_Node *node,
- void *userData,
- void *threadData,
- const char *objectName,
- void *buffer,
- unsigned long bufferSize,
- unsigned long bufferIndex,
- unsigned long *out_objectSize)
- {
+ int StateGetFunction(
+ ZT_Node *node,
+ void *userData,
+ void *threadData,
+ ZT_StateObjectType type,
+ const uint64_t id[2],
+ void *buffer,
+ unsigned int bufferLength) {
+ char p[4096] = {0};
+ switch (type) {
+ case ZT_STATE_OBJECT_IDENTITY_PUBLIC:
+ snprintf(p, sizeof(p), "identity.public");
+ break;
+ case ZT_STATE_OBJECT_IDENTITY_SECRET:
+ snprintf(p, sizeof(p), "identity.secret");
+ break;
+ case ZT_STATE_OBJECT_PLANET:
+ snprintf(p, sizeof(p), "planet");
+ break;
+ case ZT_STATE_OBJECT_MOON:
+ snprintf(p, sizeof(p), "moons.d/%.16llx", (unsigned long long)id[0]);
+ break;
+ case ZT_STATE_OBJECT_NETWORK_CONFIG:
+ snprintf(p, sizeof(p), "networks.d/%.16llx", (unsigned long long)id[0]);
+ break;
+ case ZT_STATE_OBJECT_PEER:
+ snprintf(p, sizeof(p), "peers.d/%.10llx", (unsigned long long)id[0]);
+ break;
+ default:
+ return -1;
+ }
+
JniRef *ref = (JniRef*)userData;
JNIEnv *env = NULL;
ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
@@ -323,136 +418,48 @@ namespace {
}
jmethodID dataStoreGetCallbackMethod = lookup.findMethod(
- dataStoreGetClass,
- "onDataStoreGet",
- "(Ljava/lang/String;[BJ[J)J");
+ dataStoreGetClass,
+ "onDataStoreGet",
+ "(Ljava/lang/String;[B)J");
if(dataStoreGetCallbackMethod == NULL)
{
LOGE("Couldn't find onDataStoreGet method");
return -2;
}
- jstring nameStr = env->NewStringUTF(objectName);
+ jstring nameStr = env->NewStringUTF(p);
if(nameStr == NULL)
{
LOGE("Error creating name string object");
return -2; // out of memory
}
- jbyteArray bufferObj = env->NewByteArray(bufferSize);
+ jbyteArray bufferObj = env->NewByteArray(bufferLength);
if(bufferObj == NULL)
{
- LOGE("Error creating byte[] buffer of size: %lu", bufferSize);
+ LOGE("Error creating byte[] buffer of size: %u", bufferLength);
return -2;
}
- jlongArray objectSizeObj = env->NewLongArray(1);
- if(objectSizeObj == NULL)
- {
- LOGE("Error creating long[1] array for actual object size");
- return -2; // couldn't create long[1] array
- }
-
- LOGV("Calling onDataStoreGet(%s, %p, %lu, %p)",
- objectName, buffer, bufferIndex, objectSizeObj);
-
- long retval = (long)env->CallLongMethod(
- ref->dataStoreGetListener, dataStoreGetCallbackMethod,
- nameStr, bufferObj, (jlong)bufferIndex, objectSizeObj);
+ LOGV("Calling onDataStoreGet(%s, %p)", p, buffer);
- if(retval > 0)
- {
- void *data = env->GetPrimitiveArrayCritical(bufferObj, NULL);
- memcpy(buffer, data, retval);
- env->ReleasePrimitiveArrayCritical(bufferObj, data, 0);
-
- jlong *objSize = (jlong*)env->GetPrimitiveArrayCritical(objectSizeObj, NULL);
- *out_objectSize = (unsigned long)objSize[0];
- env->ReleasePrimitiveArrayCritical(objectSizeObj, objSize, 0);
- }
-
- LOGV("Out Object Size: %lu", *out_objectSize);
-
- return retval;
- }
-
- int DataStorePutFunction(ZT_Node *node,
- void *userData,
- void *threadData,
- const char *objectName,
- const void *buffer,
- unsigned long bufferSize,
- int secure)
- {
- JniRef *ref = (JniRef*)userData;
- JNIEnv *env = NULL;
- ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
-
-
- jclass dataStorePutClass = env->GetObjectClass(ref->dataStorePutListener);
- if(dataStorePutClass == NULL)
- {
- LOGE("Couldn't find class for DataStorePutListener instance");
- return -1;
- }
-
- jmethodID dataStorePutCallbackMethod = lookup.findMethod(
- dataStorePutClass,
- "onDataStorePut",
- "(Ljava/lang/String;[BZ)I");
- if(dataStorePutCallbackMethod == NULL)
- {
- LOGE("Couldn't find onDataStorePut method");
- return -2;
- }
-
- jmethodID deleteMethod = lookup.findMethod(dataStorePutClass,
- "onDelete", "(Ljava/lang/String;)I");
- if(deleteMethod == NULL)
- {
- LOGE("Couldn't find onDelete method");
- return -3;
- }
-
- jstring nameStr = env->NewStringUTF(objectName);
-
- if(buffer == NULL)
- {
- LOGD("JNI: Delete file: %s", objectName);
- // delete operation
- return env->CallIntMethod(
- ref->dataStorePutListener, deleteMethod, nameStr);
- }
- else
- {
- LOGD("JNI: Write file: %s", objectName);
- // set operation
- jbyteArray bufferObj = env->NewByteArray(bufferSize);
- if(env->ExceptionCheck() || bufferObj == NULL)
- {
- LOGE("Error creating byte array buffer!");
- return -4;
- }
-
- env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer);
- bool bsecure = secure != 0;
-
- return env->CallIntMethod(ref->dataStorePutListener,
- dataStorePutCallbackMethod,
- nameStr, bufferObj, bsecure);
- }
+ return (int)env->CallLongMethod(
+ ref->dataStoreGetListener,
+ dataStoreGetCallbackMethod,
+ nameStr,
+ bufferObj);
}
int WirePacketSendFunction(ZT_Node *node,
void *userData,
void *threadData,
- const struct sockaddr_storage *localAddress,
+ int64_t localSocket,
const struct sockaddr_storage *remoteAddress,
const void *buffer,
unsigned int bufferSize,
unsigned int ttl)
{
- LOGV("WirePacketSendFunction(%p, %p, %p, %d)", localAddress, remoteAddress, buffer, bufferSize);
+ LOGV("WirePacketSendFunction(%ld, %p, %p, %d)", localSocket, remoteAddress, buffer, bufferSize);
JniRef *ref = (JniRef*)userData;
assert(ref->node == node);
@@ -468,23 +475,17 @@ namespace {
}
jmethodID packetSenderCallbackMethod = lookup.findMethod(packetSenderClass,
- "onSendPacketRequested", "(Ljava/net/InetSocketAddress;Ljava/net/InetSocketAddress;[BI)I");
+ "onSendPacketRequested", "(JLjava/net/InetSocketAddress;[BI)I");
if(packetSenderCallbackMethod == NULL)
{
LOGE("Couldn't find onSendPacketRequested method");
return -2;
}
- jobject localAddressObj = NULL;
- if(memcmp(localAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
- {
- localAddressObj = newInetSocketAddress(env, *localAddress);
- }
-
jobject remoteAddressObj = newInetSocketAddress(env, *remoteAddress);
jbyteArray bufferObj = env->NewByteArray(bufferSize);
env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer);
- int retval = env->CallIntMethod(ref->packetSender, packetSenderCallbackMethod, localAddressObj, remoteAddressObj, bufferObj);
+ int retval = env->CallIntMethod(ref->packetSender, packetSenderCallbackMethod, localSocket, remoteAddressObj, bufferObj);
LOGV("JNI Packet Sender returned: %d", retval);
return retval;
@@ -494,7 +495,7 @@ namespace {
void *userPtr,
void *threadPtr,
uint64_t address,
- const struct sockaddr_storage *localAddress,
+ int64_t localSocket,
const struct sockaddr_storage *remoteAddress)
{
JniRef *ref = (JniRef*)userPtr;
@@ -515,26 +516,22 @@ namespace {
}
jmethodID pathCheckCallbackMethod = lookup.findMethod(pathCheckerClass,
- "onPathCheck", "(JLjava/net/InetSocketAddress;Ljava/net/InetSocketAddress;)Z");
+ "onPathCheck", "(JJLjava/net/InetSocketAddress;)Z");
if(pathCheckCallbackMethod == NULL)
{
LOGE("Couldn't find onPathCheck method implementation");
return true;
}
- jobject localAddressObj = NULL;
+ struct sockaddr_storage nullAddress = {0};
jobject remoteAddressObj = NULL;
- if(memcmp(localAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
- {
- localAddressObj = newInetSocketAddress(env, *localAddress);
- }
- if(memcmp(remoteAddress, &ZT_SOCKADDR_NULL, sizeof(sockaddr_storage)) != 0)
+ if(memcmp(remoteAddress, &nullAddress, sizeof(sockaddr_storage)) != 0)
{
remoteAddressObj = newInetSocketAddress(env, *remoteAddress);
}
- return env->CallBooleanMethod(ref->pathChecker, pathCheckCallbackMethod, address, localAddressObj, remoteAddressObj);
+ return env->CallBooleanMethod(ref->pathChecker, pathCheckCallbackMethod, address, localSocket, remoteAddressObj);
}
int PathLookupFunction(ZT_Node *node,
@@ -795,8 +792,8 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
ref->pathChecker = env->NewGlobalRef(tmp);
}
- ref->callbacks->dataStoreGetFunction = &DataStoreGetFunction;
- ref->callbacks->dataStorePutFunction = &DataStorePutFunction;
+ ref->callbacks->stateGetFunction = &StateGetFunction;
+ ref->callbacks->statePutFunction = &StatePutFunction;
ref->callbacks->wirePacketSendFunction = &WirePacketSendFunction;
ref->callbacks->virtualNetworkFrameFunction = &VirtualNetworkFrameFunctionCallback;
ref->callbacks->virtualNetworkConfigFunction = &VirtualNetworkConfigFunctionCallback;
@@ -937,13 +934,13 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame(
/*
* Class: com_zerotier_sdk_Node
* Method: processWirePacket
- * Signature: (JJLjava/net/InetSocketAddress;I[B[J)Lcom/zerotier/sdk/ResultCode;
+ * Signature: (JJJLjava/net/InetSocketAddress;I[B[J)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
JNIEnv *env, jobject obj,
jlong id,
jlong in_now,
- jobject in_localAddress,
+ jlong in_localSocket,
jobject in_remoteAddress,
jbyteArray in_packetData,
jlongArray out_nextBackgroundTaskDeadline)
@@ -957,7 +954,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL);
}
- unsigned int nbtd_len = env->GetArrayLength(out_nextBackgroundTaskDeadline);
+ unsigned int nbtd_len = (unsigned int)env->GetArrayLength(out_nextBackgroundTaskDeadline);
if(nbtd_len < 1)
{
LOGE("nbtd_len < 1");
@@ -992,12 +989,6 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
jmethodID inetSockGetAddressMethod = lookup.findMethod(
InetSocketAddressClass, "getAddress", "()Ljava/net/InetAddress;");
- jobject localAddrObj = NULL;
- if(in_localAddress != NULL)
- {
- localAddrObj = env->CallObjectMethod(in_localAddress, inetSockGetAddressMethod);
- }
-
jobject remoteAddrObject = env->CallObjectMethod(in_remoteAddress, inetSockGetAddressMethod);
if(remoteAddrObject == NULL)
@@ -1034,47 +1025,6 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
unsigned int addrSize = env->GetArrayLength(remoteAddressArray);
- sockaddr_storage localAddress = {};
-
- if(localAddrObj == NULL)
- {
- localAddress = ZT_SOCKADDR_NULL;
- }
- else
- {
- int localPort = env->CallIntMethod(in_localAddress, inetSock_getPort);
- jbyteArray localAddressArray = (jbyteArray)env->CallObjectMethod(localAddrObj, getAddressMethod);
- if(localAddressArray != NULL)
- {
-
- unsigned int localAddrSize = env->GetArrayLength(localAddressArray);
- jbyte *addr = (jbyte*)env->GetPrimitiveArrayCritical(localAddressArray, NULL);
-
- if(localAddrSize == 16)
- {
- sockaddr_in6 ipv6 = {};
- ipv6.sin6_family = AF_INET6;
- ipv6.sin6_port = htons(localPort);
- memcpy(ipv6.sin6_addr.s6_addr, addr, 16);
- memcpy(&localAddress, &ipv6, sizeof(sockaddr_in6));
- }
- else if(localAddrSize)
- {
- // IPV4 address
- sockaddr_in ipv4 = {};
- ipv4.sin_family = AF_INET;
- ipv4.sin_port = htons(localPort);
- memcpy(&ipv4.sin_addr, addr, 4);
- memcpy(&localAddress, &ipv4, sizeof(sockaddr_in));
- }
- else
- {
- localAddress = ZT_SOCKADDR_NULL;
- }
- env->ReleasePrimitiveArrayCritical(localAddressArray, addr, 0);
- }
- }
-
// get the address bytes
jbyte *addr = (jbyte*)env->GetPrimitiveArrayCritical(remoteAddressArray, NULL);
sockaddr_storage remoteAddress = {};
@@ -1106,7 +1056,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
}
env->ReleasePrimitiveArrayCritical(remoteAddressArray, addr, 0);
- unsigned int packetLength = env->GetArrayLength(in_packetData);
+ unsigned int packetLength = (unsigned int)env->GetArrayLength(in_packetData);
if(packetLength == 0)
{
LOGE("Empty packet?!?");
@@ -1123,7 +1073,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket(
node,
NULL,
now,
- &localAddress,
+ in_localSocket,
&remoteAddress,
localData,
packetLength,
diff --git a/java/jni/com_zerotierone_sdk_Node.h b/java/jni/com_zerotierone_sdk_Node.h
index 7c1011ab..8487d8af 100644
--- a/java/jni/com_zerotierone_sdk_Node.h
+++ b/java/jni/com_zerotierone_sdk_Node.h
@@ -37,7 +37,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame
* Signature: (JJLjava/net/InetSockAddress;Ljava/net/InetSockAddress;[B[J)Lcom/zerotier/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket
- (JNIEnv *, jobject, jlong, jlong, jobject, jobject, jbyteArray, jlongArray);
+ (JNIEnv *, jobject, jlong, jlong, jlong, jobject, jbyteArray, jlongArray);
/*
* Class: com_zerotier_sdk_Node
diff --git a/java/src/com/zerotier/sdk/DataStoreGetListener.java b/java/src/com/zerotier/sdk/DataStoreGetListener.java
index b525be63..317511e0 100644
--- a/java/src/com/zerotier/sdk/DataStoreGetListener.java
+++ b/java/src/com/zerotier/sdk/DataStoreGetListener.java
@@ -46,13 +46,9 @@ public interface DataStoreGetListener {
*
* @param name Name of the object in the data store
* @param out_buffer buffer to put the object in
- * @param bufferIndex index in the object to start reading
- * @param out_objectSize long[1] to be set to the actual size of the object if it exists.
- * @return the actual number of bytes read.
+ * @return size of the object
*/
public long onDataStoreGet(
String name,
- byte[] out_buffer,
- long bufferIndex,
- long[] out_objectSize);
+ byte[] out_buffer);
}
diff --git a/java/src/com/zerotier/sdk/PacketSender.java b/java/src/com/zerotier/sdk/PacketSender.java
index 22893ec7..06ec01bc 100644
--- a/java/src/com/zerotier/sdk/PacketSender.java
+++ b/java/src/com/zerotier/sdk/PacketSender.java
@@ -37,13 +37,13 @@ public interface PacketSender {
* on failure. Note that success does not (of course) guarantee packet
* delivery. It only means that the packet appears to have been sent.
*
- * @param localAddr {@link InetSocketAddress} to send from. Set to null if not specified.
+ * @param localSocket socket file descriptor to send from. Set to -1 if not specified.
* @param remoteAddr {@link InetSocketAddress} to send to
* @param packetData data to send
* @return 0 on success, any error code on failure.
*/
public int onSendPacketRequested(
- InetSocketAddress localAddr,
+ long localSocket,
InetSocketAddress remoteAddr,
byte[] packetData,
int ttl);
diff --git a/java/src/com/zerotier/sdk/PathChecker.java b/java/src/com/zerotier/sdk/PathChecker.java
index 3e02f112..6bf31df2 100644
--- a/java/src/com/zerotier/sdk/PathChecker.java
+++ b/java/src/com/zerotier/sdk/PathChecker.java
@@ -26,10 +26,10 @@ public interface PathChecker {
* such as network containers or embedded.
*
* @param ztAddress ZeroTier address or 0 for none/any
- * @param localAddress Local interface address
+ * @param localSocket Local interface socket. -1 if unspecified
* @param remoteAddress remote address
*/
- boolean onPathCheck(long ztAddress, InetSocketAddress localAddress, InetSocketAddress remoteAddress);
+ boolean onPathCheck(long ztAddress, long localSocket, InetSocketAddress remoteAddress);
/**
* Function to get physical addresses for ZeroTier peers
--
cgit v1.2.3
From 512c3af4eabaa085aca1c8b3dfdbcdd383135b9a Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 12 Jul 2017 13:12:45 -0700
Subject: fix packet sending functions
---
java/jni/com_zerotierone_sdk_Node.cpp | 15 +++++++++++++--
java/src/com/zerotier/sdk/Node.java | 6 +++---
2 files changed, 16 insertions(+), 5 deletions(-)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 94466db1..4d0dcff9 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -443,11 +443,22 @@ namespace {
LOGV("Calling onDataStoreGet(%s, %p)", p, buffer);
- return (int)env->CallLongMethod(
+ int retval = (int)env->CallLongMethod(
ref->dataStoreGetListener,
dataStoreGetCallbackMethod,
nameStr,
bufferObj);
+
+ LOGV("onDataStoreGet returned %d", retval);
+
+ if(retval > 0)
+ {
+ void *data = env->GetPrimitiveArrayCritical(bufferObj, NULL);
+ memcpy(buffer, data, retval);
+ env->ReleasePrimitiveArrayCritical(bufferObj, data, 0);
+ }
+
+ return retval;
}
int WirePacketSendFunction(ZT_Node *node,
@@ -459,7 +470,7 @@ namespace {
unsigned int bufferSize,
unsigned int ttl)
{
- LOGV("WirePacketSendFunction(%ld, %p, %p, %d)", localSocket, remoteAddress, buffer, bufferSize);
+ LOGV("WirePacketSendFunction(%lld, %p, %p, %d)", (long long)localSocket, remoteAddress, buffer, bufferSize);
JniRef *ref = (JniRef*)userData;
assert(ref->node == node);
diff --git a/java/src/com/zerotier/sdk/Node.java b/java/src/com/zerotier/sdk/Node.java
index 8e7d44e7..ef6ac9d2 100644
--- a/java/src/com/zerotier/sdk/Node.java
+++ b/java/src/com/zerotier/sdk/Node.java
@@ -173,12 +173,12 @@ public class Node {
*/
public ResultCode processWirePacket(
long now,
- InetSocketAddress localAddress,
+ long localSocket,
InetSocketAddress remoteAddress,
byte[] packetData,
long[] nextBackgroundTaskDeadline) {
return processWirePacket(
- nodeId, now, localAddress, remoteAddress, packetData,
+ nodeId, now, localSocket, remoteAddress, packetData,
nextBackgroundTaskDeadline);
}
@@ -426,7 +426,7 @@ public class Node {
private native ResultCode processWirePacket(
long nodeId,
long now,
- InetSocketAddress localAddress,
+ long localSocket,
InetSocketAddress remoteAddress,
byte[] packetData,
long[] nextBackgroundTaskDeadline);
--
cgit v1.2.3
From 69ae35494e86cbee83dbfdb166a14100f99e3010 Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Wed, 12 Jul 2017 13:36:08 -0700
Subject: put the correct file extensions on data written to disk in JNI
---
java/jni/com_zerotierone_sdk_Node.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
(limited to 'java')
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 4d0dcff9..91561ff9 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -310,10 +310,10 @@ namespace {
snprintf(p, sizeof(p), "planet");
break;
case ZT_STATE_OBJECT_MOON:
- snprintf(p, sizeof(p), "moons.d/%.16llx", (unsigned long long)id[0]);
+ snprintf(p, sizeof(p), "moons.d/%.16llx.moon", (unsigned long long)id[0]);
break;
case ZT_STATE_OBJECT_NETWORK_CONFIG:
- snprintf(p, sizeof(p), "networks.d/%.16llx", (unsigned long long)id[0]);
+ snprintf(p, sizeof(p), "networks.d/%.16llx.conf", (unsigned long long)id[0]);
break;
case ZT_STATE_OBJECT_PEER:
snprintf(p, sizeof(p), "peers.d/%.10llx", (unsigned long long)id[0]);
@@ -394,10 +394,10 @@ namespace {
snprintf(p, sizeof(p), "planet");
break;
case ZT_STATE_OBJECT_MOON:
- snprintf(p, sizeof(p), "moons.d/%.16llx", (unsigned long long)id[0]);
+ snprintf(p, sizeof(p), "moons.d/%.16llx.moon", (unsigned long long)id[0]);
break;
case ZT_STATE_OBJECT_NETWORK_CONFIG:
- snprintf(p, sizeof(p), "networks.d/%.16llx", (unsigned long long)id[0]);
+ snprintf(p, sizeof(p), "networks.d/%.16llx.conf", (unsigned long long)id[0]);
break;
case ZT_STATE_OBJECT_PEER:
snprintf(p, sizeof(p), "peers.d/%.10llx", (unsigned long long)id[0]);
--
cgit v1.2.3
From bcf697cc2bd0f49b3b6c5acd120dfc28537bd97c Mon Sep 17 00:00:00 2001
From: Grant Limberg
Date: Mon, 17 Jul 2017 16:15:13 -0700
Subject: Wire up PortMapper in Android
Enables UPnP port mapping for Android client on networks with UPnP routers
---
ext/miniupnpc/minisoap.c | 6 +++++
ext/miniupnpc/miniwget.c | 6 +++++
java/jni/Android.mk | 34 ++++++++++++++++++++++---
java/jni/com_zerotierone_sdk_Node.cpp | 16 +++++++++++-
osdep/PortMapper.cpp | 47 ++++++++++++++++++++++++-----------
5 files changed, 89 insertions(+), 20 deletions(-)
(limited to 'java')
diff --git a/ext/miniupnpc/minisoap.c b/ext/miniupnpc/minisoap.c
index 7aa0213e..01102a01 100644
--- a/ext/miniupnpc/minisoap.c
+++ b/ext/miniupnpc/minisoap.c
@@ -26,6 +26,12 @@
#define UPNP_VERSION_STRING "UPnP/1.1"
#endif
+#ifdef __ANDROID__
+#define OS_STRING "Android"
+#define MINIUPNPC_VERSION_STRING "2.0"
+#define UPNP_VERSION_STRING "UPnP/1.1"
+#endif
+
/* only for malloc */
#include
diff --git a/ext/miniupnpc/miniwget.c b/ext/miniupnpc/miniwget.c
index 93c8aa6b..dfa6004e 100644
--- a/ext/miniupnpc/miniwget.c
+++ b/ext/miniupnpc/miniwget.c
@@ -55,6 +55,12 @@
#define UPNP_VERSION_STRING "UPnP/1.1"
#endif
+#ifdef __ANDROID__
+#define OS_STRING "Android"
+#define MINIUPNPC_VERSION_STRING "2.0"
+#define UPNP_VERSION_STRING "UPnP/1.1"
+#endif
+
#include "miniwget.h"
#include "connecthostport.h"
#include "receivedata.h"
diff --git a/java/jni/Android.mk b/java/jni/Android.mk
index 3c5b555c..8cda2474 100644
--- a/java/jni/Android.mk
+++ b/java/jni/Android.mk
@@ -3,14 +3,21 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ZeroTierOneJNI
-LOCAL_C_INCLUDES := $(ZT1)/include
-LOCAL_C_INCLUDES += $(ZT1)/node
+LOCAL_C_INCLUDES := \
+ $(ZT1)/include \
+ $(ZT1)/node \
+ $(ZT1)/osdep \
+ $(ZT1)/ext/miniupnpc \
+ $(ZT1)/ext/libnatpmp
+
LOCAL_LDLIBS := -llog -latomic
# LOCAL_CFLAGS := -g
+LOCAL_CFLAGS := -DZT_USE_MINIUPNPC
+
# ZeroTierOne SDK source files
LOCAL_SRC_FILES := \
- $(ZT1)/node/C25519.cpp \
+ $(ZT1)/node/C25519.cpp \
$(ZT1)/node/Capability.cpp \
$(ZT1)/node/CertificateOfMembership.cpp \
$(ZT1)/node/CertificateOfOwnership.cpp \
@@ -35,8 +42,27 @@ LOCAL_SRC_FILES := \
$(ZT1)/node/Tag.cpp \
$(ZT1)/node/Topology.cpp \
$(ZT1)/node/Trace.cpp \
- $(ZT1)/node/Utils.cpp
+ $(ZT1)/node/Utils.cpp \
+ $(ZT1)/osdep/OSUtils.cpp \
+ $(ZT1)/osdep/PortMapper.cpp
+# libminiupnpc and libnatpmp files
+LOCAL_SRC_FILES += \
+ $(ZT1)/ext/miniupnpc/connecthostport.c \
+ $(ZT1)/ext/miniupnpc/igd_desc_parse.c \
+ $(ZT1)/ext/miniupnpc/minisoap.c \
+ $(ZT1)/ext/miniupnpc/minissdpc.c \
+ $(ZT1)/ext/miniupnpc/miniupnpc.c \
+ $(ZT1)/ext/miniupnpc/miniwget.c \
+ $(ZT1)/ext/miniupnpc/minixml.c \
+ $(ZT1)/ext/miniupnpc/portlistingparse.c \
+ $(ZT1)/ext/miniupnpc/receivedata.c \
+ $(ZT1)/ext/miniupnpc/upnpcommands.c \
+ $(ZT1)/ext/miniupnpc/upnpdev.c \
+ $(ZT1)/ext/miniupnpc/upnperrors.c \
+ $(ZT1)/ext/miniupnpc/upnpreplyparse.c \
+ $(ZT1)/ext/libnatpmp/natpmp.c \
+ $(ZT1)/ext/libnatpmp/getgateway.c
# JNI Files
LOCAL_SRC_FILES += \
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index 91561ff9..01ca6d7f 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -32,6 +32,8 @@
#include
#include "Mutex.hpp"
+#include "PortMapper.hpp"
+
#include