From f2eed5a65f21c8d5916defcf4b88d2665e38a192 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 24 Apr 2015 19:43:17 -0700 Subject: [PATCH] implemented WirePacketSendFunction --- java/jni/com_zerotierone_sdk_Node.cpp | 25 +++++++++++++++++-- .../src/com/zerotierone/sdk/PacketSender.java | 7 +++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index 5fd22dab1..72e9fe10b 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -255,15 +255,36 @@ namespace { } } - int WirePacketSendFunction(ZT1_Node *node,void *userData,const struct sockaddr_storage *,unsigned int,const void *,unsigned int) + int WirePacketSendFunction(ZT1_Node *node,void *userData,\ + const struct sockaddr_storage *address, + unsigned int linkDesparation, + const void *buffer, + unsigned int bufferSize) { JniRef *ref = (JniRef*)userData; assert(ref->node == node); JNIEnv *env = ref->env; + jclass packetSenderClass = NULL; + jmethodID callbackMethod = NULL; - return 0; + packetSenderClass = env->GetObjectClass(ref->packetSender); + if(packetSenderClass == NULL) + { + return -1; + } + + callbackMethod = env->GetMethodID(packetSenderClass, + "onSendPacketRequested", "(Ljava/lang/String;I[B)I"); + if(callbackMethod == NULL) + { + return -2; + } + jobject addressObj = newInetAddress(env, *address); + jbyteArray bufferObj = env->NewByteArray(bufferSize); + env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer); + return env->CallIntMethod(packetSenderClass, callbackMethod, addressObj, linkDesparation, bufferObj); } typedef std::map NodeMap; diff --git a/java/src/com/zerotierone/sdk/PacketSender.java b/java/src/com/zerotierone/sdk/PacketSender.java index 0e007ffbd..572e18077 100644 --- a/java/src/com/zerotierone/sdk/PacketSender.java +++ b/java/src/com/zerotierone/sdk/PacketSender.java @@ -30,9 +30,8 @@ import java.nio.ByteBuffer; public interface PacketSender { - public int onSendPacketRequested(Node node, + public int onSendPacketRequested( String addr, - int linkDesc, - ByteBuffer packetData, - long dataLength); + int linkDesparation, + byte[] packetData); }