converting JNA to kotlin

connection_type_change
Robinson 2021-04-26 15:33:20 +02:00
parent ea5085ac25
commit ece38d9421
17 changed files with 268 additions and 346 deletions

View File

@ -70,7 +70,7 @@ object ResolveConf {
// modified from: https://github.com/dnsjava/dnsjava/blob/master/src/main/java/org/xbill/DNS/config/WindowsResolverConfigProvider.java
// The recommended method of calling the GetAdaptersAddresses function is to pre-allocate a 15KB working buffer
var buffer: Memory? = Memory(15 * 1024)
var buffer = Memory(15 * 1024)
val size: com.sun.jna.ptr.IntByReference = com.sun.jna.ptr.IntByReference(0)
val flags: Int = IPHlpAPI.GAA_FLAG_SKIP_UNICAST or
@ -106,10 +106,11 @@ object ResolveConf {
var dns: IP_ADAPTER_DNS_SERVER_ADDRESS_XP? = result.FirstDnsServerAddress
while (dns != null) {
var address: InetAddress
var address: InetAddress?
try {
address = dns.Address.toAddress()
if (address is Inet4Address || !address.isSiteLocalAddress) {
address = dns.Address?.toAddress()
if (address is Inet4Address || !address!!.isSiteLocalAddress) {
putIfAbsent(nameServerDomains, Dns.DEFAULT_SEARCH_DOMAIN, Common.socketAddress(address, 53))
} else {
Common.logger.trace(

View File

@ -1,119 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid;
public
class IP_ADAPTER_ADDRESSES_LH extends Structure {
public static
class ByReference extends IP_ADAPTER_ADDRESSES_LH implements Structure.ByReference {}
public int Length;
public int IfIndex;
public IP_ADAPTER_ADDRESSES_LH.ByReference Next;
public String AdapterName;
public IP_ADAPTER_UNICAST_ADDRESS_LH.ByReference FirstUnicastAddress;
public IP_ADAPTER_ANYCAST_ADDRESS_XP.ByReference FirstAnycastAddress;
public IP_ADAPTER_MULTICAST_ADDRESS_XP.ByReference FirstMulticastAddress;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference FirstDnsServerAddress;
public WString DnsSuffix;
public WString Description;
public WString FriendlyName;
public byte[] PhysicalAddress = new byte[8];
public int PhysicalAddressLength;
public int Flags;
public int Mtu;
public int IfType;
public int OperStatus;
public int Ipv6IfIndex;
public int[] ZoneIndices = new int[16];
public Pointer FirstPrefix;
public long TransmitLinkSpeed;
public long ReceiveLinkSpeed;
public Pointer FirstWinsServerAddress;
public Pointer FirstGatewayAddress;
public int Ipv4Metric;
public int Ipv6Metric;
public LUID Luid;
public SOCKET_ADDRESS Dhcpv4Server;
public int CompartmentId;
public Guid.GUID NetworkGuid;
public int ConnectionType;
public int TunnelType;
public SOCKET_ADDRESS Dhcpv6Server;
public byte[] Dhcpv6ClientDuid = new byte[130];
public int Dhcpv6ClientDuidLength;
public int Dhcpv6Iaid;
public IP_ADAPTER_DNS_SUFFIX.ByReference FirstDnsSuffix;
public
IP_ADAPTER_ADDRESSES_LH(Pointer p) {
super(p);
read();
}
public
IP_ADAPTER_ADDRESSES_LH() {}
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Length",
"IfIndex",
"Next",
"AdapterName",
"FirstUnicastAddress",
"FirstAnycastAddress",
"FirstMulticastAddress",
"FirstDnsServerAddress",
"DnsSuffix",
"Description",
"FriendlyName",
"PhysicalAddress",
"PhysicalAddressLength",
"Flags",
"Mtu",
"IfType",
"OperStatus",
"Ipv6IfIndex",
"ZoneIndices",
"FirstPrefix",
"TransmitLinkSpeed",
"ReceiveLinkSpeed",
"FirstWinsServerAddress",
"FirstGatewayAddress",
"Ipv4Metric",
"Ipv6Metric",
"Luid",
"Dhcpv4Server",
"CompartmentId",
"NetworkGuid",
"ConnectionType",
"TunnelType",
"Dhcpv6Server",
"Dhcpv6ClientDuid",
"Dhcpv6ClientDuidLength",
"Dhcpv6Iaid",
"FirstDnsSuffix");
}
}

View File

@ -0,0 +1,107 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Pointer
import com.sun.jna.Structure
import com.sun.jna.WString
import com.sun.jna.platform.win32.Guid
open class IP_ADAPTER_ADDRESSES_LH : Structure {
constructor(p: Pointer) : super(p) {
read()
}
constructor() {}
class ByReference : IP_ADAPTER_ADDRESSES_LH(), Structure.ByReference
@JvmField var Length = 0
@JvmField var IfIndex = 0
@JvmField var Next: ByReference? = null
@JvmField var AdapterName: String? = null
@JvmField var FirstUnicastAddress: IP_ADAPTER_UNICAST_ADDRESS_LH.ByReference? = null
@JvmField var FirstAnycastAddress: IP_ADAPTER_ANYCAST_ADDRESS_XP.ByReference? = null
@JvmField var FirstMulticastAddress: IP_ADAPTER_MULTICAST_ADDRESS_XP.ByReference? = null
@JvmField var FirstDnsServerAddress: IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference? = null
@JvmField var DnsSuffix: WString? = null
@JvmField var Description: WString? = null
@JvmField var FriendlyName: WString? = null
@JvmField var PhysicalAddress = ByteArray(8)
@JvmField var PhysicalAddressLength = 0
@JvmField var Flags = 0
@JvmField var Mtu = 0
@JvmField var IfType = 0
@JvmField var OperStatus = 0
@JvmField var Ipv6IfIndex = 0
@JvmField var ZoneIndices = IntArray(16)
@JvmField var FirstPrefix: Pointer? = null
@JvmField var TransmitLinkSpeed: Long = 0
@JvmField var ReceiveLinkSpeed: Long = 0
@JvmField var FirstWinsServerAddress: Pointer? = null
@JvmField var FirstGatewayAddress: Pointer? = null
@JvmField var Ipv4Metric = 0
@JvmField var Ipv6Metric = 0
@JvmField var Luid: LUID? = null
@JvmField var Dhcpv4Server: SOCKET_ADDRESS? = null
@JvmField var CompartmentId = 0
@JvmField var NetworkGuid: Guid.GUID? = null
@JvmField var ConnectionType = 0
@JvmField var TunnelType = 0
@JvmField var Dhcpv6Server: SOCKET_ADDRESS? = null
@JvmField var Dhcpv6ClientDuid = ByteArray(130)
@JvmField var Dhcpv6ClientDuidLength = 0
@JvmField var Dhcpv6Iaid = 0
@JvmField var FirstDnsSuffix: IP_ADAPTER_DNS_SUFFIX.ByReference? = null
override fun getFieldOrder(): List<String> {
return listOf(
"Length",
"IfIndex",
"Next",
"AdapterName",
"FirstUnicastAddress",
"FirstAnycastAddress",
"FirstMulticastAddress",
"FirstDnsServerAddress",
"DnsSuffix",
"Description",
"FriendlyName",
"PhysicalAddress",
"PhysicalAddressLength",
"Flags",
"Mtu",
"IfType",
"OperStatus",
"Ipv6IfIndex",
"ZoneIndices",
"FirstPrefix",
"TransmitLinkSpeed",
"ReceiveLinkSpeed",
"FirstWinsServerAddress",
"FirstGatewayAddress",
"Ipv4Metric",
"Ipv6Metric",
"Luid",
"Dhcpv4Server",
"CompartmentId",
"NetworkGuid",
"ConnectionType",
"TunnelType",
"Dhcpv6Server",
"Dhcpv6ClientDuid",
"Dhcpv6ClientDuidLength",
"Dhcpv6Iaid",
"FirstDnsSuffix"
)
}
}

View File

@ -1,25 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
public
class IP_ADAPTER_ANYCAST_ADDRESS_XP extends Structure {
public static
class ByReference extends IP_ADAPTER_ANYCAST_ADDRESS_XP implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Length", "Reserved", "Next", "Address");
}
}

View File

@ -0,0 +1,16 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Structure
open class IP_ADAPTER_ANYCAST_ADDRESS_XP : Structure() {
class ByReference : IP_ADAPTER_ANYCAST_ADDRESS_XP(), Structure.ByReference
@JvmField var Length = 0
@JvmField var Reserved = 0
@JvmField var Next: IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference? = null
@JvmField var Address: SOCKET_ADDRESS? = null
override fun getFieldOrder(): List<String> {
return listOf("Length", "Reserved", "Next", "Address")
}
}

View File

@ -1,25 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
public
class IP_ADAPTER_DNS_SERVER_ADDRESS_XP extends Structure {
public static
class ByReference extends IP_ADAPTER_DNS_SERVER_ADDRESS_XP implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Length", "Reserved", "Next", "Address");
}
}

View File

@ -0,0 +1,16 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Structure
open class IP_ADAPTER_DNS_SERVER_ADDRESS_XP : Structure() {
class ByReference : IP_ADAPTER_DNS_SERVER_ADDRESS_XP(), Structure.ByReference
@JvmField var Length = 0
@JvmField var Reserved = 0
@JvmField var Next: ByReference? = null
@JvmField var Address: SOCKET_ADDRESS? = null
override fun getFieldOrder(): List<String> {
return listOf("Length", "Reserved", "Next", "Address")
}
}

View File

@ -1,22 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
public
class IP_ADAPTER_DNS_SUFFIX extends Structure {
public static
class ByReference extends IP_ADAPTER_DNS_SUFFIX implements Structure.ByReference {}
public IP_ADAPTER_DNS_SUFFIX.ByReference Next;
public char[] _String = new char[256];
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Next", "_String");
}
}

View File

@ -0,0 +1,14 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Structure
open class IP_ADAPTER_DNS_SUFFIX : Structure() {
class ByReference : IP_ADAPTER_DNS_SUFFIX(), Structure.ByReference
@JvmField var Next: ByReference? = null
@JvmField var _String = CharArray(256)
override fun getFieldOrder(): List<String> {
return listOf("Next", "_String")
}
}

View File

@ -1,25 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
public
class IP_ADAPTER_MULTICAST_ADDRESS_XP extends Structure {
public static
class ByReference extends IP_ADAPTER_MULTICAST_ADDRESS_XP implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Length", "Reserved", "Next", "Address");
}
}

View File

@ -0,0 +1,16 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Structure
open class IP_ADAPTER_MULTICAST_ADDRESS_XP : Structure() {
class ByReference : IP_ADAPTER_MULTICAST_ADDRESS_XP(), Structure.ByReference
@JvmField var Length = 0
@JvmField var Reserved = 0
@JvmField var Next: IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference? = null
@JvmField var Address: SOCKET_ADDRESS? = null
override fun getFieldOrder(): List<String> {
return listOf("Length", "Reserved", "Next", "Address")
}
}

View File

@ -1,44 +0,0 @@
package dorkbox.netUtil.jna.windows.structs;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
public
class IP_ADAPTER_UNICAST_ADDRESS_LH extends Structure {
public static
class ByReference extends IP_ADAPTER_UNICAST_ADDRESS_LH implements Structure.ByReference {}
public int Length;
public int IfIndex;
public IP_ADAPTER_UNICAST_ADDRESS_LH.ByReference Next;
public SOCKET_ADDRESS Address;
public int PrefixOrigin;
public int SuffixOrigin;
public int DadState;
public int ValidLifetime;
public int PreferredLifetime;
public int LeaseLifetime;
public byte OnLinkPrefixLength;
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("Length",
"IfIndex",
"Next",
"Address",
"PrefixOrigin",
"SuffixOrigin",
"DadState",
"ValidLifetime",
"PreferredLifetime",
"LeaseLifetime",
"OnLinkPrefixLength");
}
}

View File

@ -0,0 +1,35 @@
package dorkbox.netUtil.jna.windows.structs
import com.sun.jna.Structure
open class IP_ADAPTER_UNICAST_ADDRESS_LH : Structure() {
class ByReference : IP_ADAPTER_UNICAST_ADDRESS_LH(), Structure.ByReference
@JvmField var Length = 0
@JvmField var IfIndex = 0
@JvmField var Next: ByReference? = null
@JvmField var Address: SOCKET_ADDRESS? = null
@JvmField var PrefixOrigin = 0
@JvmField var SuffixOrigin = 0
@JvmField var DadState = 0
@JvmField var ValidLifetime = 0
@JvmField var PreferredLifetime = 0
@JvmField var LeaseLifetime = 0
@JvmField var OnLinkPrefixLength: Byte = 0
override fun getFieldOrder(): List<String> {
return listOf(
"Length",
"IfIndex",
"Next",
"Address",
"PrefixOrigin",
"SuffixOrigin",
"DadState",
"ValidLifetime",
"PreferredLifetime",
"LeaseLifetime",
"OnLinkPrefixLength"
)
}
}

View File

@ -1,18 +1,12 @@
package dorkbox.netUtil.jna.windows.structs;
package dorkbox.netUtil.jna.windows.structs
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure
import com.sun.jna.Structure;
class LUID : Structure() {
@JvmField var LowPart = 0
@JvmField var HighPart = 0
public
class LUID extends Structure {
public int LowPart;
public int HighPart;
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("LowPart", "HighPart");
override fun getFieldOrder(): List<String> {
return listOf("LowPart", "HighPart")
}
}

View File

@ -1,27 +1,20 @@
package dorkbox.netUtil.jna.windows.structs;
package dorkbox.netUtil.jna.windows.structs
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer
import com.sun.jna.Structure
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
class SOCKADDR_IN(p: Pointer) : Structure(p) {
@JvmField var sin_family: Short = 0
@JvmField var sin_port: Short = 0
public
class SOCKADDR_IN extends Structure {
public short sin_family;
public short sin_port;
public byte[] sin_addr = new byte[4];
public byte[] sin_zero = new byte[8];
@JvmField var sin_addr = ByteArray(4)
@JvmField var sin_zero = ByteArray(8)
public
SOCKADDR_IN(Pointer p) {
super(p);
read();
init {
read()
}
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("sin_family", "sin_port", "sin_addr", "sin_zero");
override fun getFieldOrder(): List<String> {
return listOf("sin_family", "sin_port", "sin_addr", "sin_zero")
}
}

View File

@ -1,29 +1,20 @@
package dorkbox.netUtil.jna.windows.structs;
package dorkbox.netUtil.jna.windows.structs
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer
import com.sun.jna.Structure
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
class SOCKADDR_IN6(p: Pointer) : Structure(p) {
@JvmField var sin6_family: Short = 0
@JvmField var sin6_port: Short = 0
@JvmField var sin6_flowinfo = 0
@JvmField var sin6_addr = ByteArray(16)
@JvmField var sin6_scope_id = 0
public
class SOCKADDR_IN6 extends Structure {
public short sin6_family;
public short sin6_port;
public int sin6_flowinfo;
public byte[] sin6_addr = new byte[16];
public int sin6_scope_id;
public
SOCKADDR_IN6(Pointer p) {
super(p);
read();
init {
read()
}
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("sin6_family", "sin6_port", "sin6_flowinfo", "sin6_addr", "sin6_scope_id");
override fun getFieldOrder(): List<String> {
return listOf("sin6_family", "sin6_port", "sin6_flowinfo", "sin6_addr", "sin6_scope_id")
}
}

View File

@ -1,39 +1,38 @@
package dorkbox.netUtil.jna.windows.structs;
package dorkbox.netUtil.jna.windows.structs
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer
import com.sun.jna.Structure
import java.net.Inet6Address
import java.net.InetAddress
import java.net.UnknownHostException
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
class SOCKET_ADDRESS : Structure() {
companion object {
const val AF_INET = 2
const val AF_INET6 = 23
}
public
class SOCKET_ADDRESS extends Structure {
public static final int AF_INET = 2;
public static final int AF_INET6 = 23;
@JvmField var lpSockaddr: Pointer? = null
@JvmField var iSockaddrLength = 0
public Pointer lpSockaddr;
public int iSockaddrLength;
public
InetAddress toAddress() throws UnknownHostException {
switch (((int) lpSockaddr.getShort(0))) {
case AF_INET:
SOCKADDR_IN in4 = new SOCKADDR_IN(lpSockaddr);
return InetAddress.getByAddress(in4.sin_addr);
case AF_INET6:
SOCKADDR_IN6 in6 = new SOCKADDR_IN6(lpSockaddr);
return Inet6Address.getByAddress("", in6.sin6_addr, in6.sin6_scope_id);
@Throws(UnknownHostException::class)
fun toAddress(): InetAddress? {
when (lpSockaddr!!.getShort(0).toInt()) {
AF_INET -> {
val in4 = SOCKADDR_IN(lpSockaddr!!)
return InetAddress.getByAddress(in4.sin_addr)
}
AF_INET6 -> {
val in6 = SOCKADDR_IN6(lpSockaddr!!)
return Inet6Address.getByAddress("", in6.sin6_addr, in6.sin6_scope_id)
}
}
return null;
return null
}
@Override
protected
List<String> getFieldOrder() {
return Arrays.asList("lpSockaddr", "iSockaddrLength");
override fun getFieldOrder(): List<String> {
return listOf("lpSockaddr", "iSockaddrLength")
}
}