diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:11:49 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:11:49 -0700 |
commit | d5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a (patch) | |
tree | 4f7c74664e541d7e4e704fbd3b32c8cf5b0beb8f /java | |
parent | 4137246653461ef80a531fd6adfc8def8c7e0eda (diff) | |
download | infinitytier-d5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a.tar.gz infinitytier-d5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a.zip |
implemented DataStoreGetFunction callback
Diffstat (limited to 'java')
-rw-r--r-- | java/jni/com_zerotierone_sdk_Node.cpp | 49 | ||||
-rw-r--r-- | java/src/com/zerotierone/sdk/DataStoreGetListener.java | 8 |
2 files changed, 49 insertions, 8 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index 81af5e3f..8064154c 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -158,7 +158,7 @@ namespace { } - void EventCallback(ZT1_Node *node,void *userData,enum ZT1_Event,const void *) + void EventCallback(ZT1_Node *node,void *userData,enum ZT1_Event event, const void *data) { JniRef *ref = (JniRef*)userData; assert(ref->node == node); @@ -166,17 +166,58 @@ namespace { JNIEnv *env = ref->env; } - long DataStoreGetFunction(ZT1_Node *node,void *userData,const char *,void *,unsigned long,unsigned long,unsigned long *) + long DataStoreGetFunction(ZT1_Node *node,void *userData, + const char *objectName, + void *buffer, + unsigned long bufferSize, + unsigned long bufferIndex, + unsigned long *out_objectSize) { JniRef *ref = (JniRef*)userData; assert(ref->node == node); JNIEnv *env = ref->env; - return 0; + static jclass dataStoreGetClass = NULL; + static jmethodID callbackMethod = NULL; + + if(dataStoreGetClass == NULL) + { + dataStoreGetClass = env->GetObjectClass(ref->dataStoreGetListener); + if(dataStoreGetClass == NULL) + { + return -2; + } + } + + if(callbackMethod == NULL) + { + callbackMethod = env->GetMethodID(dataStoreGetClass, + "onDataStoreGet", + "(Ljava/lang/String;[BJJ[J)J"); + if(callbackMethod == NULL) + { + return -2; + } + } + + jstring nameStr = env->NewStringUTF(objectName); + jbyteArray bufferObj = env->NewByteArray(bufferSize); + jlongArray objectSizeObj = env->NewLongArray(1); + + long retval = env->CallLongMethod( + dataStoreGetClass, callbackMethod, nameStr, bufferObj, bufferSize, bufferIndex, objectSizeObj); + + env->GetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer); + env->GetLongArrayRegion(objectSizeObj, 0, 1, (jlong*)&out_objectSize); + env->ReleaseByteArrayElements(bufferObj, (jbyte*)buffer, 0); + env->ReleaseLongArrayElements(objectSizeObj, (jlong*)&out_objectSize, 0); + + return retval; } - int DataStorePutFunction(ZT1_Node *node,void *userData,const char *,const void *,unsigned long,int) + int DataStorePutFunction(ZT1_Node *node,void *userData, + const char *,const void *,unsigned long,int) { JniRef *ref = (JniRef*)userData; assert(ref->node == node); diff --git a/java/src/com/zerotierone/sdk/DataStoreGetListener.java b/java/src/com/zerotierone/sdk/DataStoreGetListener.java index 60e1c3e8..c6ec57a4 100644 --- a/java/src/com/zerotierone/sdk/DataStoreGetListener.java +++ b/java/src/com/zerotierone/sdk/DataStoreGetListener.java @@ -29,10 +29,10 @@ package com.zerotierone.sdk; import java.nio.ByteBuffer; public interface DataStoreGetListener { - public int onDataStoreGet(Node node, + public long onDataStoreGet( String name, - ByteBuffer buffer, + byte[] out_buffer, long bufferSize, - long index, - Long out_objectSize); + long bufferIndex, + long[] out_objectSize); } |