Updated Java Node class native methods to pass the node ID

This is so that we know which C-based ZT1_Node struct is being operated on

Signed-off-by: Grant Limberg <glimberg@gmail.com>
This commit is contained in:
Grant Limberg 2015-04-20 20:32:29 -07:00
parent 99a1a4e65b
commit 5f314f209e
3 changed files with 134 additions and 36 deletions

View file

@ -3,6 +3,9 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_MODULE := ZeroTierOneJNI LOCAL_MODULE := ZeroTierOneJNI
LOCAL_C_INCLUDES := $(ZT1)/include
# ZeroTierOne SDK source files
LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \
$(ZT1)/ext/lz4/lz4.c \ $(ZT1)/ext/lz4/lz4.c \
$(ZT1)/ext/json-parser/json.c \ $(ZT1)/ext/json-parser/json.c \
@ -31,4 +34,8 @@ LOCAL_SRC_FILES := \
$(ZT1)/osdep/Http.cpp \ $(ZT1)/osdep/Http.cpp \
$(ZT1)/osdep/OSUtils.cpp $(ZT1)/osdep/OSUtils.cpp
# JNI Files
LOCAL_SRC_FILES += \
com_zerotierone_sdk_Node.cpp
include $(BUILD_SHARED_LIBRARY) include $(BUILD_SHARED_LIBRARY)

View file

@ -7,61 +7,77 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/*
* Class: com_zerotierone_sdk_Node
* Method: node_init
* Signature: (J)Lcom/zerotierone/sdk/ResultCode;
*/
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_node_1init
(JNIEnv *, jobject, jlong);
/*
* Class: com_zerotierone_sdk_Node
* Method: node_delete
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_com_zerotierone_sdk_Node_node_1delete
(JNIEnv *, jobject, jlong);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: processVirtualNetworkFrame * Method: processVirtualNetworkFrame
* Signature: (JJJJIILjava/nio/ByteBuffer;ILjava/lang/Long;)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJJJJIILjava/nio/ByteBuffer;ILjava/lang/Long;)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_processVirtualNetworkFrame JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_processVirtualNetworkFrame
(JNIEnv *, jobject, jlong, jlong, jlong, jlong, jint, jint, jobject, jint, jobject); (JNIEnv *, jobject, jlong, jlong, jlong, jlong, jlong, jint, jint, jobject, jint, jobject);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: processBackgroundTasks * Method: processBackgroundTasks
* Signature: (JLjava/lang/Long;)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJLjava/lang/Long;)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_processBackgroundTasks JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_processBackgroundTasks
(JNIEnv *, jobject, jlong, jobject); (JNIEnv *, jobject, jlong, jlong, jobject);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: join * Method: join
* Signature: (J)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJ)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_join JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_join
(JNIEnv *, jobject, jlong); (JNIEnv *, jobject, jlong, jlong);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: leave * Method: leave
* Signature: (J)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJ)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_leave JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_leave
(JNIEnv *, jobject, jlong); (JNIEnv *, jobject, jlong, jlong);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: multicastSubscribe * Method: multicastSubscribe
* Signature: (JJJ)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJJJ)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_multicastSubscribe JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_multicastSubscribe
(JNIEnv *, jobject, jlong, jlong, jlong); (JNIEnv *, jobject, jlong, jlong, jlong, jlong);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: multicastUnsubscribe * Method: multicastUnsubscribe
* Signature: (JJJ)Lcom/zerotierone/sdk/ResultCode; * Signature: (JJJJ)Lcom/zerotierone/sdk/ResultCode;
*/ */
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_multicastUnsubscribe JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_multicastUnsubscribe
(JNIEnv *, jobject, jlong, jlong, jlong); (JNIEnv *, jobject, jlong, jlong, jlong, jlong);
/* /*
* Class: com_zerotierone_sdk_Node * Class: com_zerotierone_sdk_Node
* Method: address * Method: address
* Signature: ()J * Signature: (J)J
*/ */
JNIEXPORT jlong JNICALL Java_com_zerotierone_sdk_Node_address JNIEXPORT jlong JNICALL Java_com_zerotierone_sdk_Node_address
(JNIEnv *, jobject); (JNIEnv *, jobject, jlong);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -35,11 +35,25 @@ public class Node {
System.loadLibrary("ZeroTierOneJNI"); System.loadLibrary("ZeroTierOneJNI");
} }
private final DataStoreGetListener getListener; private static final String TAG = "NODE";
private final DataStorePutListener putListener;
private final PacketSender sender; /**
private final VirtualNetworkFrameListener frameListener; * Node ID for JNI purposes.
private final VirtualNetworkConfigListener configListener; * Currently set to the now value passed in at the constructor
*
* -1 if the node has already been closed
*/
private final long nodeId;
private final DataStoreGetListener getListener;
private final DataStorePutListener putListener;
private final PacketSender sender;
private final VirtualNetworkFrameListener frameListener;
private final VirtualNetworkConfigListener configListener;
private native ResultCode node_init(long now);
private native void node_delete(long nodeId);
public Node(long now, public Node(long now,
DataStoreGetListener getListener, DataStoreGetListener getListener,
@ -48,33 +62,78 @@ public class Node {
VirtualNetworkFrameListener frameListener, VirtualNetworkFrameListener frameListener,
VirtualNetworkConfigListener configListener) VirtualNetworkConfigListener configListener)
{ {
this.getListener = getListener; this.nodeId = now;
this.putListener = putListener;
this.sender = sender; this.getListener = getListener;
this.frameListener = frameListener; this.putListener = putListener;
this.configListener = configListener; this.sender = sender;
this.frameListener = frameListener;
this.configListener = configListener;
ResultCode rc = node_init(now);
if(rc.getValue() != ResultCode.RESULT_OK)
{
// TODO: Throw Exception
}
} }
public native ResultCode processVirtualNetworkFrame( public void close() {
if(nodeId != -1) {
node_delete(nodeId);
nodeId = -1;
}
}
private native ResultCode processVirtualNetworkFrame(
long nodeId,
long now, long now,
long nwid, long nwid,
long sourceMac, long sourceMac,
long destMac, long destMac,
int etherTYpe, int etherType,
int vlanId, int vlanId,
ByteBuffer frameData, ByteBuffer frameData,
int frameLength, int frameLength,
Long nextBackgroundTaskDeadline); Long nextBackgroundTaskDeadline);
public native ResultCode processBackgroundTasks( public ResultCode processVirtualNetworkFrame(
long now,
long nwid,
long sourceMac,
long destMac,
int etherType,
int vlanId,
ByteBuffer frameData,
int frameLength,
Long nextBackgroundTaskDeadline) {
return processVirtualNetworkFrame(
nodeId, now, nwid, sourceMac, destMac, etherType, vlanId,
frameData, frameLength, nextBackgroundTaskDeadline);
}
private native ResultCode processBackgroundTasks(
long nodeId,
long now, long now,
Long nextBackgroundTaskDeadline); Long nextBackgroundTaskDeadline);
public native ResultCode join(long nwid); public ResultCode processBackgroundTasks(long now, long nextBackgroundTaskDeadline) {
return processBackgroundTasks(nodeId, now, nextBackgroundTaskDeadline);
}
public native ResultCode leave(long nwid); private native ResultCode join(long nodeId, long nwid);
public native ResultCode multicastSubscribe( public ResultCode join(long nwid) {
return join(nodeId, nwid);
}
private native ResultCode leave(long nodeId, long nwid);
public ResultCode leave(long nwid) {
return leave(nodeId, nwid);
}
private native ResultCode multicastSubscribe(
long nodeId,
long nwid, long nwid,
long multicastGroup, long multicastGroup,
long multicastAdi); long multicastAdi);
@ -82,10 +141,18 @@ public class Node {
public ResultCode multicastSubscribe( public ResultCode multicastSubscribe(
long nwid, long nwid,
long multicastGroup) { long multicastGroup) {
return multicastSubscribe(nwid, multicastGroup, 0); return multicastSubscribe(nodeId, nwid, multicastGroup, 0);
} }
public native ResultCode multicastUnsubscribe( public ResultCode multicastSubscribe(
long nwid,
long multicastGroup,
long multicastAdi) {
return multicastSubscribe(nodeId, nwid, multicastGroup, multicastAdi);
}
private native ResultCode multicastUnsubscribe(
long nodeId,
long nwid, long nwid,
long multicastGroup, long multicastGroup,
long multicastAdi); long multicastAdi);
@ -93,11 +160,19 @@ public class Node {
public ResultCode multicastUnsubscribe( public ResultCode multicastUnsubscribe(
long nwid, long nwid,
long multicastGroup) { long multicastGroup) {
return multicastUnsubscribe(nwid, multicastGroup, 0); return multicastUnsubscribe(nodeId, nwid, multicastGroup, 0);
} }
public native long address(); public ResultCode multicastUnsubscribe(
long nwid,
long multicastGroup,
long multicastAdi) {
return multicastUnsubscribe(nodeId, nwid, multicastGroup, multicastAdi);
}
private native long address(long nodeId);
public long address() {
return address(nodeId);
}
} }