summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2015-04-24 19:28:44 -0700
committerGrant Limberg <glimberg@gmail.com>2015-04-24 19:28:44 -0700
commitdc00ce4f44448fad1cd990d80d9755dbca770463 (patch)
tree834d768a42b861da84d8ca6fcabb9da687635045 /java
parent53ebd5a9a514be435b8797a4ba2599eefd7874bf (diff)
downloadinfinitytier-dc00ce4f44448fad1cd990d80d9755dbca770463.tar.gz
infinitytier-dc00ce4f44448fad1cd990d80d9755dbca770463.zip
added DataStorePutFunction implementation
updated DataStorePutListener to also have an onDelete() method
Diffstat (limited to 'java')
-rw-r--r--java/jni/com_zerotierone_sdk_Node.cpp59
-rw-r--r--java/src/com/zerotierone/sdk/DataStorePutListener.java12
2 files changed, 64 insertions, 7 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index d4f60007..2408c7f6 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -217,14 +217,68 @@ namespace {
}
int DataStorePutFunction(ZT1_Node *node,void *userData,
- const char *,const void *,unsigned long,int)
+ const char *objectName,
+ const void *buffer,
+ unsigned long bufferSize,
+ int secure)
{
JniRef *ref = (JniRef*)userData;
assert(ref->node == node);
JNIEnv *env = ref->env;
- return 0;
+ static jclass dataStorePutClass = NULL;
+ static jmethodID callbackMethod = NULL;
+ static jmethodID deleteMethod = NULL;
+
+ if(dataStorePutClass == NULL)
+ {
+ dataStorePutClass = env->GetObjectClass(ref->dataStorePutListener);
+ if(dataStorePutClass == NULL)
+ {
+ return -1;
+ }
+ }
+
+ if(callbackMethod == NULL)
+ {
+ callbackMethod = env->GetMethodID(dataStorePutClass,
+ "onDataStorePut",
+ "(Ljava/lang/String;[BZ)I");
+ if(callbackMethod == NULL)
+ {
+ return -2;
+ }
+ }
+
+ if(deleteMethod == NULL)
+ {
+ deleteMethod = env->GetMethodID(dataStorePutClass,
+ "onDelete", "(Ljava/lang/String;)I");
+ if(deleteMethod == NULL)
+ {
+ return -3;
+ }
+ }
+
+ jstring nameStr = env->NewStringUTF(objectName);
+
+ if(buffer == NULL)
+ {
+ // delete operation
+ return env->CallIntMethod(dataStorePutClass, deleteMethod, nameStr);
+ }
+ else
+ {
+ // set operation
+ jbyteArray bufferObj = env->NewByteArray(bufferSize);
+ env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer);
+ bool secure = secure != 0;
+
+
+ return env->CallIntMethod(dataStorePutClass, callbackMethod,
+ nameStr, bufferObj, secure);
+ }
}
int WirePacketSendFunction(ZT1_Node *node,void *userData,const struct sockaddr_storage *,unsigned int,const void *,unsigned int)
@@ -234,6 +288,7 @@ namespace {
JNIEnv *env = ref->env;
+
return 0;
}
diff --git a/java/src/com/zerotierone/sdk/DataStorePutListener.java b/java/src/com/zerotierone/sdk/DataStorePutListener.java
index 4e9404d9..bc884667 100644
--- a/java/src/com/zerotierone/sdk/DataStorePutListener.java
+++ b/java/src/com/zerotierone/sdk/DataStorePutListener.java
@@ -29,9 +29,11 @@ package com.zerotierone.sdk;
import java.nio.ByteBuffer;
public interface DataStorePutListener {
- public int onDataStorePut(Node node,
- String name,
- ByteBuffer buffer,
- long bufferSize,
- boolean secure);
+ public int onDataStorePut(
+ String name,
+ byte[] buffer,
+ boolean secure);
+
+ public int onDelete(
+ String name);
}