Initial port of SCTP basic classes and interfaces to Netty 4.0
This commit is contained in:
parent
d7f5498e7e
commit
4550ad88a6
@ -35,5 +35,19 @@
|
|||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<!-- Exclude the com.sun.nio stuff as this is included in the jdk if its supported by the running os -->
|
||||||
|
<exclude>**/com/**</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public class AbstractNotificationHandler<T> implements NotificationHandler<T> {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerResult handleNotification(AssociationChangeNotification notification, Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerResult handleNotification(Notification notification, Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerResult handleNotification(PeerAddressChangeNotification notification, Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerResult handleNotification(SendFailedNotification notification, Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerResult handleNotification(ShutdownNotification notification, Object o) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
22
transport/src/main/java/com/sun/nio/sctp/Association.java
Normal file
22
transport/src/main/java/com/sun/nio/sctp/Association.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public class Association {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public abstract class AssociationChangeNotification implements Notification {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
}
|
25
transport/src/main/java/com/sun/nio/sctp/HandlerResult.java
Normal file
25
transport/src/main/java/com/sun/nio/sctp/HandlerResult.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO Document me.
|
||||||
|
*
|
||||||
|
* @author <a href="http://gleamynode.net/">Trustin Lee</a>
|
||||||
|
*/
|
||||||
|
public enum HandlerResult {
|
||||||
|
CONTINUE, RETURN;
|
||||||
|
}
|
38
transport/src/main/java/com/sun/nio/sctp/MessageInfo.java
Normal file
38
transport/src/main/java/com/sun/nio/sctp/MessageInfo.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
|
||||||
|
public abstract class MessageInfo {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MessageInfo createOutgoing(Association association, SocketAddress address, int streamNumber) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract SocketAddress address();
|
||||||
|
public abstract int streamNumber();
|
||||||
|
public abstract MessageInfo streamNumber(int streamNumber);
|
||||||
|
public abstract int payloadProtocolID();
|
||||||
|
public abstract MessageInfo payloadProtocolID(int ppid);
|
||||||
|
public abstract boolean isComplete();
|
||||||
|
public abstract boolean isUnordered();
|
||||||
|
public abstract MessageInfo unordered(boolean b);
|
||||||
|
|
||||||
|
}
|
20
transport/src/main/java/com/sun/nio/sctp/Notification.java
Normal file
20
transport/src/main/java/com/sun/nio/sctp/Notification.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public interface Notification {
|
||||||
|
Association association();
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public interface NotificationHandler<T> {
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public abstract class PeerAddressChangeNotification implements Notification {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
}
|
57
transport/src/main/java/com/sun/nio/sctp/SctpChannel.java
Normal file
57
transport/src/main/java/com/sun/nio/sctp/SctpChannel.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.channels.spi.AbstractSelectableChannel;
|
||||||
|
import java.nio.channels.spi.SelectorProvider;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public abstract class SctpChannel extends AbstractSelectableChannel {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SctpChannel open() throws IOException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SctpChannel(SelectorProvider provider) {
|
||||||
|
super(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException;
|
||||||
|
public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value) throws IOException;
|
||||||
|
|
||||||
|
public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException;
|
||||||
|
public abstract Set<SocketAddress> getRemoteAddresses() throws IOException;
|
||||||
|
|
||||||
|
public abstract Association association() throws IOException;
|
||||||
|
public abstract SctpChannel bind(SocketAddress local) throws IOException;
|
||||||
|
public abstract boolean connect(SocketAddress remote) throws IOException;
|
||||||
|
public abstract boolean finishConnect() throws IOException;
|
||||||
|
|
||||||
|
public abstract SctpChannel bindAddress(InetAddress inetAddress) throws IOException;
|
||||||
|
public abstract SctpChannel unbindAddress(InetAddress inetAddress) throws IOException;
|
||||||
|
|
||||||
|
public abstract <T> MessageInfo receive(ByteBuffer dst, T attachment, NotificationHandler<T> handler) throws IOException;
|
||||||
|
public abstract int send(ByteBuffer src, MessageInfo messageInfo) throws IOException;
|
||||||
|
|
||||||
|
public abstract Set<SctpSocketOption<?>> supportedOptions();
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
import java.nio.channels.spi.AbstractSelectableChannel;
|
||||||
|
import java.nio.channels.spi.SelectorProvider;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public abstract class SctpServerChannel extends AbstractSelectableChannel {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SctpServerChannel open() throws IOException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SctpServerChannel(SelectorProvider provider) {
|
||||||
|
super(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException;
|
||||||
|
public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value) throws IOException;
|
||||||
|
|
||||||
|
public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException;
|
||||||
|
|
||||||
|
public abstract SctpServerChannel bind(SocketAddress local) throws IOException;
|
||||||
|
public abstract SctpServerChannel bind(SocketAddress local, int backlog) throws IOException;
|
||||||
|
|
||||||
|
public abstract SctpServerChannel bindAddress(InetAddress inetAddress) throws IOException;
|
||||||
|
public abstract SctpServerChannel unbindAddress(InetAddress inetAddress) throws IOException;
|
||||||
|
|
||||||
|
public abstract SctpChannel accept() throws IOException;
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public interface SctpSocketOption<T> {
|
||||||
|
String name();
|
||||||
|
Class<T> type();
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
|
||||||
|
public class SctpStandardSocketOptions {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final SctpSocketOption<Boolean> SCTP_DISABLE_FRAGMENTS = null;
|
||||||
|
public static final SctpSocketOption<Boolean> SCTP_EXPLICIT_COMPLETE = null;
|
||||||
|
public static final SctpSocketOption<Integer> SCTP_FRAGMENT_INTERLEAVE = null;
|
||||||
|
public static final SctpSocketOption<InitMaxStreams> SCTP_INIT_MAXSTREAMS = null;
|
||||||
|
public static final SctpSocketOption<Boolean> SCTP_NODELAY = null;
|
||||||
|
public static final SctpSocketOption<SocketAddress> SCTP_PRIMARY_ADDR = null;
|
||||||
|
public static final SctpSocketOption<SocketAddress> SCTP_SET_PEER_PRIMARY_ADDR = null;
|
||||||
|
public static final SctpSocketOption<Integer> SO_LINGER = null;
|
||||||
|
public static final SctpSocketOption<Integer> SO_RCVBUF = null;
|
||||||
|
public static final SctpSocketOption<Integer> SO_SNDBUF = null;
|
||||||
|
|
||||||
|
public static class InitMaxStreams {
|
||||||
|
|
||||||
|
public static InitMaxStreams create(int i, int i1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int maxInStreams() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int maxOutStreams() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public abstract class SendFailedNotification implements Notification {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public abstract class ShutdownNotification implements Notification {
|
||||||
|
static {
|
||||||
|
UnsupportedOperatingSystemException.raise();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.sun.nio.sctp;
|
||||||
|
|
||||||
|
public class UnsupportedOperatingSystemException extends RuntimeException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -221782446524784377L;
|
||||||
|
|
||||||
|
public static void raise() {
|
||||||
|
throw new UnsupportedOperatingSystemException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnsupportedOperatingSystemException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnsupportedOperatingSystemException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnsupportedOperatingSystemException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnsupportedOperatingSystemException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
}
|
22
transport/src/main/java/com/sun/nio/sctp/package-info.java
Normal file
22
transport/src/main/java/com/sun/nio/sctp/package-info.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This package is only included to let SCTP also compile on non-unix operation systems.
|
||||||
|
*
|
||||||
|
* <strong>This will not get included in the generated jar!</strong>
|
||||||
|
*/
|
||||||
|
package com.sun.nio.sctp;
|
@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import com.sun.nio.sctp.SctpChannel;
|
||||||
|
import io.netty.channel.ChannelException;
|
||||||
|
import io.netty.channel.ChannelOption;
|
||||||
|
import io.netty.channel.DefaultChannelConfig;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.sun.nio.sctp.SctpStandardSocketOptions;
|
||||||
|
import static io.netty.channel.ChannelOption.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default {@link SctpChannelConfig} implementation for SCTP.
|
||||||
|
*/
|
||||||
|
class DefaultSctpChannelConfig extends DefaultChannelConfig implements SctpChannelConfig {
|
||||||
|
|
||||||
|
private SctpChannel channel;
|
||||||
|
|
||||||
|
DefaultSctpChannelConfig(SctpChannel channel) {
|
||||||
|
if (channel == null) {
|
||||||
|
throw new NullPointerException("channel");
|
||||||
|
}
|
||||||
|
this.channel = channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<ChannelOption<?>, Object> getOptions() {
|
||||||
|
return getOptions(
|
||||||
|
super.getOptions(),
|
||||||
|
SO_RCVBUF, SO_SNDBUF, SCTP_NODELAY, SCTP_INIT_MAXSTREAMS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T getOption(ChannelOption<T> option) {
|
||||||
|
if (option == SO_RCVBUF) {
|
||||||
|
return (T) Integer.valueOf(getReceiveBufferSize());
|
||||||
|
}
|
||||||
|
if (option == SO_SNDBUF) {
|
||||||
|
return (T) Integer.valueOf(getSendBufferSize());
|
||||||
|
}
|
||||||
|
if (option == SCTP_NODELAY) {
|
||||||
|
return (T) Boolean.valueOf(isSctpNoDelay());
|
||||||
|
}
|
||||||
|
return super.getOption(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> boolean setOption(ChannelOption<T> option, T value) {
|
||||||
|
validate(option, value);
|
||||||
|
|
||||||
|
if (option == SO_RCVBUF) {
|
||||||
|
setReceiveBufferSize((Integer) value);
|
||||||
|
} else if (option == SO_SNDBUF) {
|
||||||
|
setSendBufferSize((Integer) value);
|
||||||
|
} else if (option == SCTP_NODELAY) {
|
||||||
|
setSctpNoDelay((Boolean) value);
|
||||||
|
} else if (option == SCTP_INIT_MAXSTREAMS) {
|
||||||
|
setInitMaxStreams((SctpStandardSocketOptions.InitMaxStreams) value);
|
||||||
|
} else {
|
||||||
|
return super.setOption(option, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSctpNoDelay() {
|
||||||
|
try {
|
||||||
|
return channel.getOption(SctpStandardSocketOptions.SCTP_NODELAY);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSctpNoDelay(boolean sctpNoDelay) {
|
||||||
|
try {
|
||||||
|
channel.setOption(SctpStandardSocketOptions.SCTP_NODELAY, sctpNoDelay);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSendBufferSize() {
|
||||||
|
try {
|
||||||
|
return channel.getOption(SctpStandardSocketOptions.SO_SNDBUF);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSendBufferSize(int sendBufferSize) {
|
||||||
|
try {
|
||||||
|
channel.setOption(SctpStandardSocketOptions.SO_SNDBUF, sendBufferSize);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getReceiveBufferSize() {
|
||||||
|
try {
|
||||||
|
return channel.getOption(SctpStandardSocketOptions.SO_RCVBUF);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setReceiveBufferSize(int receiveBufferSize) {
|
||||||
|
try {
|
||||||
|
channel.setOption(SctpStandardSocketOptions.SO_RCVBUF, receiveBufferSize);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SctpStandardSocketOptions.InitMaxStreams getInitMaxStreams() {
|
||||||
|
try {
|
||||||
|
return channel.getOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setInitMaxStreams(SctpStandardSocketOptions.InitMaxStreams initMaxStreams) {
|
||||||
|
try {
|
||||||
|
channel.setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, initMaxStreams);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ChannelException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import com.sun.nio.sctp.Association;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelFuture;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A SCTP/IP {@link io.netty.channel.Channel}
|
||||||
|
*/
|
||||||
|
public interface SctpChannel extends Channel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bind a address to the already bound channel to enable multi-homing.
|
||||||
|
* The Channel bust be bound and yet to be connected.
|
||||||
|
*/
|
||||||
|
ChannelFuture bindAddress(InetAddress localAddress);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unbind the address from channel's multi-homing address list.
|
||||||
|
* The address should be added already in multi-homing address list.
|
||||||
|
*/
|
||||||
|
ChannelFuture unbindAddress(InetAddress localAddress);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the underlying SCTP association.
|
||||||
|
*/
|
||||||
|
Association association();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the (primary) local address of the SCTP channel.
|
||||||
|
*
|
||||||
|
* Please note that, this return the first local address in the underlying SCTP Channel's
|
||||||
|
* local address iterator to support Netty Channel API. In other words, its the application's
|
||||||
|
* responsibility to keep track of it's local primary address.
|
||||||
|
*
|
||||||
|
* (To set a local address as primary, the application can request by calling local SCTP stack,
|
||||||
|
* with SctpStandardSocketOption.SCTP_PRIMARY_ADDR option).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
InetSocketAddress localAddress();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all local addresses of the SCTP channel.
|
||||||
|
* Please note that, it will return more than one address if this channel is using multi-homing
|
||||||
|
*/
|
||||||
|
Set<InetSocketAddress> allLocalAddresses();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link SctpChannelConfig} configuration of the channel.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
SctpChannelConfig config();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the (primary) remote address of the SCTP channel.
|
||||||
|
*
|
||||||
|
* Please note that, this return the first remote address in the underlying SCTP Channel's
|
||||||
|
* remote address iterator to support Netty Channel API. In other words, its the application's
|
||||||
|
* responsibility to keep track of it's peer's primary address.
|
||||||
|
*
|
||||||
|
* (The application can request it's remote peer to set a specific address as primary by
|
||||||
|
* calling the local SCTP stack with SctpStandardSocketOption.SCTP_SET_PEER_PRIMARY_ADDR option)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
InetSocketAddress remoteAddress();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all remote addresses of the SCTP server channel.
|
||||||
|
* Please note that, it will return more than one address if the remote is using multi-homing.
|
||||||
|
*/
|
||||||
|
Set<InetSocketAddress> allRemoteAddresses();
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import io.netty.channel.ChannelConfig;
|
||||||
|
|
||||||
|
import static com.sun.nio.sctp.SctpStandardSocketOptions.InitMaxStreams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link io.netty.channel.ChannelConfig} for a {@link SctpChannel}.
|
||||||
|
* <p/>
|
||||||
|
* <h3>Available options</h3>
|
||||||
|
* <p/>
|
||||||
|
* In addition to the options provided by {@link io.netty.channel.ChannelConfig},
|
||||||
|
* {@link SctpChannelConfig} 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 "sctpNoDelay"}</td><td>{@link #setSctpNoDelay(boolean)}}</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(com.sun.nio.sctp.SctpStandardSocketOptions.InitMaxStreams)}</td>
|
||||||
|
* </tr>
|
||||||
|
* </table>
|
||||||
|
*/
|
||||||
|
public interface SctpChannelConfig extends ChannelConfig {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SCTP_NODELAY}</a> option.
|
||||||
|
*/
|
||||||
|
boolean isSctpNoDelay();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SCTP_NODELAY}</a> option.
|
||||||
|
*/
|
||||||
|
void setSctpNoDelay(boolean sctpNoDelay);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_SNDBUF}</a> option.
|
||||||
|
*/
|
||||||
|
int getSendBufferSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_SNDBUF}</a> option.
|
||||||
|
*/
|
||||||
|
void setSendBufferSize(int sendBufferSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_RCVBUF}</a> option.
|
||||||
|
*/
|
||||||
|
int getReceiveBufferSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_RCVBUF}</a> option.
|
||||||
|
*/
|
||||||
|
void setReceiveBufferSize(int receiveBufferSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
120
transport/src/main/java/io/netty/channel/socket/SctpFrame.java
Normal file
120
transport/src/main/java/io/netty/channel/socket/SctpFrame.java
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import com.sun.nio.sctp.MessageInfo;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.ByteBufUtil;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of SCTP Data Chunk
|
||||||
|
*/
|
||||||
|
public final class SctpFrame {
|
||||||
|
private final int streamIdentifier;
|
||||||
|
private final int protocolIdentifier;
|
||||||
|
|
||||||
|
private final ByteBuf payloadBuffer;
|
||||||
|
|
||||||
|
private MessageInfo msgInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Essential data that is being carried within SCTP Data Chunk
|
||||||
|
* @param protocolIdentifier of payload
|
||||||
|
* @param streamIdentifier that you want to send the payload
|
||||||
|
* @param payloadBuffer channel buffer
|
||||||
|
*/
|
||||||
|
public SctpFrame(int protocolIdentifier, int streamIdentifier, ByteBuf payloadBuffer) {
|
||||||
|
this.protocolIdentifier = protocolIdentifier;
|
||||||
|
this.streamIdentifier = streamIdentifier;
|
||||||
|
this.payloadBuffer = payloadBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SctpFrame(MessageInfo msgInfo, ByteBuf payloadBuffer) {
|
||||||
|
this.msgInfo = msgInfo;
|
||||||
|
this.streamIdentifier = msgInfo.streamNumber();
|
||||||
|
this.protocolIdentifier = msgInfo.payloadProtocolID();
|
||||||
|
this.payloadBuffer = payloadBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStreamIdentifier() {
|
||||||
|
return streamIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getProtocolIdentifier() {
|
||||||
|
return protocolIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ByteBuf getPayloadBuffer() {
|
||||||
|
if (payloadBuffer.readable()) {
|
||||||
|
return payloadBuffer.slice();
|
||||||
|
} else {
|
||||||
|
return Unpooled.EMPTY_BUFFER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfo getMessageInfo() {
|
||||||
|
return msgInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o == null || getClass() != o.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SctpFrame sctpFrame = (SctpFrame) o;
|
||||||
|
|
||||||
|
if (protocolIdentifier != sctpFrame.protocolIdentifier) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streamIdentifier != sctpFrame.streamIdentifier) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!payloadBuffer.equals(sctpFrame.payloadBuffer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = streamIdentifier;
|
||||||
|
result = 31 * result + protocolIdentifier;
|
||||||
|
result = 31 * result + payloadBuffer.hashCode();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new StringBuilder().
|
||||||
|
append("SctpFrame{").
|
||||||
|
append("streamIdentifier=").
|
||||||
|
append(streamIdentifier).
|
||||||
|
append(", protocolIdentifier=").
|
||||||
|
append(protocolIdentifier).
|
||||||
|
append(", payloadBuffer=").
|
||||||
|
append(ByteBufUtil.hexDump(getPayloadBuffer())).
|
||||||
|
append('}').toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import io.netty.channel.ChannelFuture;
|
||||||
|
import io.netty.channel.ServerChannel;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A SCTP/IP {@link io.netty.channel.ServerChannel} which accepts incoming SCTP/IP connections.
|
||||||
|
*
|
||||||
|
* The {@link SctpServerChannel} provides the additional operations, available in the
|
||||||
|
* underlying JDK SCTP Server Channel like multi-homing etc.
|
||||||
|
*/
|
||||||
|
public interface SctpServerChannel extends ServerChannel {
|
||||||
|
/**
|
||||||
|
* Bind a address to the already bound channel to enable multi-homing.
|
||||||
|
* The Channel bust be bound and yet to be connected.
|
||||||
|
*/
|
||||||
|
ChannelFuture bindAddress(InetAddress localAddress);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unbind the address from channel's multi-homing address list.
|
||||||
|
* The address should be added already in multi-homing address list.
|
||||||
|
*/
|
||||||
|
ChannelFuture unbindAddress(InetAddress localAddress);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link SctpServerChannelConfig} configuration of the channel.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
SctpServerChannelConfig config();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the (primary) local address of the SCTP server channel.
|
||||||
|
*
|
||||||
|
* Please note that, this return the first local address in the underlying SCTP ServerChannel's
|
||||||
|
* local address iterator to support Netty Channel API. In other words, its the application's
|
||||||
|
* responsibility to keep track of it's local primary address.
|
||||||
|
*
|
||||||
|
* (To set a local address as primary, the application can request by calling local SCTP stack,
|
||||||
|
* with SctpStandardSocketOption.SCTP_PRIMARY_ADDR option).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
InetSocketAddress localAddress();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all local addresses of the SCTP server channel.
|
||||||
|
* Please note that, it will return more than one address if this channel is using multi-homing
|
||||||
|
*/
|
||||||
|
Set<InetSocketAddress> allLocalAddresses();
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* 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 io.netty.channel.socket;
|
||||||
|
|
||||||
|
import io.netty.channel.ChannelConfig;
|
||||||
|
|
||||||
|
import static com.sun.nio.sctp.SctpStandardSocketOptions.InitMaxStreams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link io.netty.channel.ChannelConfig} for a {@link SctpServerChannelConfig}.
|
||||||
|
* <p/>
|
||||||
|
* <h3>Available options</h3>
|
||||||
|
* <p/>
|
||||||
|
* In addition to the options provided by {@link io.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(com.sun.nio.sctp.SctpStandardSocketOptions.InitMaxStreams)} (int)}}</td>
|
||||||
|
* </tr>
|
||||||
|
* </table>
|
||||||
|
*/
|
||||||
|
public interface SctpServerChannelConfig 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 SO_SNDBUF}</a> option.
|
||||||
|
*/
|
||||||
|
int getSendBufferSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_SNDBUF}</a> option.
|
||||||
|
*/
|
||||||
|
void setSendBufferSize(int sendBufferSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_RCVBUF}</a> option.
|
||||||
|
*/
|
||||||
|
int getReceiveBufferSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the <a href="http://openjdk.java.net/projects/sctp/javadoc/com/sun/nio/sctp/SctpStandardSocketOption.html">
|
||||||
|
* {@code SO_RCVBUF}</a> option.
|
||||||
|
*/
|
||||||
|
void setReceiveBufferSize(int receiveBufferSize);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user