diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:43:17 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:43:17 -0700 |
commit | f2eed5a65f21c8d5916defcf4b88d2665e38a192 (patch) | |
tree | 0cb0c5277b2ec1d1d08de8ccc105f1cbe3c46b3f /java/jni | |
parent | 5e1fb4e2530e8995f942686cf0783f47a3c804c8 (diff) | |
download | infinitytier-f2eed5a65f21c8d5916defcf4b88d2665e38a192.tar.gz infinitytier-f2eed5a65f21c8d5916defcf4b88d2665e38a192.zip |
implemented WirePacketSendFunction
Diffstat (limited to 'java/jni')
-rw-r--r-- | java/jni/com_zerotierone_sdk_Node.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index 5fd22dab..72e9fe10 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<uint64_t, JniRef*> NodeMap; |