Browse Source

add ResultCode.fromInt

Brenton Bostick 2 years ago
parent
commit
34ff813e2a

+ 2 - 14
java/jni/ZT_jnicache.cpp

@@ -105,6 +105,7 @@ jmethodID VirtualNetworkRoute_ctor;
 jmethodID Event_fromInt_method;
 jmethodID InetAddress_getByAddress_method;
 jmethodID PeerRole_fromInt_method;
+jmethodID ResultCode_fromInt_method;
 
 //
 // Instance fields
@@ -160,13 +161,6 @@ jfieldID VirtualNetworkRoute_via_field;
 // Static fields
 //
 
-jfieldID ResultCode_RESULT_ERROR_BAD_PARAMETER_field;
-jfieldID ResultCode_RESULT_ERROR_NETWORK_NOT_FOUND_field;
-jfieldID ResultCode_RESULT_ERROR_UNSUPPORTED_OPERATION_field;
-jfieldID ResultCode_RESULT_FATAL_ERROR_DATA_STORE_FAILED_field;
-jfieldID ResultCode_RESULT_FATAL_ERROR_INTERNAL_field;
-jfieldID ResultCode_RESULT_FATAL_ERROR_OUT_OF_MEMORY_field;
-jfieldID ResultCode_RESULT_OK_field;
 jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE_field;
 jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY_field;
 jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN_field;
@@ -259,6 +253,7 @@ void setupJNICache(JavaVM *vm) {
     EXCEPTIONANDNULLCHECK(Event_fromInt_method = env->GetStaticMethodID(Event_class, "fromInt", "(I)Lcom/zerotier/sdk/Event;"));
     EXCEPTIONANDNULLCHECK(InetAddress_getByAddress_method = env->GetStaticMethodID(InetAddress_class, "getByAddress", "([B)Ljava/net/InetAddress;"));
     EXCEPTIONANDNULLCHECK(PeerRole_fromInt_method = env->GetStaticMethodID(PeerRole_class, "fromInt", "(I)Lcom/zerotier/sdk/PeerRole;"));
+    EXCEPTIONANDNULLCHECK(ResultCode_fromInt_method = env->GetStaticMethodID(ResultCode_class, "fromInt", "(I)Lcom/zerotier/sdk/ResultCode;"));
 
     //
     // Instance fields
@@ -314,13 +309,6 @@ void setupJNICache(JavaVM *vm) {
     // Static fields
     //
 
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_ERROR_BAD_PARAMETER_field = env->GetStaticFieldID(ResultCode_class, "RESULT_ERROR_BAD_PARAMETER", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_ERROR_NETWORK_NOT_FOUND_field = env->GetStaticFieldID(ResultCode_class, "RESULT_ERROR_NETWORK_NOT_FOUND", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_ERROR_UNSUPPORTED_OPERATION_field = env->GetStaticFieldID(ResultCode_class, "RESULT_ERROR_UNSUPPORTED_OPERATION", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_FATAL_ERROR_DATA_STORE_FAILED_field = env->GetStaticFieldID(ResultCode_class, "RESULT_FATAL_ERROR_DATA_STORE_FAILED", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_FATAL_ERROR_INTERNAL_field = env->GetStaticFieldID(ResultCode_class, "RESULT_FATAL_ERROR_INTERNAL", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_FATAL_ERROR_OUT_OF_MEMORY_field = env->GetStaticFieldID(ResultCode_class, "RESULT_FATAL_ERROR_OUT_OF_MEMORY", "Lcom/zerotier/sdk/ResultCode;"));
-    EXCEPTIONANDNULLCHECK(ResultCode_RESULT_OK_field = env->GetStaticFieldID(ResultCode_class, "RESULT_OK", "Lcom/zerotier/sdk/ResultCode;"));
     EXCEPTIONANDNULLCHECK(VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE_field = env->GetStaticFieldID(VirtualNetworkConfigOperation_class, "VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE", "Lcom/zerotier/sdk/VirtualNetworkConfigOperation;"));
     EXCEPTIONANDNULLCHECK(VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY_field = env->GetStaticFieldID(VirtualNetworkConfigOperation_class, "VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY", "Lcom/zerotier/sdk/VirtualNetworkConfigOperation;"));
     EXCEPTIONANDNULLCHECK(VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN_field = env->GetStaticFieldID(VirtualNetworkConfigOperation_class, "VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN", "Lcom/zerotier/sdk/VirtualNetworkConfigOperation;"));

+ 1 - 7
java/jni/ZT_jnicache.h

@@ -74,6 +74,7 @@ extern jmethodID VirtualNetworkRoute_ctor;
 extern jmethodID Event_fromInt_method;
 extern jmethodID InetAddress_getByAddress_method;
 extern jmethodID PeerRole_fromInt_method;
+extern jmethodID ResultCode_fromInt_method;
 
 //
 // Instance fields
@@ -129,13 +130,6 @@ extern jfieldID VirtualNetworkRoute_via_field;
 // Static fields
 //
 
-extern jfieldID ResultCode_RESULT_ERROR_BAD_PARAMETER_field;
-extern jfieldID ResultCode_RESULT_ERROR_NETWORK_NOT_FOUND_field;
-extern jfieldID ResultCode_RESULT_ERROR_UNSUPPORTED_OPERATION_field;
-extern jfieldID ResultCode_RESULT_FATAL_ERROR_DATA_STORE_FAILED_field;
-extern jfieldID ResultCode_RESULT_FATAL_ERROR_INTERNAL_field;
-extern jfieldID ResultCode_RESULT_FATAL_ERROR_OUT_OF_MEMORY_field;
-extern jfieldID ResultCode_RESULT_OK_field;
 extern jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE_field;
 extern jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY_field;
 extern jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN_field;

+ 4 - 40
java/jni/ZT_jniutils.cpp

@@ -32,48 +32,12 @@
 
 jobject createResultObject(JNIEnv *env, ZT_ResultCode code)
 {
-    jobject resultObject = NULL;
-
-    jfieldID field;
-    switch(code)
-    {
-    case ZT_RESULT_OK:
-    case ZT_RESULT_OK_IGNORED:
-        LOGV("ZT_RESULT_OK");
-        field = ResultCode_RESULT_OK_field;
-        break;
-    case ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY:
-        LOGV("ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY");
-        field = ResultCode_RESULT_FATAL_ERROR_OUT_OF_MEMORY_field;
-        break;
-    case ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED:
-        LOGV("ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED");
-        field = ResultCode_RESULT_FATAL_ERROR_DATA_STORE_FAILED_field;
-        break;
-    case ZT_RESULT_ERROR_NETWORK_NOT_FOUND:
-        LOGV("ZT_RESULT_ERROR_NETWORK_NOT_FOUND");
-        field = ResultCode_RESULT_ERROR_NETWORK_NOT_FOUND_field;
-        break;
-    case ZT_RESULT_ERROR_UNSUPPORTED_OPERATION:
-        LOGV("ZT_RESULT_ERROR_UNSUPPORTED_OPERATION");
-        field = ResultCode_RESULT_ERROR_UNSUPPORTED_OPERATION_field;
-        break;
-    case ZT_RESULT_ERROR_BAD_PARAMETER:
-        LOGV("ZT_RESULT_ERROR_BAD_PARAMETER");
-        field = ResultCode_RESULT_ERROR_BAD_PARAMETER_field;
-        break;
-    case ZT_RESULT_FATAL_ERROR_INTERNAL:
-    default:
-        LOGV("ZT_RESULT_FATAL_ERROR_INTERNAL");
-        field = ResultCode_RESULT_FATAL_ERROR_INTERNAL_field;
-        break;
+    jobject resultObject = env->CallStaticObjectMethod(ResultCode_class, ResultCode_fromInt_method, code);
+    if(env->ExceptionCheck() || resultObject == NULL) {
+        LOGE("Error creating ResultCode object");
+        return NULL;
     }
 
-    resultObject = env->GetStaticObjectField(ResultCode_class, field);
-    if(env->ExceptionCheck() || resultObject == NULL)
-    {
-        LOGE("Error on GetStaticObjectField");
-    }
     return resultObject;
 }
 

+ 4 - 0
java/jni/com_zerotierone_sdk_Node.cpp

@@ -656,6 +656,10 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init(
     {
         LOGE("Error creating Node: %d", rc);
         resultObject = createResultObject(env, rc);
+        if (env->ExceptionCheck() || resultObject == NULL) {
+            return NULL;
+        }
+
         if(node)
         {
             ZT_Node_delete(node);

+ 28 - 4
java/src/com/zerotier/sdk/ResultCode.java

@@ -34,6 +34,8 @@ package com.zerotier.sdk;
  * occurs, the node should be considered to not be working correctly. These
  * indicate serious problems like an inaccessible data store or a compile
  * problem.</p>
+ *
+ * Defined in ZeroTierOne.h as ZT_ResultCode
  */
 public enum ResultCode {
 
@@ -69,10 +71,32 @@ public enum ResultCode {
 
     RESULT_ERROR_BAD_PARAMETER(1002);
 
-	
-	private final int id;
-    ResultCode(int id) { this.id = id; }
-    public int getValue() { return id; }
+    private final int id;
+
+    ResultCode(int id) {
+        this.id = id;
+    }
+
+    public static ResultCode fromInt(int id) {
+        switch (id) {
+            case 0:
+                return RESULT_OK;
+            case 100:
+                return RESULT_FATAL_ERROR_OUT_OF_MEMORY;
+            case 101:
+                return RESULT_FATAL_ERROR_DATA_STORE_FAILED;
+            case 102:
+                return RESULT_FATAL_ERROR_INTERNAL;
+            case 1000:
+                return RESULT_ERROR_NETWORK_NOT_FOUND;
+            case 1001:
+                return RESULT_ERROR_UNSUPPORTED_OPERATION;
+            case 1002:
+                return RESULT_ERROR_BAD_PARAMETER;
+            default:
+                throw new RuntimeException("Unhandled value: " + id);
+        }
+    }
 
     public boolean isFatal(int id) {
     	return (id > 100 && id < 1000);