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/src/com/zerotier/sdk/Node.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'java/src/com/zerotier/sdk/Node.java') 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) -- 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/src/com/zerotier/sdk/Node.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 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/src/com/zerotier/sdk/Node.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