Browse Source

Node.networkConfig now only needs to populate the lists of assigned addresses and multicast subscriptions and then it's finished

Signed-off-by: Grant Limberg <[email protected]>
Grant Limberg 10 years ago
parent
commit
d66f2cd54d

+ 181 - 3
java/jni/com_zerotierone_sdk_Node.cpp

@@ -692,7 +692,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_status
         }
     }
 
-    env->SetIntField(nodeStatusObj, addressField, nodeStatus.address);
+    env->SetLongField(nodeStatusObj, addressField, nodeStatus.address);
 
     jstring pubIdentStr = env->NewStringUTF(nodeStatus.publicIdentity);
     if(pubIdentStr == NULL)
@@ -751,10 +751,188 @@ JNIEXPORT jobject JNICALL Java_com_zerotierone_sdk_Node_networkConfig
     
     ZT1_VirtualNetworkConfig *vnetConfig = ZT1_Node_networkConfig(node, nwid);
     
-    // TODO: copy data from C to Java
+    static jfieldID nwidField = NULL;
+    static jfieldID macField = NULL;
+    static jfieldID nameField = NULL;
+    static jfieldID statusField = NULL;
+    static jfieldID typeField = NULL;
+    static jfieldID mtuField = NULL;
+    static jfieldID dhcpField = NULL;
+    static jfieldID bridgeField = NULL;
+    static jfieldID broadcastEnabledField = NULL;
+    static jfieldID portErrorField = NULL;
+    static jfieldID enabledField = NULL;
+    static jfieldID netconfRevisionField = NULL;
+    static jfieldID multicastSubscriptionsField = NULL;
+    static jfieldID assignedAddressesField = NULL;
+
+    if(nwidField == NULL)
+    {
+        nwidField = env->GetFieldID(vnetConfigClass, "nwid", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(nwidField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(macField == NULL)
+    {
+        macField = env->GetFieldID(vnetConfigClass, "mac", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(macField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(nameField == NULL)
+    {
+        nameField = env->GetFieldID(vnetConfigClass, "name", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(nameField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(statusField == NULL)
+    {
+        statusField = env->GetFieldID(vnetConfigClass, "status", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(statusField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(typeField == NULL)
+    {
+        typeField = env->GetFieldID(vnetConfigClass, "type", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(typeField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(mtuField == NULL)
+    {
+        mtuField = env->GetFieldID(vnetConfigClass, "mtu", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(mtuField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(dhcpField == NULL)
+    {
+        dhcpField = env->GetFieldID(vnetConfigClass, "dhcp", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(dhcpField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(bridgeField == NULL)
+    {
+        bridgeField = env->GetFieldID(vnetConfigClass, "bridge", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(bridgeField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(broadcastEnabledField == NULL)
+    {
+        broadcastEnabledField = env->GetFieldID(vnetConfigClass, "broadcastEnabled", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(broadcastEnabledField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(portErrorField == NULL)
+    {
+        portErrorField == env->GetFieldID(vnetConfigClass, "portError", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(portErrorField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(enabledField == NULL)
+    {
+        enabledField = env->GetFieldID(vnetConfigClass, "enabled", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(enabledField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(netconfRevisionField == NULL)
+    {
+        netconfRevisionField = env->GetFieldID(vnetConfigClass, "netconfRevision", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(netconfRevisionField == NULL)
+        {
+            return NULL;
+        }
+    }
+
+    if(multicastSubscriptionsField == NULL)
+    {
+        multicastSubscriptionsField = env->GetFieldID(vnetConfigClass, "multicastSubscriptions", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(multicastSubscriptionsField == NULL)
+        {
+            return NULL;
+        }
+    }
 
+    if(assignedAddressesField == NULL)
+    {
+        assignedAddressesField = env->GetFieldID(vnetConfigClass, "assignedAddresses", "Lcom/zerotierone/sdk/VirtualNetworkConfig;");
+        if(assignedAddressesField == NULL)
+        {
+            return NULL;
+        }
+    }
 
-    return NULL;
+    env->SetLongField(vnetConfigObj, nwidField, vnetConfig->nwid);
+    env->SetLongField(vnetConfigObj, macField, vnetConfig->mac);
+    jstring nameStr = env->NewStringUTF(vnetConfig->name);
+    if(nameStr == NULL)
+    {
+        return NULL; // out of memory
+    }
+    env->SetObjectField(vnetConfigObj, nameField, nameStr);
+
+    jobject statusObject = createVirtualNetworkStatus(env, vnetConfig->status);
+    if(statusObject == NULL)
+    {
+        return NULL;
+    }
+    env->SetObjectField(vnetConfigObj, statusField, statusObject);
+
+    jobject typeObject = createVirtualNetworkType(env, vnetConfig->type);
+    if(typeObject == NULL)
+    {
+        return NULL;
+    }
+    env->SetObjectField(vnetConfigObj, typeField, typeObject);
+
+    env->SetIntField(vnetConfigObj, mtuField, vnetConfig->mtu);
+    env->SetBooleanField(vnetConfigObj, dhcpField, vnetConfig->dhcp);
+    env->SetBooleanField(vnetConfigObj, bridgeField, vnetConfig->bridge);
+    env->SetBooleanField(vnetConfigObj, broadcastEnabledField, vnetConfig->broadcastEnabled);
+    env->SetBooleanField(vnetConfigObj, portErrorField, vnetConfig->portError);
+
+
+    jobject mcastSubsArrayObj = NULL;
+    jobject assignedAddrArrayObj = NULL;
+
+
+    env->SetObjectField(vnetConfigObj, multicastSubscriptionsField, mcastSubsArrayObj);
+    env->SetObjectField(vnetConfigObj, assignedAddressesField, assignedAddrArrayObj);
+
+    ZT1_Node_freeQueryResult(node, vnetConfig);
+    vnetConfig = NULL;
+    
+    return vnetConfigObj;
 }
 
 /*

+ 0 - 1
java/src/com/zerotierone/sdk/VirtualNetworkConfig.java

@@ -47,7 +47,6 @@ public class VirtualNetworkConfig {
     private boolean portError;
     private boolean enabled;
     private long netconfRevision;
-    private int multicastSubscriptionCount;
     private ArrayList<MulticastGroup> multicastSubscriptions;
     private ArrayList<InetAddress> assignedAddresses;