diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-29 21:20:12 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-29 21:20:50 -0700 |
commit | 9464504e4a68755296b96fcc3df4afe1ce79b681 (patch) | |
tree | 55ab2a2858ad48e2cd33e9af037e36b4aaf3ce45 /java/jni | |
parent | 7e0cc28a89ea46a747148bfab4e96cd5116ae14b (diff) | |
download | infinitytier-9464504e4a68755296b96fcc3df4afe1ce79b681.tar.gz infinitytier-9464504e4a68755296b96fcc3df4afe1ce79b681.zip |
DataStoreGet and Put and EventListener appear to work
Diffstat (limited to 'java/jni')
-rw-r--r-- | java/jni/com_zerotierone_sdk_Node.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index ed2e3a7e..5462c864 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -285,7 +285,7 @@ namespace { if(dataStoreGetClass == NULL) { LOGE("Couldn't find class for DataStoreGetListener instance"); - return -1; + return -2; } jmethodID dataStoreGetCallbackMethod = env->GetMethodID( @@ -301,21 +301,40 @@ namespace { jstring nameStr = env->NewStringUTF(objectName); if(nameStr == NULL) { - return -3; // out of memory + LOGE("Error creating name string object"); + return -2; // out of memory } jbyteArray bufferObj = env->NewByteArray(bufferSize); + if(bufferObj == NULL) + { + LOGE("Error creating byte[] buffer of size: %lu", bufferSize); + return -2; + } jlongArray objectSizeObj = env->NewLongArray(1); + if(objectSizeObj == NULL) + { + LOGE("Error creating long[1] array for actual object size"); + return -2; // couldn't create long[1] array + } + + LOGD("Calling onDataStoreGet(%s, %p, %lu, %p)", + objectName, buffer, bufferIndex, objectSizeObj); long retval = env->CallLongMethod( ref->dataStoreGetListener, dataStoreGetCallbackMethod, - nameStr, bufferObj, bufferIndex, objectSizeObj); + nameStr, bufferObj, (jlong)bufferIndex, objectSizeObj); + + if(retval > 0) + { + 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); + } - 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); + LOGI("Out Object Size: %lu", *out_objectSize); return retval; } |