diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-22 21:14:55 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-22 21:14:55 -0700 |
commit | a1a35e0279c9b3b77403db4fe5e1175988781158 (patch) | |
tree | 35608c0d8aa3ce0ba231547264d6e214565e6781 /java | |
parent | 1308f02b93505b64b4d590d83a0fb609d82f4597 (diff) | |
download | infinitytier-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.cpp | 36 |
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; } |