make VirtualNetworkDNS a plain data class

This commit is contained in:
Brenton Bostick 2023-02-01 06:40:42 -05:00
parent 8b0be5c1fc
commit f9a27d6778
4 changed files with 69 additions and 30 deletions

View file

@ -353,37 +353,64 @@ jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route)
return routeObj;
}
//
// may return NULL
//
jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns)
{
jobject dnsObj = env->NewObject(VirtualNetworkDNS_class, VirtualNetworkDNS_ctor);
if(env->ExceptionCheck() || dnsObj == NULL) {
if (strlen(dns.domain) == 0) {
LOGD("dns.domain is empty; returning NULL");
return NULL;
}
if (strlen(dns.domain) > 0) {
jstring domain = env->NewStringUTF(dns.domain);
if (env->ExceptionCheck() || domain == NULL) {
LOGE("Exception creating new string");
return NULL;
}
jstring domain = env->NewStringUTF(dns.domain);
jobject addrList = env->NewObject(ArrayList_class, ArrayList_ctor, 0);
if (env->ExceptionCheck() || addrList == NULL) {
LOGE("Exception creating new ArrayList");
return NULL;
}
jobject addrArray = env->NewObject(ArrayList_class, ArrayList_ctor, 0);
for (int i = 0; i < ZT_MAX_DNS_SERVERS; ++i) { //NOLINT
struct sockaddr_storage nullAddr;
memset(&nullAddr, 0, sizeof(struct sockaddr_storage));
for(int i = 0; i < ZT_MAX_DNS_SERVERS; ++i) {
struct sockaddr_storage tmp = dns.server_addr[i];
struct sockaddr_storage tmp = dns.server_addr[i];
if (memcmp(&tmp, &nullAddr, sizeof(struct sockaddr_storage)) != 0) {
jobject addr = newInetSocketAddress(env, tmp);
env->CallBooleanMethod(addrArray, ArrayList_add_method, addr);
env->DeleteLocalRef(addr);
}
//
// may be NULL
//
jobject addr = newInetSocketAddress(env, tmp);
if (env->ExceptionCheck()) {
return NULL;
}
env->SetObjectField(dnsObj, VirtualNetworkDNS_domain_field, domain);
env->SetObjectField(dnsObj, VirtualNetworkDNS_servers_field, addrArray);
if (addr == NULL) {
continue;
}
return dnsObj;
env->CallBooleanMethod(addrList, ArrayList_add_method, addr);
if(env->ExceptionCheck())
{
LOGE("Exception calling add");
return NULL;
}
env->DeleteLocalRef(addr);
}
return NULL;
jobject dnsObj = env->NewObject(
VirtualNetworkDNS_class,
VirtualNetworkDNS_ctor,
domain,
addrList);
if (env->ExceptionCheck() || dnsObj == NULL) {
LOGE("Exception creating new VirtualNetworkDNS");
return NULL;
}
return dnsObj;
}
jobject newNodeStatus(JNIEnv *env, const ZT_NodeStatus &status) {