summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2015-04-22 21:14:55 -0700
committerGrant Limberg <glimberg@gmail.com>2015-04-22 21:14:55 -0700
commita1a35e0279c9b3b77403db4fe5e1175988781158 (patch)
tree35608c0d8aa3ce0ba231547264d6e214565e6781 /java
parent1308f02b93505b64b4d590d83a0fb609d82f4597 (diff)
downloadinfinitytier-a1a35e0279c9b3b77403db4fe5e1175988781158.tar.gz
infinitytier-a1a35e0279c9b3b77403db4fe5e1175988781158.zip
Can't instantiate enum objects. Fix createResultObject() function so that it still works properly
Signed-off-by: Grant Limberg <glimberg@gmail.com>
Diffstat (limited to 'java')
-rw-r--r--java/jni/com_zerotierone_sdk_Node.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp
index ae72f68e..942f9f6d 100644
--- a/java/jni/com_zerotierone_sdk_Node.cpp
+++ b/java/jni/com_zerotierone_sdk_Node.cpp
@@ -30,6 +30,7 @@
#include <ZeroTierOne.h>
#include <map>
+#include <string>
#include <assert.h>
#include <string.h>
@@ -125,12 +126,11 @@ namespace {
jobject createResultObject(JNIEnv *env, ZT1_ResultCode code)
{
- // cache the class and constructor so we don't have to
- // look them up every time we need to create a java
+ // cache the class so we don't have to
+ // look it up every time we need to create a java
// ResultCode object
static jclass resultClass = NULL;
- static jmethodID constructorId = NULL;
-
+
jobject resultObject = NULL;
if(resultClass == NULL)
@@ -142,16 +142,30 @@ namespace {
}
}
- if(constructorId = NULL)
+ std::string fieldName;
+ switch(code)
{
- constructorId = env->GetMethodID(resultClass, "<init>", "(I)V");
- if(constructorId == NULL)
- {
- return NULL; // exception thrown
- }
+ case ZT1_RESULT_OK:
+ fieldName = "ZT1_RESULT_OK";
+ break;
+ case ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY:
+ fieldName = "ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY";
+ break;
+ case ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED:
+ fieldName = "ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED";
+ break;
+ case ZT1_RESULT_ERROR_NETWORK_NOT_FOUND:
+ fieldName = "ZT1_RESULT_ERROR_NETWORK_NOT_FOUND";
+ break;
+ case ZT1_RESULT_FATAL_ERROR_INTERNAL:
+ default:
+ fieldName = "ZT1_RESULT_FATAL_ERROR_INTERNAL";
+ break;
}
- resultObject = env->NewObject(resultClass, constructorId, (jlong)code);
+ jfieldID enumField = env->GetStaticFieldID(resultClass, fieldName.c_str(), "Lcom/zerotierone/sdk/ResultCode");
+
+ resultObject = env->GetStaticObjectField(resultClass, enumField);
return resultObject;
}