diff options
author | Grant Limberg <glimberg@gmail.com> | 2015-04-24 18:39:17 -0700 |
---|---|---|
committer | Grant Limberg <glimberg@gmail.com> | 2015-04-24 18:39:17 -0700 |
commit | 28168fa673c359270089439179aa09107a882902 (patch) | |
tree | 0a4888153541e270f6a65696d241f1804ff47302 /java | |
parent | 99af0f3a88a26632252f3b5480a18ca173b9e85f (diff) | |
download | infinitytier-28168fa673c359270089439179aa09107a882902.tar.gz infinitytier-28168fa673c359270089439179aa09107a882902.zip |
implement VirtualNetworkConfigFunctionCallback
Diffstat (limited to 'java')
-rw-r--r-- | java/jni/ZT1_jniutils.cpp | 39 | ||||
-rw-r--r-- | java/jni/ZT1_jniutils.h | 1 | ||||
-rw-r--r-- | java/jni/com_zerotierone_sdk_Node.cpp | 39 | ||||
-rw-r--r-- | java/src/com/zerotierone/sdk/VirtualNetworkConfigListener.java | 5 |
4 files changed, 78 insertions, 6 deletions
diff --git a/java/jni/ZT1_jniutils.cpp b/java/jni/ZT1_jniutils.cpp index 01cb51cf..82f5dba8 100644 --- a/java/jni/ZT1_jniutils.cpp +++ b/java/jni/ZT1_jniutils.cpp @@ -215,11 +215,47 @@ jobject createVirtualNetworkType(JNIEnv *env, ZT1_VirtualNetworkType type) break; } - jfieldID enumField = env->GetStaticFieldID(vntypeClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtyalNetworkType;"); + jfieldID enumField = env->GetStaticFieldID(vntypeClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtualNetworkType;"); vntypeObject = env->GetStaticObjectField(vntypeClass, enumField); return vntypeObject; } +jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT1_VirtualNetworkConfigOperation op) +{ + static jclass vnetConfigOpClass = NULL; + jobject vnetConfigOpObject = NULL; + + if(vnetConfigOpClass == NULL) + { + vnetConfigOpClass = env->FindClass("com/zerotierone/sdk/VirtualNetworkConfigOperation"); + if(vnetConfigOpClass == NULL) + { + return NULL; + } + } + + std::string fieldName; + switch(op) + { + case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_UP: + fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_UP"; + break; + case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE: + fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE"; + break; + case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN: + fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN"; + break; + case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: + fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY"; + break; + } + + jfieldID enumField = env->GetStaticFieldID(vnetConfigOpClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtualNetworkConfigOperation;"); + vnetConfigOpObject = env->GetStaticObjectField(vnetConfigOpClass, enumField); + return vnetConfigOpObject; +} + jobject newArrayList(JNIEnv *env) { if(arrayListClass == NULL) @@ -843,6 +879,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT1_VirtualNetworkConfig &vnetConfig return vnetConfigObj; } + #ifdef __cplusplus } #endif
\ No newline at end of file diff --git a/java/jni/ZT1_jniutils.h b/java/jni/ZT1_jniutils.h index 88d34d6c..df22b0ca 100644 --- a/java/jni/ZT1_jniutils.h +++ b/java/jni/ZT1_jniutils.h @@ -12,6 +12,7 @@ jobject createVirtualNetworkStatus(JNIEnv *env, ZT1_VirtualNetworkStatus status) jobject createVirtualNetworkType(JNIEnv *env, ZT1_VirtualNetworkType type); jobject createEvent(JNIEnv *env, ZT1_Event event); jobject createPeerRole(JNIEnv *env, ZT1_PeerRole role); +jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT1_VirtualNetworkConfigOperation op); jobject newArrayList(JNIEnv *env); bool appendItemToArrayList(JNIEnv *env, jobject array, jobject object); diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index fb72ef86..fe8c8c3e 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -65,14 +65,49 @@ namespace { }; - int VirtualNetworkConfigFunctionCallback(ZT1_Node *node,void *userData,uint64_t,enum ZT1_VirtualNetworkConfigOperation,const ZT1_VirtualNetworkConfig *) + int VirtualNetworkConfigFunctionCallback(ZT1_Node *node,void *userData,uint64_t nwid,enum ZT1_VirtualNetworkConfigOperation operation, const ZT1_VirtualNetworkConfig *config) { JniRef *ref = (JniRef*)userData; assert(ref->node == node); JNIEnv *env = ref->env; - return 0; + static jclass configListenerClass = NULL; + static jmethodID callbackMethod = NULL; + + if(configListenerClass == NULL) + { + configListenerClass = env->GetObjectClass(ref->configListener); + if(configListenerClass == NULL) + { + return -1; + } + } + + if(callbackMethod == NULL) + { + callbackMethod = env->GetMethodID(configListenerClass, + "onNetworkConfigurationUpdated", + "(JLcom/zerotierone/sdk/VirtualNetworkConfigOperation;Lcom/zerotierone/sdk/VirtualNetworkConfig;)I"); + if(callbackMethod == NULL) + { + return -2; + } + } + + jobject operationObject = createVirtualNetworkConfigOperation(env, operation); + if(operationObject == NULL) + { + return -3; + } + + jobject networkConfigObject = newNetworkConfig(env, *config); + if(networkConfigObject == NULL) + { + return -4; + } + + return env->CallIntMethod(ref->configListener, callbackMethod, (jlong)nwid, operationObject, networkConfigObject); } void VirtualNetworkFrameFunctionCallback(ZT1_Node *node,void *userData,uint64_t,uint64_t,uint64_t,unsigned int,unsigned int,const void *,unsigned int) diff --git a/java/src/com/zerotierone/sdk/VirtualNetworkConfigListener.java b/java/src/com/zerotierone/sdk/VirtualNetworkConfigListener.java index 78d11987..9378b6c9 100644 --- a/java/src/com/zerotierone/sdk/VirtualNetworkConfigListener.java +++ b/java/src/com/zerotierone/sdk/VirtualNetworkConfigListener.java @@ -30,9 +30,8 @@ package com.zerotierone.sdk; public interface VirtualNetworkConfigListener { - public void onNetworkConfigurationUpdated( - Node node, - long someValue, + public int onNetworkConfigurationUpdated( + long nwid, VirtualNetworkConfigOperation op, VirtualNetworkConfig config); }
\ No newline at end of file |