summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/jni/com_zerotierone_sdk_Node.cpp44
-rw-r--r--java/src/com/zerotierone/sdk/VirtualNetworkFrameListener.java6
2 files changed, 45 insertions, 5 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index fe8c8c3e..81af5e3f 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -65,7 +65,12 @@ namespace {
};
- int VirtualNetworkConfigFunctionCallback(ZT1_Node *node,void *userData,uint64_t nwid,enum ZT1_VirtualNetworkConfigOperation operation, const ZT1_VirtualNetworkConfig *config)
+ int VirtualNetworkConfigFunctionCallback(
+ ZT1_Node *node,
+ void *userData,
+ uint64_t nwid,
+ enum ZT1_VirtualNetworkConfigOperation operation,
+ const ZT1_VirtualNetworkConfig *config)
{
JniRef *ref = (JniRef*)userData;
assert(ref->node == node);
@@ -110,14 +115,49 @@ namespace {
return env->CallIntMethod(ref->configListener, callbackMethod, (jlong)nwid, operationObject, networkConfigObject);
}
- void VirtualNetworkFrameFunctionCallback(ZT1_Node *node,void *userData,uint64_t,uint64_t,uint64_t,unsigned int,unsigned int,const void *,unsigned int)
+ void VirtualNetworkFrameFunctionCallback(ZT1_Node *node,void *userData,
+ uint64_t nwid,
+ uint64_t sourceMac,
+ uint64_t destMac,
+ unsigned int etherType,
+ unsigned int vlanid,
+ const void *frameData,
+ unsigned int frameLength)
{
JniRef *ref = (JniRef*)userData;
assert(ref->node == node);
JNIEnv *env = ref->env;
+
+ static jclass frameListenerClass = NULL;
+ static jmethodID callbackMethod = NULL;
+
+ if(frameListenerClass == NULL)
+ {
+ frameListenerClass = env->GetObjectClass(ref->frameListener);
+ if(frameListenerClass == NULL)
+ {
+ return;
+ }
+ }
+
+ if(callbackMethod == NULL)
+ {
+ callbackMethod = env->GetMethodID(frameListenerClass,
+ "onVirtualNetworkFrame", "(JJJJJ[B)V");
+ if(callbackMethod == NULL)
+ {
+ return;
+ }
+ }
+
+ jbyteArray dataArray = env->NewByteArray(frameLength);
+ env->SetByteArrayRegion(dataArray, 0, frameLength, (jbyte*)frameData);
+
+ env->CallVoidMethod(ref->frameListener, callbackMethod, nwid, sourceMac, destMac, etherType, vlanid, dataArray);
}
+
void EventCallback(ZT1_Node *node,void *userData,enum ZT1_Event,const void *)
{
JniRef *ref = (JniRef*)userData;
diff --git a/java/src/com/zerotierone/sdk/VirtualNetworkFrameListener.java b/java/src/com/zerotierone/sdk/VirtualNetworkFrameListener.java
index fed5d95c..a38cd722 100644
--- a/java/src/com/zerotierone/sdk/VirtualNetworkFrameListener.java
+++ b/java/src/com/zerotierone/sdk/VirtualNetworkFrameListener.java
@@ -24,17 +24,17 @@
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
+
package com.zerotierone.sdk;
import java.nio.ByteBuffer;
public interface VirtualNetworkFrameListener {
- void onVirtualNetworkFrame(Node node,
+ void onVirtualNetworkFrame(
long nwid,
long srcMac,
long destMac,
long etherType,
long vlanId,
- ByteBuffer frameData,
- long len);
+ byte[] frameData);
}