summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2015-04-24 19:11:49 -0700
committerGrant Limberg <glimberg@gmail.com>2015-04-24 19:11:49 -0700
commitd5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a (patch)
tree4f7c74664e541d7e4e704fbd3b32c8cf5b0beb8f /java
parent4137246653461ef80a531fd6adfc8def8c7e0eda (diff)
downloadinfinitytier-d5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a.tar.gz
infinitytier-d5fc2b39aa35dc5bb95c90d0e2165d8f2ec5316a.zip
implemented DataStoreGetFunction callback
Diffstat (limited to 'java')
-rw-r--r--java/jni/com_zerotierone_sdk_Node.cpp49
-rw-r--r--java/src/com/zerotierone/sdk/DataStoreGetListener.java8
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);
}