Motivation: 4 and 5 were diverged long time ago and we recently reverted some of the early commits in master. We must make sure 4.1 and master are not very different now. Modification: Fix found differences Result: 4.1 and master got closer.
109 lines
5.0 KiB
Java
109 lines
5.0 KiB
Java
/*
|
||
* 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:
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* 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;
|
||
|
||
import io.netty.buffer.ByteBufAllocator;
|
||
import io.netty.util.AbstractConstant;
|
||
import io.netty.util.ConstantPool;
|
||
|
||
import java.net.InetAddress;
|
||
import java.net.NetworkInterface;
|
||
|
||
/**
|
||
* A {@link ChannelOption} allows to configure a {@link ChannelConfig} in a type-safe
|
||
* way. Which {@link ChannelOption} is supported depends on the actual implementation
|
||
* of {@link ChannelConfig} and may depend on the nature of the transport it belongs
|
||
* to.
|
||
*
|
||
* @param <T> the type of the value which is valid for the {@link ChannelOption}
|
||
*/
|
||
public final class ChannelOption<T> extends AbstractConstant<ChannelOption<T>> {
|
||
|
||
private static final ConstantPool<ChannelOption<Object>> pool = new ConstantPool<ChannelOption<Object>>() {
|
||
@Override
|
||
protected ChannelOption<Object> newConstant(int id, String name) {
|
||
return new ChannelOption<Object>(id, name);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Returns the {@link ChannelOption} of the specified name.
|
||
*/
|
||
@SuppressWarnings("unchecked")
|
||
public static <T> ChannelOption<T> valueOf(String name) {
|
||
return (ChannelOption<T>) pool.valueOf(name);
|
||
}
|
||
|
||
/**
|
||
* Shortcut of {@link #valueOf(String) valueOf(firstNameComponent.getName() + "#" + secondNameComponent)}.
|
||
*/
|
||
@SuppressWarnings("unchecked")
|
||
public static <T> ChannelOption<T> valueOf(Class<?> firstNameComponent, String secondNameComponent) {
|
||
return (ChannelOption<T>) pool.valueOf(firstNameComponent, secondNameComponent);
|
||
}
|
||
|
||
public static final ChannelOption<ByteBufAllocator> ALLOCATOR = valueOf("ALLOCATOR");
|
||
public static final ChannelOption<RecvByteBufAllocator> RCVBUF_ALLOCATOR = valueOf("RCVBUF_ALLOCATOR");
|
||
public static final ChannelOption<MessageSizeEstimator> MESSAGE_SIZE_ESTIMATOR = valueOf("MESSAGE_SIZE_ESTIMATOR");
|
||
|
||
public static final ChannelOption<Integer> CONNECT_TIMEOUT_MILLIS = valueOf("CONNECT_TIMEOUT_MILLIS");
|
||
public static final ChannelOption<Integer> MAX_MESSAGES_PER_READ = valueOf("MAX_MESSAGES_PER_READ");
|
||
public static final ChannelOption<Integer> WRITE_SPIN_COUNT = valueOf("WRITE_SPIN_COUNT");
|
||
public static final ChannelOption<Integer> WRITE_BUFFER_HIGH_WATER_MARK = valueOf("WRITE_BUFFER_HIGH_WATER_MARK");
|
||
public static final ChannelOption<Integer> WRITE_BUFFER_LOW_WATER_MARK = valueOf("WRITE_BUFFER_LOW_WATER_MARK");
|
||
|
||
public static final ChannelOption<Boolean> ALLOW_HALF_CLOSURE = valueOf("ALLOW_HALF_CLOSURE");
|
||
public static final ChannelOption<Boolean> AUTO_READ = valueOf("AUTO_READ");
|
||
|
||
public static final ChannelOption<Boolean> SO_BROADCAST = valueOf("SO_BROADCAST");
|
||
public static final ChannelOption<Boolean> SO_KEEPALIVE = valueOf("SO_KEEPALIVE");
|
||
public static final ChannelOption<Integer> SO_SNDBUF = valueOf("SO_SNDBUF");
|
||
public static final ChannelOption<Integer> SO_RCVBUF = valueOf("SO_RCVBUF");
|
||
public static final ChannelOption<Boolean> SO_REUSEADDR = valueOf("SO_REUSEADDR");
|
||
public static final ChannelOption<Integer> SO_LINGER = valueOf("SO_LINGER");
|
||
public static final ChannelOption<Integer> SO_BACKLOG = valueOf("SO_BACKLOG");
|
||
public static final ChannelOption<Integer> SO_TIMEOUT = valueOf("SO_TIMEOUT");
|
||
|
||
public static final ChannelOption<Integer> IP_TOS = valueOf("IP_TOS");
|
||
public static final ChannelOption<InetAddress> IP_MULTICAST_ADDR = valueOf("IP_MULTICAST_ADDR");
|
||
public static final ChannelOption<NetworkInterface> IP_MULTICAST_IF = valueOf("IP_MULTICAST_IF");
|
||
public static final ChannelOption<Integer> IP_MULTICAST_TTL = valueOf("IP_MULTICAST_TTL");
|
||
public static final ChannelOption<Boolean> IP_MULTICAST_LOOP_DISABLED = valueOf("IP_MULTICAST_LOOP_DISABLED");
|
||
|
||
public static final ChannelOption<Boolean> TCP_NODELAY = valueOf("TCP_NODELAY");
|
||
|
||
@Deprecated
|
||
public static final ChannelOption<Boolean> DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION =
|
||
valueOf("DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION");
|
||
|
||
/**
|
||
* Creates a new {@link ChannelOption} with the specified unique {@code name}.
|
||
*/
|
||
private ChannelOption(int id, String name) {
|
||
super(id, name);
|
||
}
|
||
|
||
/**
|
||
* Validate the value which is set for the {@link ChannelOption}. Sub-classes
|
||
* may override this for special checks.
|
||
*/
|
||
public void validate(T value) {
|
||
if (value == null) {
|
||
throw new NullPointerException("value");
|
||
}
|
||
}
|
||
}
|