diff --git a/java/jni/ZT_jnicache.cpp b/java/jni/ZT_jnicache.cpp index a29bd8e74..f42ac7b29 100644 --- a/java/jni/ZT_jnicache.cpp +++ b/java/jni/ZT_jnicache.cpp @@ -106,6 +106,7 @@ jmethodID Event_fromInt_method; jmethodID InetAddress_getByAddress_method; jmethodID PeerRole_fromInt_method; jmethodID ResultCode_fromInt_method; +jmethodID VirtualNetworkConfigOperation_fromInt_method; // // Instance fields @@ -161,10 +162,6 @@ jfieldID VirtualNetworkRoute_via_field; // Static fields // -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; -jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_UP_field; jfieldID VirtualNetworkStatus_NETWORK_STATUS_ACCESS_DENIED_field; jfieldID VirtualNetworkStatus_NETWORK_STATUS_AUTHENTICATION_REQUIRED_field; jfieldID VirtualNetworkStatus_NETWORK_STATUS_CLIENT_TOO_OLD_field; @@ -254,6 +251,7 @@ void setupJNICache(JavaVM *vm) { 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;")); + EXCEPTIONANDNULLCHECK(VirtualNetworkConfigOperation_fromInt_method = env->GetStaticMethodID(VirtualNetworkConfigOperation_class, "fromInt", "(I)Lcom/zerotier/sdk/VirtualNetworkConfigOperation;")); // // Instance fields @@ -309,10 +307,6 @@ void setupJNICache(JavaVM *vm) { // Static fields // - 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;")); - EXCEPTIONANDNULLCHECK(VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_UP_field = env->GetStaticFieldID(VirtualNetworkConfigOperation_class, "VIRTUAL_NETWORK_CONFIG_OPERATION_UP", "Lcom/zerotier/sdk/VirtualNetworkConfigOperation;")); EXCEPTIONANDNULLCHECK(VirtualNetworkStatus_NETWORK_STATUS_ACCESS_DENIED_field = env->GetStaticFieldID(VirtualNetworkStatus_class, "NETWORK_STATUS_ACCESS_DENIED", "Lcom/zerotier/sdk/VirtualNetworkStatus;")); EXCEPTIONANDNULLCHECK(VirtualNetworkStatus_NETWORK_STATUS_AUTHENTICATION_REQUIRED_field = env->GetStaticFieldID(VirtualNetworkStatus_class, "NETWORK_STATUS_AUTHENTICATION_REQUIRED", "Lcom/zerotier/sdk/VirtualNetworkStatus;")); EXCEPTIONANDNULLCHECK(VirtualNetworkStatus_NETWORK_STATUS_CLIENT_TOO_OLD_field = env->GetStaticFieldID(VirtualNetworkStatus_class, "NETWORK_STATUS_CLIENT_TOO_OLD", "Lcom/zerotier/sdk/VirtualNetworkStatus;")); diff --git a/java/jni/ZT_jnicache.h b/java/jni/ZT_jnicache.h index ffee04d93..61865403a 100644 --- a/java/jni/ZT_jnicache.h +++ b/java/jni/ZT_jnicache.h @@ -75,6 +75,7 @@ extern jmethodID Event_fromInt_method; extern jmethodID InetAddress_getByAddress_method; extern jmethodID PeerRole_fromInt_method; extern jmethodID ResultCode_fromInt_method; +extern jmethodID VirtualNetworkConfigOperation_fromInt_method; // // Instance fields @@ -130,10 +131,6 @@ extern jfieldID VirtualNetworkRoute_via_field; // Static fields // -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; -extern jfieldID VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_UP_field; extern jfieldID VirtualNetworkStatus_NETWORK_STATUS_ACCESS_DENIED_field; extern jfieldID VirtualNetworkStatus_NETWORK_STATUS_AUTHENTICATION_REQUIRED_field; extern jfieldID VirtualNetworkStatus_NETWORK_STATUS_CLIENT_TOO_OLD_field; diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp index bda1014fc..5a69116d4 100644 --- a/java/jni/ZT_jniutils.cpp +++ b/java/jni/ZT_jniutils.cpp @@ -120,26 +120,12 @@ jobject createVirtualNetworkType(JNIEnv *env, ZT_VirtualNetworkType type) jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT_VirtualNetworkConfigOperation op) { - jobject vnetConfigOpObject = NULL; - - jfieldID field; - switch(op) - { - case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP: - field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_UP_field; - break; - case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE: - field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE_field; - break; - case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN: - field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN_field; - break; - case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: - field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY_field; - break; + jobject vnetConfigOpObject = env->CallStaticObjectMethod(VirtualNetworkConfigOperation_class, VirtualNetworkConfigOperation_fromInt_method, op); + if (env->ExceptionCheck() || vnetConfigOpObject == NULL) { + LOGE("Error creating VirtualNetworkConfigOperation object"); + return NULL; } - vnetConfigOpObject = env->GetStaticObjectField(VirtualNetworkConfigOperation_class, field); return vnetConfigOpObject; } diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index 92cc896ac..e9686c302 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -114,9 +114,8 @@ namespace { } jobject operationObject = createVirtualNetworkConfigOperation(env, operation); - if(operationObject == NULL) + if(env->ExceptionCheck() || operationObject == NULL) { - LOGE("Error creating VirtualNetworkConfigOperation object"); return -101; } diff --git a/java/src/com/zerotier/sdk/VirtualNetworkConfigOperation.java b/java/src/com/zerotier/sdk/VirtualNetworkConfigOperation.java index 6abf2755f..93a4c5d9d 100644 --- a/java/src/com/zerotier/sdk/VirtualNetworkConfigOperation.java +++ b/java/src/com/zerotier/sdk/VirtualNetworkConfigOperation.java @@ -27,25 +27,52 @@ package com.zerotier.sdk; +/** + * Virtual network configuration update type + * + * Defined in ZeroTierOne.h as ZT_VirtualNetworkConfigOperation + */ public enum VirtualNetworkConfigOperation { /** * Network is coming up (either for the first time or after service restart) */ - VIRTUAL_NETWORK_CONFIG_OPERATION_UP, + VIRTUAL_NETWORK_CONFIG_OPERATION_UP(0), /** * Network configuration has been updated */ - VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE, + VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE(1), /** * Network is going down (not permanently) */ - VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN, + VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN(2), /** * Network is going down permanently (leave/delete) */ - VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY + VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY(3); + + @SuppressWarnings({"FieldCanBeLocal", "unused"}) + private final int id; + + VirtualNetworkConfigOperation(int id) { + this.id = id; + } + + public static VirtualNetworkConfigOperation fromInt(int id) { + switch (id) { + case 0: + return VIRTUAL_NETWORK_CONFIG_OPERATION_UP; + case 1: + return VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE; + case 2: + return VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN; + case 3: + return VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY; + default: + throw new RuntimeException("Unhandled value: " + id); + } + } }