mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 12:33:44 +02:00
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:
parent
99a1a4e65b
commit
5f314f209e
3 changed files with 134 additions and 36 deletions
|
@ -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)
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,12 +35,26 @@ public class Node {
|
||||||
System.loadLibrary("ZeroTierOneJNI");
|
System.loadLibrary("ZeroTierOneJNI");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String TAG = "NODE";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Node ID for JNI purposes.
|
||||||
|
* 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 DataStoreGetListener getListener;
|
||||||
private final DataStorePutListener putListener;
|
private final DataStorePutListener putListener;
|
||||||
private final PacketSender sender;
|
private final PacketSender sender;
|
||||||
private final VirtualNetworkFrameListener frameListener;
|
private final VirtualNetworkFrameListener frameListener;
|
||||||
private final VirtualNetworkConfigListener configListener;
|
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,
|
||||||
DataStorePutListener putListener,
|
DataStorePutListener putListener,
|
||||||
|
@ -48,33 +62,78 @@ public class Node {
|
||||||
VirtualNetworkFrameListener frameListener,
|
VirtualNetworkFrameListener frameListener,
|
||||||
VirtualNetworkConfigListener configListener)
|
VirtualNetworkConfigListener configListener)
|
||||||
{
|
{
|
||||||
|
this.nodeId = now;
|
||||||
|
|
||||||
this.getListener = getListener;
|
this.getListener = getListener;
|
||||||
this.putListener = putListener;
|
this.putListener = putListener;
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.frameListener = frameListener;
|
this.frameListener = frameListener;
|
||||||
this.configListener = configListener;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue