From 28168fa673c359270089439179aa09107a882902 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 24 Apr 2015 18:39:17 -0700 Subject: implement VirtualNetworkConfigFunctionCallback --- java/jni/com_zerotierone_sdk_Node.cpp | 39 +++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'java/jni/com_zerotierone_sdk_Node.cpp') 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) -- cgit v1.2.3