2012-05-31 11:49:39 +02:00
|
|
|
/*
|
|
|
|
* Copyright 2012 The Netty Project
|
|
|
|
*
|
|
|
|
* The Netty Project licenses this file to you under the Apache License,
|
|
|
|
* version 2.0 (the "License"); you may not use this file except in compliance
|
|
|
|
* with the License. You may obtain a copy of the License at:
|
|
|
|
*
|
2012-06-04 22:31:44 +02:00
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
2012-05-31 11:49:39 +02:00
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
* License for the specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*/
|
|
|
|
package io.netty.channel.socket;
|
|
|
|
|
2016-07-29 10:30:08 +02:00
|
|
|
import io.netty.util.NetUtil;
|
|
|
|
|
2015-07-12 12:34:05 +02:00
|
|
|
import java.net.Inet4Address;
|
|
|
|
import java.net.Inet6Address;
|
|
|
|
import java.net.InetAddress;
|
|
|
|
|
2012-05-31 11:49:39 +02:00
|
|
|
/**
|
2012-12-17 16:01:58 +01:00
|
|
|
* Internet Protocol (IP) families used byte the {@link DatagramChannel}
|
2012-05-31 11:49:39 +02:00
|
|
|
*/
|
|
|
|
public enum InternetProtocolFamily {
|
2017-04-19 20:54:23 +02:00
|
|
|
IPv4(Inet4Address.class, 1, NetUtil.LOCALHOST4),
|
|
|
|
IPv6(Inet6Address.class, 2, NetUtil.LOCALHOST6);
|
2015-07-12 12:34:05 +02:00
|
|
|
|
|
|
|
private final Class<? extends InetAddress> addressType;
|
2016-07-29 10:30:08 +02:00
|
|
|
private final int addressNumber;
|
|
|
|
private final InetAddress localHost;
|
2015-07-12 12:34:05 +02:00
|
|
|
|
2017-04-19 20:54:23 +02:00
|
|
|
InternetProtocolFamily(Class<? extends InetAddress> addressType, int addressNumber, InetAddress localHost) {
|
2015-07-12 12:34:05 +02:00
|
|
|
this.addressType = addressType;
|
2017-04-19 20:54:23 +02:00
|
|
|
this.addressNumber = addressNumber;
|
|
|
|
this.localHost = localHost;
|
2015-07-12 12:34:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the address type of this protocol family.
|
|
|
|
*/
|
|
|
|
public Class<? extends InetAddress> addressType() {
|
|
|
|
return addressType;
|
|
|
|
}
|
2016-07-29 10:30:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the
|
|
|
|
* <a href="http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml">address number</a>
|
|
|
|
* of the family.
|
|
|
|
*/
|
|
|
|
public int addressNumber() {
|
|
|
|
return addressNumber;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the {@link InetAddress} that represent the {@code LOCALHOST} for the family.
|
|
|
|
*/
|
|
|
|
public InetAddress localhost() {
|
|
|
|
return localHost;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the {@link InternetProtocolFamily} for the given {@link InetAddress}.
|
|
|
|
*/
|
|
|
|
public static InternetProtocolFamily of(InetAddress address) {
|
|
|
|
if (address instanceof Inet4Address) {
|
|
|
|
return IPv4;
|
|
|
|
}
|
|
|
|
if (address instanceof Inet6Address) {
|
|
|
|
return IPv6;
|
|
|
|
}
|
|
|
|
throw new IllegalArgumentException("address " + address + " not supported");
|
|
|
|
}
|
2012-05-31 11:49:39 +02:00
|
|
|
}
|