diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:28:44 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-24 19:28:44 -0700 |
commit | dc00ce4f44448fad1cd990d80d9755dbca770463 (patch) | |
tree | 834d768a42b861da84d8ca6fcabb9da687635045 /java | |
parent | 53ebd5a9a514be435b8797a4ba2599eefd7874bf (diff) | |
download | infinitytier-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.cpp | 59 | ||||
-rw-r--r-- | java/src/com/zerotierone/sdk/DataStorePutListener.java | 12 |
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); } |