/* * Copyright 2011 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 org.jboss.netty.channel.socket; import java.net.Socket; import java.net.SocketException; import org.jboss.netty.channel.ChannelException; import org.jboss.netty.channel.DefaultChannelConfig; import org.jboss.netty.util.internal.ConversionUtil; /** * The default {@link SocketChannelConfig} implementation. */ public class DefaultSocketChannelConfig extends DefaultChannelConfig implements SocketChannelConfig { private final Socket socket; /** * Creates a new instance. */ public DefaultSocketChannelConfig(Socket socket) { if (socket == null) { throw new NullPointerException("socket"); } this.socket = socket; } @Override public boolean setOption(String key, Object value) { if (super.setOption(key, value)) { return true; } if (key.equals("receiveBufferSize")) { setReceiveBufferSize(ConversionUtil.toInt(value)); } else if (key.equals("sendBufferSize")) { setSendBufferSize(ConversionUtil.toInt(value)); } else if (key.equals("tcpNoDelay")) { setTcpNoDelay(ConversionUtil.toBoolean(value)); } else if (key.equals("keepAlive")) { setKeepAlive(ConversionUtil.toBoolean(value)); } else if (key.equals("reuseAddress")) { setReuseAddress(ConversionUtil.toBoolean(value)); } else if (key.equals("soLinger")) { setSoLinger(ConversionUtil.toInt(value)); } else if (key.equals("trafficClass")) { setTrafficClass(ConversionUtil.toInt(value)); } else { return false; } return true; } public int getReceiveBufferSize() { try { return socket.getReceiveBufferSize(); } catch (SocketException e) { throw new ChannelException(e); } } public int getSendBufferSize() { try { return socket.getSendBufferSize(); } catch (SocketException e) { throw new ChannelException(e); } } public int getSoLinger() { try { return socket.getSoLinger(); } catch (SocketException e) { throw new ChannelException(e); } } public int getTrafficClass() { try { return socket.getTrafficClass(); } catch (SocketException e) { throw new ChannelException(e); } } public boolean isKeepAlive() { try { return socket.getKeepAlive(); } catch (SocketException e) { throw new ChannelException(e); } } public boolean isReuseAddress() { try { return socket.getReuseAddress(); } catch (SocketException e) { throw new ChannelException(e); } } public boolean isTcpNoDelay() { try { return socket.getTcpNoDelay(); } catch (SocketException e) { throw new ChannelException(e); } } public void setKeepAlive(boolean keepAlive) { try { socket.setKeepAlive(keepAlive); } catch (SocketException e) { throw new ChannelException(e); } } public void setPerformancePreferences( int connectionTime, int latency, int bandwidth) { socket.setPerformancePreferences(connectionTime, latency, bandwidth); } public void setReceiveBufferSize(int receiveBufferSize) { try { socket.setReceiveBufferSize(receiveBufferSize); } catch (SocketException e) { throw new ChannelException(e); } } public void setReuseAddress(boolean reuseAddress) { try { socket.setReuseAddress(reuseAddress); } catch (SocketException e) { throw new ChannelException(e); } } public void setSendBufferSize(int sendBufferSize) { try { socket.setSendBufferSize(sendBufferSize); } catch (SocketException e) { throw new ChannelException(e); } } public void setSoLinger(int soLinger) { try { if (soLinger < 0) { socket.setSoLinger(false, 0); } else { socket.setSoLinger(true, soLinger); } } catch (SocketException e) { throw new ChannelException(e); } } public void setTcpNoDelay(boolean tcpNoDelay) { try { socket.setTcpNoDelay(tcpNoDelay); } catch (SocketException e) { throw new ChannelException(e); } } public void setTrafficClass(int trafficClass) { try { socket.setTrafficClass(trafficClass); } catch (SocketException e) { throw new ChannelException(e); } } }