1)refactored sctp server channel config classes 2)added sctp server channel buffer size setter/getters 3)updated sctp examples
This commit is contained in:
parent
08b509b209
commit
319ca93330
@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Red Hat 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.sctp;
|
||||||
|
|
||||||
|
import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
|
||||||
|
|
||||||
|
import org.jboss.netty.channel.ChannelException;
|
||||||
|
import org.jboss.netty.channel.DefaultServerChannelConfig;
|
||||||
|
import org.jboss.netty.util.internal.ConversionUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default {@link org.jboss.netty.channel.socket.ServerSocketChannelConfig} implementation.
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
|
||||||
|
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
|
||||||
|
* @author <a href="http://github.com/jestan">Jestan Nirojan</a>
|
||||||
|
* @version $Rev$, $Date$
|
||||||
|
*/
|
||||||
|
public class DefaultSctpServerChannelConfig extends DefaultServerChannelConfig
|
||||||
|
implements SctpServerChannelConfig {
|
||||||
|
|
||||||
|
private final com.sun.nio.sctp.SctpServerChannel serverChannel;
|
||||||
|
private volatile int backlog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
|
public DefaultSctpServerChannelConfig(com.sun.nio.sctp.SctpServerChannel serverChannel) {
|
||||||
|
if (serverChannel == null) {
|
||||||
|
throw new NullPointerException("serverChannel");
|
||||||
|
}
|
||||||
|
this.serverChannel = serverChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setOption(String key, Object value) {
|
||||||
|
if (super.setOption(key, value)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.equals("sctpInitMaxStreams")) {
|
||||||
|
setInitMaxStreams((InitMaxStreams) value);
|
||||||
|
} else if (key.equals("backlog")) {
|
||||||
|
setBacklog(ConversionUtil.toInt(value));
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSendBufferSize() {
|
||||||
|
try {
|
||||||
|
return serverChannel.getOption(SO_SNDBUF);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSendBufferSize(int sendBufferSize) {
|
||||||
|
try {
|
||||||
|
serverChannel.setOption(SO_SNDBUF, sendBufferSize);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getReceiveBufferSize() {
|
||||||
|
try {
|
||||||
|
return serverChannel.getOption(SO_RCVBUF);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setReceiveBufferSize(int receiveBufferSize) {
|
||||||
|
try {
|
||||||
|
serverChannel.setOption(SO_RCVBUF, receiveBufferSize);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InitMaxStreams getInitMaxStreams() {
|
||||||
|
try {
|
||||||
|
return serverChannel.getOption(SCTP_INIT_MAXSTREAMS);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setInitMaxStreams(InitMaxStreams initMaxStreams) {
|
||||||
|
try {
|
||||||
|
serverChannel.setOption(SCTP_INIT_MAXSTREAMS, initMaxStreams);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getBacklog() {
|
||||||
|
return backlog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBacklog(int backlog) {
|
||||||
|
if (backlog < 0) {
|
||||||
|
throw new IllegalArgumentException("backlog: " + backlog);
|
||||||
|
}
|
||||||
|
this.backlog = backlog;
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public interface SctpServerChannel extends ServerChannel {
|
public interface SctpServerChannel extends ServerChannel {
|
||||||
@Override
|
@Override
|
||||||
ServerSctpChannelConfig getConfig();
|
SctpServerChannelConfig getConfig();
|
||||||
@Override
|
@Override
|
||||||
InetSocketAddress getLocalAddress();
|
InetSocketAddress getLocalAddress();
|
||||||
|
|
||||||
|
@ -16,81 +16,80 @@
|
|||||||
package org.jboss.netty.channel.socket.sctp;
|
package org.jboss.netty.channel.socket.sctp;
|
||||||
|
|
||||||
import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
|
import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
|
||||||
import org.jboss.netty.channel.ChannelException;
|
|
||||||
import org.jboss.netty.channel.DefaultServerChannelConfig;
|
|
||||||
import org.jboss.netty.util.internal.ConversionUtil;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import org.jboss.netty.channel.ChannelConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default {@link org.jboss.netty.channel.socket.ServerSocketChannelConfig} implementation.
|
* A {@link org.jboss.netty.channel.ChannelConfig} for a {@link SctpServerChannelConfig}.
|
||||||
|
* <p/>
|
||||||
|
* <h3>Available options</h3>
|
||||||
|
* <p/>
|
||||||
|
* In addition to the options provided by {@link org.jboss.netty.channel.ChannelConfig},
|
||||||
|
* {@link SctpServerChannelConfig} allows the following options in the
|
||||||
|
* option map:
|
||||||
|
* <p/>
|
||||||
|
* <table border="1" cellspacing="0" cellpadding="6">
|
||||||
|
* <tr>
|
||||||
|
* <th>Name</th><th>Associated setter method</th>
|
||||||
|
* </tr><tr>
|
||||||
|
* <td>{@code "backlog"}</td><td>{@link #setBacklog(int)}</td>
|
||||||
|
* </tr><tr>
|
||||||
|
* * <td>{@code "receiveBufferSize"}</td><td>{@link #setReceiveBufferSize(int)}</td>
|
||||||
|
* </tr><tr>
|
||||||
|
* <td>{@code "sendBufferSize"}</td><td>{@link #setSendBufferSize(int)}</td>
|
||||||
|
* </tr><tr>
|
||||||
|
* <td>{@code "sctpInitMaxStreams"}</td><td>{@link #setInitMaxStreams(InitMaxStreams)} (int)}}</td>
|
||||||
|
* </tr>
|
||||||
|
* </table>
|
||||||
*
|
*
|
||||||
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
|
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
|
||||||
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
|
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
|
||||||
* @author <a href="http://github.com/jestan">Jestan Nirojan</a>
|
* @author <a href="http://github.com/jestan">Jestan Nirojan</a>
|
||||||
*
|
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
*/
|
*/
|
||||||
public class SctpServerChannelConfig extends DefaultServerChannelConfig
|
public interface SctpServerChannelConfig extends ChannelConfig {
|
||||||
implements ServerSctpChannelConfig {
|
|
||||||
|
|
||||||
private final com.sun.nio.sctp.SctpServerChannel serverChannel;
|
|
||||||
private volatile int backlog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance.
|
* Gets the backlog value to specify when the channel binds to a local
|
||||||
|
* address.
|
||||||
*/
|
*/
|
||||||
public SctpServerChannelConfig(com.sun.nio.sctp.SctpServerChannel serverChannel) {
|
int getBacklog();
|
||||||
if (serverChannel == null) {
|
|
||||||
throw new NullPointerException("serverChannel");
|
|
||||||
}
|
|
||||||
this.serverChannel = serverChannel;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public boolean setOption(String key, Object value) {
|
* Sets the backlog value to specify when the channel binds to a local
|
||||||
if (super.setOption(key, value)) {
|
* address.
|
||||||
return true;
|
*/
|
||||||
}
|
void setBacklog(int backlog);
|
||||||
|
|
||||||
if (key.equals("sctpInitMaxStreams")) {
|
|
||||||
setInitMaxStreams((InitMaxStreams) value);
|
|
||||||
} else if (key.equals("backlog")) {
|
|
||||||
setBacklog(ConversionUtil.toInt(value));
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public InitMaxStreams getInitMaxStreams() {
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SO_SNDBUF}</a> option.
|
||||||
try {
|
*/
|
||||||
return serverChannel.getOption(SCTP_INIT_MAXSTREAMS);
|
int getSendBufferSize();
|
||||||
} catch (IOException e) {
|
|
||||||
throw new ChannelException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public void setInitMaxStreams(InitMaxStreams initMaxStreams) {
|
* Sets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SO_SNDBUF}</a> option.
|
||||||
try {
|
*/
|
||||||
serverChannel.setOption(SCTP_INIT_MAXSTREAMS, initMaxStreams);
|
void setSendBufferSize(int sendBufferSize);
|
||||||
} catch (IOException e) {
|
|
||||||
throw new ChannelException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public int getBacklog() {
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SO_RCVBUF}</a> option.
|
||||||
return backlog;
|
*/
|
||||||
}
|
int getReceiveBufferSize();
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public void setBacklog(int backlog) {
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SO_RCVBUF}</a> option.
|
||||||
if (backlog < 0) {
|
*/
|
||||||
throw new IllegalArgumentException("backlog: " + backlog);
|
void setReceiveBufferSize(int receiveBufferSize);
|
||||||
}
|
|
||||||
this.backlog = backlog;
|
|
||||||
}
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SCTP_INIT_MAXSTREAMS}</a> option.
|
||||||
|
*/
|
||||||
|
InitMaxStreams getInitMaxStreams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SCTP_INIT_MAXSTREAMS}</a> option.
|
||||||
|
*/
|
||||||
|
void setInitMaxStreams(InitMaxStreams initMaxStreams);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
package org.jboss.netty.channel.socket.sctp;
|
package org.jboss.netty.channel.socket.sctp;
|
||||||
|
|
||||||
import org.jboss.netty.channel.*;
|
import org.jboss.netty.channel.*;
|
||||||
import org.jboss.netty.channel.socket.ServerSocketChannelConfig;
|
|
||||||
import org.jboss.netty.logging.InternalLogger;
|
import org.jboss.netty.logging.InternalLogger;
|
||||||
import org.jboss.netty.logging.InternalLoggerFactory;
|
import org.jboss.netty.logging.InternalLoggerFactory;
|
||||||
|
|
||||||
@ -51,7 +50,7 @@ class SctpServerChannelImpl extends AbstractServerChannel
|
|||||||
final com.sun.nio.sctp.SctpServerChannel serverChannel;
|
final com.sun.nio.sctp.SctpServerChannel serverChannel;
|
||||||
final Lock shutdownLock = new ReentrantLock();
|
final Lock shutdownLock = new ReentrantLock();
|
||||||
volatile Selector selector;
|
volatile Selector selector;
|
||||||
private final ServerSctpChannelConfig config;
|
private final SctpServerChannelConfig config;
|
||||||
|
|
||||||
private volatile boolean bound;
|
private volatile boolean bound;
|
||||||
|
|
||||||
@ -82,13 +81,13 @@ class SctpServerChannelImpl extends AbstractServerChannel
|
|||||||
throw new ChannelException("Failed to enter non-blocking mode.", e);
|
throw new ChannelException("Failed to enter non-blocking mode.", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
config = new SctpServerChannelConfig(serverChannel);
|
config = new DefaultSctpServerChannelConfig(serverChannel);
|
||||||
|
|
||||||
fireChannelOpen(this);
|
fireChannelOpen(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServerSctpChannelConfig getConfig() {
|
public SctpServerChannelConfig getConfig() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2009 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* Red Hat 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.sctp;
|
|
||||||
|
|
||||||
import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
|
|
||||||
import org.jboss.netty.channel.ChannelConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link org.jboss.netty.channel.ChannelConfig} for a {@link org.jboss.netty.channel.socket.sctp.ServerSctpChannelConfig}.
|
|
||||||
* <p/>
|
|
||||||
* <h3>Available options</h3>
|
|
||||||
* <p/>
|
|
||||||
* In addition to the options provided by {@link org.jboss.netty.channel.ChannelConfig},
|
|
||||||
* {@link org.jboss.netty.channel.socket.sctp.ServerSctpChannelConfig} allows the following options in the
|
|
||||||
* option map:
|
|
||||||
* <p/>
|
|
||||||
* <table border="1" cellspacing="0" cellpadding="6">
|
|
||||||
* <tr>
|
|
||||||
* <th>Name</th><th>Associated setter method</th>
|
|
||||||
* </tr><tr>
|
|
||||||
* <td>{@code "backlog"}</td><td>{@link #setBacklog(int)}</td>
|
|
||||||
* </tr><tr>
|
|
||||||
* <td>{@code "sctpInitMaxStreams"}</td><td>{@link #setInitMaxStreams(InitMaxStreams)} (int)}}</td>
|
|
||||||
* </tr>
|
|
||||||
* </table>
|
|
||||||
*
|
|
||||||
* @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
|
|
||||||
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
|
|
||||||
* @author <a href="http://github.com/jestan">Jestan Nirojan</a>
|
|
||||||
*
|
|
||||||
* @version $Rev$, $Date$
|
|
||||||
*/
|
|
||||||
public interface ServerSctpChannelConfig extends ChannelConfig {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the backlog value to specify when the channel binds to a local
|
|
||||||
* address.
|
|
||||||
*/
|
|
||||||
int getBacklog();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the backlog value to specify when the channel binds to a local
|
|
||||||
* address.
|
|
||||||
*/
|
|
||||||
void setBacklog(int backlog);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SCTP_INIT_MAXSTREAMS}</a> option.
|
|
||||||
*/
|
|
||||||
InitMaxStreams getInitMaxStreams();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">{@code SCTP_INIT_MAXSTREAMS}</a> option.
|
|
||||||
*/
|
|
||||||
void setInitMaxStreams(InitMaxStreams initMaxStreams);
|
|
||||||
}
|
|
@ -56,6 +56,11 @@ public class SctpClient {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
bootstrap.setOption("sendBufferSize", 1048576);
|
||||||
|
bootstrap.setOption("receiveBufferSize", 1048576);
|
||||||
|
|
||||||
|
bootstrap.setOption("sctpNoDelay", true);
|
||||||
|
|
||||||
// Start the connection attempt.
|
// Start the connection attempt.
|
||||||
ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 2955), new InetSocketAddress("localhost", 2956));
|
ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 2955), new InetSocketAddress("localhost", 2956));
|
||||||
|
|
||||||
|
@ -53,6 +53,10 @@ public class SctpServer {
|
|||||||
return Channels.pipeline(executionHandler, new SctpServerHandler());
|
return Channels.pipeline(executionHandler, new SctpServerHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
bootstrap.setOption("sendBufferSize", 1048576);
|
||||||
|
bootstrap.setOption("receiveBufferSize", 1048576);
|
||||||
|
|
||||||
|
bootstrap.setOption("child.sctpNoDelay", true);
|
||||||
|
|
||||||
// Bind and start to accept incoming connections.
|
// Bind and start to accept incoming connections.
|
||||||
bootstrap.bind(new InetSocketAddress("localhost", 2955));
|
bootstrap.bind(new InetSocketAddress("localhost", 2955));
|
||||||
|
Loading…
Reference in New Issue
Block a user