125 lines
2.7 KiB
Java
125 lines
2.7 KiB
Java
|
|
/*
|
||
|
|
* Copyright (c)2013-2021 ZeroTier, Inc.
|
||
|
|
*
|
||
|
|
* Use of this software is governed by the Business Source License included
|
||
|
|
* in the LICENSE.TXT file in the project's root directory.
|
||
|
|
*
|
||
|
|
* Change Date: 2026-01-01
|
||
|
|
*
|
||
|
|
* On the date above, in accordance with the Business Source License, use
|
||
|
|
* of this software will be governed by version 2.0 of the Apache License.
|
||
|
|
*/
|
||
|
|
/****/
|
||
|
|
|
||
|
|
package com.zerotier.sdk;
|
||
|
|
|
||
|
|
import com.zerotier.sdk.ZeroTierNative;
|
||
|
|
import java.net.InetAddress;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convenience class for holding address information. Used internally by JNI layer.
|
||
|
|
*/
|
||
|
|
class ZeroTierSocketAddress {
|
||
|
|
private byte[] _ip6 = new byte[16];
|
||
|
|
private byte[] _ip4 = new byte[4];
|
||
|
|
|
||
|
|
private int _family;
|
||
|
|
private int _port; // Also reused for netmask or prefix
|
||
|
|
|
||
|
|
public ZeroTierSocketAddress()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Constructor
|
||
|
|
*/
|
||
|
|
public ZeroTierSocketAddress(String ipStr, int port)
|
||
|
|
{
|
||
|
|
if (ipStr.contains(":")) {
|
||
|
|
_family = ZeroTierNative.ZTS_AF_INET6;
|
||
|
|
try {
|
||
|
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||
|
|
_ip6 = ip.getAddress();
|
||
|
|
}
|
||
|
|
catch (Exception e) {
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if (ipStr.contains(".")) {
|
||
|
|
_family = ZeroTierNative.ZTS_AF_INET;
|
||
|
|
try {
|
||
|
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||
|
|
_ip4 = ip.getAddress();
|
||
|
|
}
|
||
|
|
catch (Exception e) {
|
||
|
|
}
|
||
|
|
}
|
||
|
|
_port = port;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convert to string (ip portion only)
|
||
|
|
*/
|
||
|
|
public String ipString()
|
||
|
|
{
|
||
|
|
if (_family == ZeroTierNative.ZTS_AF_INET) {
|
||
|
|
try {
|
||
|
|
InetAddress inet = InetAddress.getByAddress(_ip4);
|
||
|
|
return "" + inet.getHostAddress();
|
||
|
|
}
|
||
|
|
catch (Exception e) {
|
||
|
|
System.out.println(e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (_family == ZeroTierNative.ZTS_AF_INET6) {
|
||
|
|
try {
|
||
|
|
InetAddress inet = InetAddress.getByAddress(_ip6);
|
||
|
|
return "" + inet.getHostAddress();
|
||
|
|
}
|
||
|
|
catch (Exception e) {
|
||
|
|
System.out.println(e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convert to string (ip and port)
|
||
|
|
*/
|
||
|
|
public String toString()
|
||
|
|
{
|
||
|
|
return ipString() + ":" + _port;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convert to string (ip+netmask and port)
|
||
|
|
*/
|
||
|
|
public String toCIDR()
|
||
|
|
{
|
||
|
|
return ipString() + "/" + _port;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get port
|
||
|
|
*/
|
||
|
|
public int getPort()
|
||
|
|
{
|
||
|
|
return _port;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get netmask
|
||
|
|
*/
|
||
|
|
public int getNetmask()
|
||
|
|
{
|
||
|
|
return _port;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get prefix (stored in port)
|
||
|
|
*/
|
||
|
|
public int getPrefix()
|
||
|
|
{
|
||
|
|
return _port;
|
||
|
|
}
|
||
|
|
}
|