Added implementation for Node.version()

Signed-off-by: Grant Limberg <glimberg@gmail.com>
This commit is contained in:
Grant Limberg 2015-04-22 21:29:45 -07:00
parent f5bb57d5aa
commit 3ccaef88b7
4 changed files with 94 additions and 7 deletions

View file

@ -639,6 +639,91 @@ JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_multicastUnsubscribe
return createResultObject(env, rc);
}
/*
* Class: com_zerotierone_sdk_Node
* Method: version
* Signature: (J)Lcom/zerotierone/sdk/Version;
*/
JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_version
(JNIEnv *env, jobject obj)
{
// create a com.zerotierone.sdk.Version object
jclass versionClass = env->FindClass("com.zerotierone.sdk.Version");
if(versionClass == NULL)
{
return NULL;
}
jmethodID versionConstructor = env->GetMethodID(
versionClass, "<init>", "()V");
if(versionConstructor == NULL)
{
return NULL;
}
jobject versionObj = env->NewObject(versionClass, versionConstructor);
if(versionObj == NULL)
{
return NULL;
}
int major = 0;
int minor = 0;
int revision = 0;
unsigned long featureFlags = 0;
ZT1_version(&major, &minor, &revision, &featureFlags);
// copy data to Version object
static jfieldID majorField = NULL;
static jfieldID minorField = NULL;
static jfieldID revisionField = NULL;
static jfieldID featureFlagsField = NULL;
if(majorField == NULL)
{
majorField = env->GetFieldID(versionClass, "major", "Lcom.zerotierone.sdk.Version");
if(majorField = NULL)
{
return NULL;
}
}
if(minorField == NULL)
{
minorField = env->GetFieldID(versionClass, "minor", "Lcom.zerotierone.sdk.Version");
if(minorField == NULL)
{
return NULL;
}
}
if(revisionField == NULL)
{
revisionField = env->GetFieldID(versionClass, "revision", "Lcom.zerotierone.sdk.Version");
if(revisionField == NULL)
{
return NULL;
}
}
if(featureFlagsField == NULL)
{
featureFlagsField = env->GetFieldID(versionClass, "featureFlags", "Lcom.zerotierone.sdk.Version");
if(featureFlagsField == NULL)
{
return NULL;
}
}
env->SetIntField(versionObj, majorField, (jint)major);
env->SetIntField(versionObj, minorField, (jint)minor);
env->SetIntField(versionObj, revisionField, (jint)revision);
env->SetLongField(versionObj, featureFlagsField, (jlong)featureFlags);
return versionObj;
}
#ifdef __cplusplus
} // extern "C"